{"version":3,"sources":["../src/configs.json","../src/config.ts","../src/errors/transaction-building.errors.ts","../src/utils/pda.utils.ts","../src/constants/oracle.consts.ts","../src/constants/mrgn-program.consts.ts","../src/constants/luts.consts.ts","../src/constants/program-keys.consts.ts","../src/constants/misc.consts.ts","../src/constants/transaction.consts.ts","../src/constants/mints.consts.ts","../src/utils/accounting.utils.ts","../src/utils/conversion.utils.ts","../src/services/transaction/helpers/bundle-simulation.ts","../src/services/transaction/helpers/priority.ts","../src/services/transaction/helpers/decode.ts","../src/services/transaction/helpers/tx-size.ts","../src/idl/marginfi_0.1.11.json","../src/idl/index.ts","../src/services/bank/types/bank.types.ts","../src/services/transaction/helpers/tx-formatting.ts","../src/vendor/spl/constants.ts","../src/vendor/spl/errors.ts","../src/vendor/spl/utils/account.utils.ts","../src/vendor/spl/utils/ata.utils.ts","../src/vendor/spl/utils/instruction.utils.ts","../src/vendor/spl/utils/mint.utils.ts","../src/vendor/spl/instructions.ts","../src/services/transaction/actions/wrap-unwrap-sol.ts","../src/services/transaction/types/transaction.types.ts","../src/services/bank/utils/serialize.utils.ts","../src/types.ts","../src/services/bank/utils/deserialize.utils.ts","../src/services/bank/utils/compute/share-conversions.utils.ts","../src/services/account/types/account.types.ts","../src/services/account/types/simulation.types.ts","../src/services/account/types/action.types.ts","../src/services/price/types/price.types.ts","../src/services/price/utils/detection.utils.ts","../src/vendor/pyth_push_oracle/index.ts","../src/services/price/utils/pyth-data.utils.ts","../src/vendor/switchboard_pull/idl.json","../src/vendor/switchboard_pull/index.ts","../src/services/price/utils/swb-data.utils.ts","../src/services/price/utils/compute.utils.ts","../src/services/price/utils/serialize.utils.ts","../src/services/price/utils/deserialize.utils.ts","../src/services/price/utils/crankability.utils.ts","../src/services/price/utils/price-fallback.utils.ts","../src/services/account/utils/deserialize.utils.ts","../src/services/account/utils/serialize.utils.ts","../src/services/account/utils/emode.utils.ts","../src/services/account/utils/compute/balance-value-compute.utils.ts","../src/services/account/utils/compute/health-compute.utils.ts","../src/services/account/utils/compute/balance-helper.utils.ts","../src/services/account/utils/compute/account-metrics.utils.ts","../src/services/account/utils/compute/emissions-compute.utils.ts","../src/vendor/single-spl-pool/index.ts","../src/services/account/utils/compute/transaction-projection.utils.ts","../src/services/account/utils/fetch.utils.ts","../src/services/account/utils/max-amounts.utils.ts","../src/vendor/titan/client.ts","../src/vendor/titan/helpers.ts","../src/vendor/titan/gateway.ts","../src/services/account/utils/titan.utils.ts","../src/vendor/jupiter/client.ts","../src/services/account/utils/swap.utils.ts","../src/services/account/utils/jupiter.utils.ts","../src/services/account/utils/misc.utils.ts","../src/instructions.ts","../src/sync-instructions.ts","../src/services/account/actions/borrow.ts","../src/vendor/drift/types/drift-spot-market/drift-spot-market.types.ts","../src/vendor/drift/idl/drift.json","../src/vendor/drift/idl/index.ts","../src/vendor/drift/utils/serialize.utils.ts","../src/vendor/drift/utils/deserialize.utils.ts","../src/vendor/drift/constants.ts","../src/vendor/drift/utils/derive.utils.ts","../src/vendor/drift/utils/interest-rate.utils.ts","../src/vendor/drift/utils/rewards.utils.ts","../src/vendor/drift/instructions.ts","../src/vendor/drift/actions/update-market.ts","../src/vendor/jup-lend/constants.ts","../src/vendor/jup-lend/idl/jup-lend.json","../src/vendor/jup-lend/idl/index.ts","../src/vendor/jup-lend/utils/serialize.utils.ts","../src/vendor/jup-lend/utils/deserialize.utils.ts","../src/vendor/jup-lend/utils/derive.utils.ts","../src/vendor/jup-lend/utils/interest-rate.utils.ts","../src/vendor/jup-lend/instructions.ts","../src/vendor/jup-lend/actions/update-rate.ts","../src/vendor/klend/constants.ts","../src/vendor/klend/instructions.ts","../src/vendor/klend/klend.service.ts","../src/vendor/klend/utils/klend/serialize.utils.ts","../src/vendor/klend/idl/klend.json","../src/vendor/klend/idl/index.ts","../src/vendor/klend/utils/klend/deserialize.utils.ts","../src/vendor/klend/utils/klend/derive.utils.ts","../src/vendor/klend/classes/fraction.ts","../src/vendor/klend/utils/klend/interest-rate.utils.ts","../src/vendor/klend/utils/farms/serialize.utils.ts","../src/vendor/klend/utils/farms/deserialize.utils.ts","../src/services/account/actions/deposit.ts","../src/services/account/services/swap-engine/utils/serialize.utils.ts","../src/services/account/services/swap-engine/utils/swap-opts.utils.ts","../src/services/account/services/swap-engine/utils/market-estimate.utils.ts","../src/services/account/services/swap-engine/adapters/jupiter.adapter.ts","../src/services/account/services/swap-engine/adapters/titan.adapter.ts","../src/services/account/services/swap-engine/adapters/registry.ts","../src/services/account/services/swap-engine/swap-engine.service.ts","../src/services/account/actions/flash-loan.ts","../src/services/account/actions/withdraw.ts","../src/services/account/actions/repay.ts","../src/services/account/utils/flashloan-size.utils.ts","../src/services/account/utils/ix-patch.utils.ts","../src/services/account/utils/bridge.utils.ts","../src/services/account/utils/bridge-routing.utils.ts","../src/services/account/actions/account-lifecycle.ts","../src/models/balance.ts","../src/models/health-cache.ts","../src/models/account.ts","../src/services/account/actions/bridge-swap.ts","../src/services/account/actions/swap-debt.ts","../src/services/account/actions/loop.ts","../src/services/account/actions/swap-collateral.ts","../src/vendor/exponent/constants.ts","../src/vendor/exponent/idl/exponent_clmm.json","../src/vendor/exponent/idl/exponent_core.json","../src/vendor/exponent/idl/index.ts","../src/vendor/exponent/utils/deserialize.utils.ts","../src/vendor/exponent/utils/derive.utils.ts","../src/vendor/exponent/instructions.ts","../src/vendor/exponent/utils/resolve.utils.ts","../src/services/account/actions/roll-pt.ts","../src/services/account/actions/transfer-positions.ts","../src/services/account/actions/bulk.ts","../src/services/account/services/account-simulation.service.ts","../src/services/price/utils/smart-crank.utils.ts","../src/vendor/marinade/index.ts","../src/vendor/spl-stake-pool/index.ts","../src/services/price/utils/multiplier-data.utils.ts","../src/services/price/actions/oracle-update.ts","../src/services/price/actions/klend-reserve-refresh.ts","../src/services/price/actions/drift-market-update.ts","../src/services/price/actions/juplend-rate-update.ts","../src/services/price/actions/refresh-integration-banks.ts","../src/vendor/scope/index.ts","../src/vendor/gamma/constants.ts","../src/vendor/gamma/idl/gamma-idl.json","../src/vendor/gamma/idl/index.ts","../src/vendor/gamma/utils/derive.utils.ts","../src/vendor/gamma/utils/deserialize.utils.ts","../src/vendor/gamma/instructions.ts","../src/services/misc.ts","../src/services/price/services/pyth-oracle.service.ts","../src/services/price/services/swb-oracle.service.ts","../src/services/price/services/scope-oracle.service.ts","../src/services/price/services/oracle-multiplier.service.ts","../src/services/price/services/oracle.service.ts","../src/services/bank/utils/compute/value-computations.utils.ts","../src/services/bank/utils/compute/vault-pda.utils.ts","../src/services/bank/utils/fetch.utils.ts","../src/services/bank/utils/interest-rate.utils.ts","../src/services/bank/utils/bank-metrics.utils.ts","../src/services/bank/utils/lookup.utils.ts","../src/services/bank/utils/rate-limiter.utils.ts","../src/services/bank/utils/venue-liquidity.utils.ts","../src/services/bank/bank.service.ts","../src/services/group/types/group.types.ts","../src/services/group/group.service.ts","../src/services/group/utils/deserialize.utils.ts","../src/services/group/utils/serialize.utils.ts","../src/services/native-stake/utils/fetch.utils.ts","../src/services/native-stake/utils/serialize.utils.ts","../src/services/native-stake/utils/deserialize.utils.ts","../src/services/native-stake/utils/metadata.data.ts","../src/services/native-stake/utils/metadata.utils.ts","../src/services/native-stake/utils/multiplier.utils.ts","../src/services/native-stake/actions/mint-staked-lst.ts","../src/services/native-stake/actions/redeem-staked-lst.ts","../src/services/native-stake/actions/merge-stake.ts","../src/services/vaults/utils/fetch.utils.ts","../src/services/vaults/actions/deposit.ts","../src/services/vaults/actions/deposit-with-swap.ts","../src/services/vaults/actions/withdraw.ts","../src/services/integration/drift/drift.service.ts","../src/services/integration/drift/drift.utils.ts","../src/services/integration/juplend/juplend.service.ts","../src/services/integration/juplend/juplend.utils.ts","../src/services/integration/kamino/kamino.service.ts","../src/services/integration/kamino/kamino.utils.ts","../src/services/integration/integration.service.ts","../src/models/bank.ts","../src/models/group.ts","../src/models/account-wrapper.ts","../src/models/client.ts","../src/models/emode-settings.ts"],"names":["object","enums","string","array","PublicKey","assert","TransactionBuildingErrorCode","BigNumber","Decimal","BN","SolanaJSONRPCError","ComputeBudgetProgram","LAMPORTS_PER_SOL","SystemProgram","BorshInstructionCoder","TransactionMessage","RiskTier","OperationalState","OracleSetup","AssetTag","BankConfigFlag","EmodeEntryFlags","EmodeFlags","EmodeTag","EmodeImpactStatus","BankVaultType","VersionedTransaction","struct","publicKey","u64","u32","u8","bool","Buffer","TransactionInstruction","SYSVAR_RENT_PUBKEY","TransactionType","toBN","AccountType","BorshCoder","HealthCacheFlags","HealthCacheStatus","AccountFlags","MarginRequirementType","SwapProvider","PriceBias","deserialize","capConfidenceInterval","feedMint","STAKE_CONFIG_ID","bank","instructions","bs58","priceLowestBias","Encoder","Decoder","WebSocket","AddressLookupTableAccount","JUPITER_MAX_ACCOUNTS_MARGIN","makeInitMarginfiAccountIx","makeDepositIx","makeRepayIx","makeWithdrawIx","makeBorrowIx","makeBeginFlashLoanIx","SYSVAR_INSTRUCTIONS_PUBKEY","makeEndFlashLoanIx","makeKaminoDepositIx","makeKaminoWithdrawIx","makeLendingAccountLiquidateIx","makeCloseAccountIx","makePulseHealthIx","makeAccountTransferToNewAccountIx","makeGroupInitIx","makePoolConfigureBankIx","makeLendingPoolConfigureBankOracleIx","makeLendingPoolConfigureBankOracleScopeIx","makePoolAddBankIx","makeDriftDepositIx","makeDriftWithdrawIx","DRIFT_PROGRAM_ID","SYSTEM_PROGRAM_ID","makePoolAddPermissionlessStakedBankIx","BorshAccountsCoder","instructions_default","FARMS_PROGRAM_ID","borsh","u128","AnchorProvider","Program","Transaction","makeJuplendDepositIx","deserializeJupiterInstruction","buildCandidates","makeJuplendWithdrawIx","meta","Keypair","luts","flashloanTx","MAX_BALANCES","withdraw","deposit","pk","AnchorUtils","PullFeed","CrossbarClient","encodeU64","bankMetadataDto","chunkArray","chunks","isWeightedPrice","U64_MAX","StakeProgram","accounts","SYSVAR_CLOCK_ID","StakeAuthorizationLayout"],"mappings":"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IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,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A,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAA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","file":"index.cjs","sourcesContent":["[\n  {\n    \"label\": \"production\",\n    \"program\": \"MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA\",\n    \"group\": \"4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8\"\n  },\n  {\n    \"label\": \"staging\",\n    \"program\": \"stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct\",\n    \"group\": \"FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo\"\n  },\n  {\n    \"label\": \"staging-mainnet-clone\",\n    \"program\": \"stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct\",\n    \"group\": \"Diu1q9gniR1qR4Daaej3rcHd6949HMmxLGsnQ94Z3rLz\"\n  },\n  {\n    \"label\": \"staging-alt\",\n    \"program\": \"5UDghkpgW1HfYSrmEj2iAApHShqU44H6PKTAar9LL9bY\",\n    \"group\": \"ERBiJdWtnVBBd4gFm7YVHT3a776x5NbGbJBR5BDvsxtj\"\n  }\n]\n","import { PublicKey } from \"@solana/web3.js\";\nimport { array, assert, enums, object, string } from \"superstruct\";\nimport type { Infer } from \"superstruct\";\n\nimport configs from \"./configs.json\";\nimport type { Environment, Project0Config } from \"./types\";\n\nconst Project0ConfigRaw = object({\n  label: enums([\"production\", \"staging\", \"staging-mainnet-clone\", \"staging-alt\"]),\n  program: string(),\n  group: string(),\n});\nconst ConfigRaw = array(Project0ConfigRaw);\n\nexport type Project0ConfigRaw = Infer<typeof Project0ConfigRaw>;\nexport type ConfigRaw = Infer<typeof ConfigRaw>;\n\nfunction parseConfig(configRaw: Project0ConfigRaw): Project0Config {\n  return {\n    environment: configRaw.label,\n    programId: new PublicKey(configRaw.program),\n    groupPk: new PublicKey(configRaw.group),\n  };\n}\n\nfunction parseConfigs(configRaw: ConfigRaw): {\n  [label: string]: Project0Config;\n} {\n  return configRaw.reduce(\n    (config, current, _) => ({\n      [current.label]: parseConfig(current),\n      ...config,\n    }),\n    {} as {\n      [label: string]: Project0Config;\n    }\n  );\n}\n\nfunction loadDefaultConfig(): {\n  [label: string]: Project0Config;\n} {\n  assert(configs, ConfigRaw);\n  return parseConfigs(configs);\n}\n\n/**\n * Define marginfi-specific config per profile\n *\n * @internal\n */\nfunction getProject0Config(\n  environment: Environment,\n  overrides?: Partial<Omit<Project0Config, \"environment\">>\n): Project0Config {\n  const defaultConfigs = loadDefaultConfig();\n\n  const defaultConfig = defaultConfigs[environment];\n  return {\n    environment,\n    programId: overrides?.programId || defaultConfig.programId,\n    groupPk: overrides?.groupPk || defaultConfig.groupPk,\n  };\n}\n\n/**\n * Retrieve config per environment\n */\nexport function getConfig(\n  environment: Environment = \"production\",\n  overrides?: Partial<Omit<Project0Config, \"environment\">>\n): Project0Config {\n  return {\n    ...getProject0Config(environment, overrides),\n  };\n}\n","/**\n * Error codes for transaction building failures\n */\nexport enum TransactionBuildingErrorCode {\n  SWAP_SIZE_EXCEEDED_LOOP = \"SWAP_SIZE_EXCEEDED_LOOP\",\n  SWAP_SIZE_EXCEEDED_REPAY = \"SWAP_SIZE_EXCEEDED_REPAY\",\n  SWAP_SIZE_EXCEEDED_POSITION_SWAP = \"SWAP_SIZE_EXCEEDED_POSITION_SWAP\",\n  ORACLE_CRANK_FAILED = \"ORACLE_CRANK_FAILED\",\n  KAMINO_RESERVE_NOT_FOUND = \"KAMINO_RESERVE_NOT_FOUND\",\n  DRIFT_STATE_NOT_FOUND = \"DRIFT_STATE_NOT_FOUND\",\n  JUPLEND_STATE_NOT_FOUND = \"JUPLEND_STATE_NOT_FOUND\",\n  SWITCHBOARD_FEED_UPDATE_FAILED = \"SWITCHBOARD_FEED_UPDATE_FAILED\",\n  SWAP_QUOTE_FAILED = \"SWAP_QUOTE_FAILED\",\n  TRANSFER_POSITIONS_INVALID_SELECTION = \"TRANSFER_POSITIONS_INVALID_SELECTION\",\n  TRANSFER_POSITIONS_UNSUPPORTED_BANK = \"TRANSFER_POSITIONS_UNSUPPORTED_BANK\",\n  TRANSFER_POSITIONS_UNSPLITTABLE = \"TRANSFER_POSITIONS_UNSPLITTABLE\",\n  BRIDGE_CONFLICT = \"BRIDGE_CONFLICT\",\n}\n\n/**\n * Typed details for each error code\n */\nexport interface TransactionBuildingErrorDetails {\n  [TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_LOOP]: {\n    bytes: number;\n    accountKeys: number;\n    provider?: string;\n  };\n  [TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_REPAY]: {\n    bytes: number;\n    accountKeys: number;\n    provider?: string;\n  };\n  [TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_POSITION_SWAP]: {\n    bytes: number;\n    accountKeys: number;\n    provider?: string;\n  };\n  [TransactionBuildingErrorCode.ORACLE_CRANK_FAILED]: {\n    uncrankableLiabilities: Array<{\n      bankAddress: string;\n      mint: string;\n      symbol?: string;\n      reason: string;\n    }>;\n    uncrankableAssets: Array<{\n      bankAddress: string;\n      mint: string;\n      symbol?: string;\n      reason: string;\n    }>;\n  };\n  [TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND]: {\n    bankAddress: string;\n    bankMint: string;\n    bankSymbol?: string;\n  };\n  [TransactionBuildingErrorCode.DRIFT_STATE_NOT_FOUND]: {\n    bankAddress: string;\n    bankMint: string;\n    bankSymbol?: string;\n  };\n  [TransactionBuildingErrorCode.JUPLEND_STATE_NOT_FOUND]: {\n    bankAddress: string;\n    bankMint: string;\n    bankSymbol?: string;\n  };\n  [TransactionBuildingErrorCode.SWITCHBOARD_FEED_UPDATE_FAILED]: {\n    oracleKeys: string[];\n    reason: string;\n  };\n  [TransactionBuildingErrorCode.SWAP_QUOTE_FAILED]: {\n    provider: string;\n    inputMint: string;\n    outputMint: string;\n    reason: string;\n  };\n  [TransactionBuildingErrorCode.TRANSFER_POSITIONS_INVALID_SELECTION]: {\n    reason: string;\n    bankAddresses: string[];\n  };\n  [TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSUPPORTED_BANK]: {\n    bankAddress: string;\n    assetTag: number;\n    bankSymbol?: string;\n  };\n  [TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSPLITTABLE]: {\n    reason: string;\n    sizeBytes?: number;\n    accountCount?: number;\n  };\n  [TransactionBuildingErrorCode.BRIDGE_CONFLICT]: {\n    /** Bridge-token candidate banks blocked by an existing opposite-side account position. */\n    conflictingBanks: Array<{\n      bankAddress: string;\n      mint: string;\n      symbol?: string;\n    }>;\n    /** Whether the bridge token would have been held as collateral (\"deposit\") or debt (\"borrow\"). */\n    bridgeTokenSide: \"deposit\" | \"borrow\";\n  };\n}\n\n/**\n * Error thrown during transaction building in the SDK.\n * Does NOT contain user-facing messages - those are handled in the app layer.\n * Use factory methods to create instances.\n */\nexport class TransactionBuildingError<\n  T extends TransactionBuildingErrorCode = TransactionBuildingErrorCode,\n> extends Error {\n  readonly code: T;\n  readonly details: TransactionBuildingErrorDetails[T];\n\n  private constructor(code: T, message: string, details: TransactionBuildingErrorDetails[T]) {\n    super(message);\n    this.name = \"TransactionBuildingError\";\n    this.code = code;\n    this.details = details;\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, TransactionBuildingError);\n    }\n  }\n\n  static swapSizeExceededLoop(\n    bytes: number,\n    accountKeys: number,\n    provider?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_LOOP> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_LOOP,\n      `${provider ?? \"Swap\"} instruction size exceeds available transaction size`,\n      { bytes, accountKeys, provider }\n    );\n  }\n\n  static swapSizeExceededRepay(\n    bytes: number,\n    accountKeys: number,\n    provider?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_REPAY> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_REPAY,\n      `${provider ?? \"Swap\"} instruction size exceeds available transaction size`,\n      { bytes, accountKeys, provider }\n    );\n  }\n\n  static swapSizeExceededPositionSwap(\n    bytes: number,\n    accountKeys: number,\n    provider?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_POSITION_SWAP> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_POSITION_SWAP,\n      `${provider ?? \"Swap\"} instruction size exceeds available transaction size`,\n      { bytes, accountKeys, provider }\n    );\n  }\n\n  /**\n   * Failed to crank oracles for one or more banks\n   */\n  static oracleCrankFailed(\n    uncrankableLiabilities: Array<{\n      bankAddress: string;\n      mint: string;\n      symbol?: string;\n      reason: string;\n    }>,\n    uncrankableAssets: Array<{\n      bankAddress: string;\n      mint: string;\n      symbol?: string;\n      reason: string;\n    }>\n  ): TransactionBuildingError<TransactionBuildingErrorCode.ORACLE_CRANK_FAILED> {\n    const banksList = uncrankableLiabilities\n      .concat(uncrankableAssets)\n      .map((b) => b.symbol)\n      .join(\", \");\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.ORACLE_CRANK_FAILED,\n      `Failed to crank oracles for: ${banksList}`,\n      { uncrankableLiabilities, uncrankableAssets }\n    );\n  }\n\n  /**\n   * Failed to refresh reserves for a bank\n   */\n  static kaminoReserveNotFound(\n    bankAddress: string,\n    bankMint: string,\n    bankSymbol?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.KAMINO_RESERVE_NOT_FOUND,\n      `Kamino reserve not found for ${bankSymbol ?? bankMint}`,\n      { bankAddress, bankMint, bankSymbol }\n    );\n  }\n\n  /**\n   * Failed to find drift state for a bank\n   */\n  static driftStateNotFound(\n    bankAddress: string,\n    bankMint: string,\n    bankSymbol?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.DRIFT_STATE_NOT_FOUND> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.DRIFT_STATE_NOT_FOUND,\n      `Drift state not found for ${bankSymbol ?? bankMint}`,\n      { bankAddress, bankMint, bankSymbol }\n    );\n  }\n\n  /**\n   * Failed to find JupLend state for a bank\n   */\n  static jupLendStateNotFound(\n    bankAddress: string,\n    bankMint: string,\n    bankSymbol?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.JUPLEND_STATE_NOT_FOUND> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.JUPLEND_STATE_NOT_FOUND,\n      `JupLend state not found for ${bankSymbol ?? bankMint}`,\n      { bankAddress, bankMint, bankSymbol }\n    );\n  }\n\n  /**\n   * Failed to update Switchboard price feeds\n   */\n  static switchboardFeedUpdateFailed(\n    oracleKeys: string[],\n    reason: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.SWITCHBOARD_FEED_UPDATE_FAILED> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.SWITCHBOARD_FEED_UPDATE_FAILED,\n      `Switchboard feed update failed: ${reason}`,\n      { oracleKeys, reason }\n    );\n  }\n\n  /**\n   * Failed to get a swap quote from any provider\n   */\n  static swapQuoteFailed(\n    provider: string,\n    inputMint: string,\n    outputMint: string,\n    reason: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.SWAP_QUOTE_FAILED> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.SWAP_QUOTE_FAILED,\n      `${provider} swap quote failed for ${inputMint} → ${outputMint}: ${reason}`,\n      { provider, inputMint, outputMint, reason }\n    );\n  }\n\n  /**\n   * The requested set of positions to transfer is invalid (inactive bank on the source,\n   * destination overlap, capacity/slot conflict, group/authority mismatch, etc.).\n   */\n  static transferPositionsInvalidSelection(\n    reason: string,\n    bankAddresses: string[]\n  ): TransactionBuildingError<TransactionBuildingErrorCode.TRANSFER_POSITIONS_INVALID_SELECTION> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.TRANSFER_POSITIONS_INVALID_SELECTION,\n      `Invalid transfer-positions selection: ${reason}`,\n      { reason, bankAddresses }\n    );\n  }\n\n  /**\n   * A selected position lives in a bank whose asset tag is not supported by transfer-positions\n   * (v1 supports DEFAULT and STAKED only).\n   */\n  static transferPositionsUnsupportedBank(\n    bankAddress: string,\n    assetTag: number,\n    bankSymbol?: string\n  ): TransactionBuildingError<TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSUPPORTED_BANK> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSUPPORTED_BANK,\n      `Bank ${bankSymbol ?? bankAddress} (asset tag ${assetTag}) is not supported by transfer-positions`,\n      { bankAddress, assetTag, bankSymbol }\n    );\n  }\n\n  /**\n   * The built transfer transaction exceeds the v0 size / account-lock limits even at the position\n   * cap (most likely several integration positions whose reserve accounts overflow the 64-lock cap).\n   * Retry with fewer positions in the selection.\n   */\n  static transferPositionsUnsplittable(\n    reason: string,\n    sizeBytes?: number,\n    accountCount?: number\n  ): TransactionBuildingError<TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSPLITTABLE> {\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.TRANSFER_POSITIONS_UNSPLITTABLE,\n      `Transfer does not fit one transaction: ${reason}`,\n      { reason, sizeBytes, accountCount }\n    );\n  }\n\n  /**\n   * A bridged (double-hop) swap could not route because every bridge-token candidate bank\n   * conflicts with an existing opposite-side position on the account (marginfi forbids holding an\n   * asset and a liability on the same bank).\n   */\n  static bridgeConflict(\n    conflictingBanks: Array<{ bankAddress: string; mint: string; symbol?: string }>,\n    bridgeTokenSide: \"deposit\" | \"borrow\"\n  ): TransactionBuildingError<TransactionBuildingErrorCode.BRIDGE_CONFLICT> {\n    const banksList = conflictingBanks.map((c) => c.symbol ?? c.mint).join(\", \");\n    return new TransactionBuildingError(\n      TransactionBuildingErrorCode.BRIDGE_CONFLICT,\n      `Every bridge-token candidate conflicts with an existing opposite-side position: ${banksList}`,\n      { conflictingBanks, bridgeTokenSide }\n    );\n  }\n\n  /**\n   * Generic escape hatch for custom errors\n   */\n  static custom<T extends TransactionBuildingErrorCode>(\n    code: T,\n    message: string,\n    details: TransactionBuildingErrorDetails[T]\n  ): TransactionBuildingError<T> {\n    return new TransactionBuildingError(code, message, details);\n  }\n}\n\n/** Error codes that mean a single-route swap couldn't be built directly but can be decomposed. */\nconst DECOMPOSABLE_SWAP_ERROR_CODES = new Set<TransactionBuildingErrorCode>([\n  TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_LOOP,\n  TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_REPAY,\n  TransactionBuildingErrorCode.SWAP_SIZE_EXCEEDED_POSITION_SWAP,\n  TransactionBuildingErrorCode.SWAP_QUOTE_FAILED,\n]);\n\n/**\n * Whether a build failure is a *decomposable* swap failure — i.e. the single-route swap couldn't be\n * built (no route/quote, or the route doesn't fit the per-tx size/account limits), but the swap\n * could still succeed when split into two legs through a bridge token (a double-hop).\n *\n * This is the predicate a caller's catch→retry uses to decide whether to attempt a bridged swap\n * (see {@link composeBridgedSwap}). Size overflows surface as `SWAP_SIZE_EXCEEDED_*` and no-route /\n * unquotable failures as `SWAP_QUOTE_FAILED`; the swap engine also classifies an oversized route\n * (which would otherwise throw a raw serialization `RangeError`) as `SWAP_SIZE_EXCEEDED_LOOP`.\n */\nexport function isDecomposableSwapError(e: unknown): e is TransactionBuildingError {\n  return e instanceof TransactionBuildingError && DECOMPOSABLE_SWAP_ERROR_CODES.has(e.code);\n}\n\n/**\n * Whether a build failure is a bridged-swap conflict: the direct build failed AND every\n * bridge-token candidate was blocked by an existing opposite-side position on the account.\n * Narrows to the typed details (`conflictingBanks`, `bridgeTokenSide`) so callers can surface a\n * \"close that position or pick a different pair\" message.\n */\nexport function isBridgeConflictError(\n  e: unknown\n): e is TransactionBuildingError<TransactionBuildingErrorCode.BRIDGE_CONFLICT> {\n  return (\n    e instanceof TransactionBuildingError && e.code === TransactionBuildingErrorCode.BRIDGE_CONFLICT\n  );\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED = Buffer.from(\"liquidity_vault_auth\");\nexport const PDA_BANK_INSURANCE_VAULT_AUTH_SEED = Buffer.from(\"insurance_vault_auth\");\nexport const PDA_BANK_FEE_VAULT_AUTH_SEED = Buffer.from(\"fee_vault_auth\");\n\nexport const PDA_BANK_LIQUIDITY_VAULT_SEED = Buffer.from(\"liquidity_vault\");\nexport const PDA_BANK_INSURANCE_VAULT_SEED = Buffer.from(\"insurance_vault\");\nexport const PDA_BANK_FEE_VAULT_SEED = Buffer.from(\"fee_vault\");\nexport const PDA_BANK_FEE_STATE_SEED = Buffer.from(\"feestate\");\nexport const PDA_BANK_EMISSIONS_AUTH_SEED = Buffer.from(\"emissions_auth_seed\");\nexport const PDA_BANK_EMISSIONS_VAULT_SEED = Buffer.from(\"emissions_vault\");\n\nexport const PDA_MARGINFI_ACCOUNT_SEED = Buffer.from(\"marginfi_account\");\n\n/**\n * Derives the liquidity vault authority PDA for a bank\n * Seeds: [\"liquidity_vault_auth\", bank]\n */\nexport function deriveBankLiquidityVaultAuthority(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the liquidity vault PDA for a bank\n * Seeds: [\"liquidity_vault\", bank]\n */\nexport function deriveBankLiquidityVault(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_LIQUIDITY_VAULT_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the insurance vault authority PDA for a bank\n * Seeds: [\"insurance_vault_auth\", bank]\n */\nexport function deriveBankInsuranceVaultAuthority(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_INSURANCE_VAULT_AUTH_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the insurance vault PDA for a bank\n * Seeds: [\"insurance_vault\", bank]\n */\nexport function deriveBankInsuranceVault(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_INSURANCE_VAULT_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the fee vault authority PDA for a bank\n * Seeds: [\"fee_vault_auth\", bank]\n */\nexport function deriveBankFeeVaultAuthority(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_FEE_VAULT_AUTH_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the fee vault PDA for a bank\n * Seeds: [\"fee_vault\", bank]\n */\nexport function deriveBankFeeVault(programId: PublicKey, bank: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([PDA_BANK_FEE_VAULT_SEED, bank.toBuffer()], programId);\n}\n\n/**\n * Derives the fee state PDA\n * Seeds: [\"feestate\"]\n */\nexport function deriveFeeState(programId: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([PDA_BANK_FEE_STATE_SEED], programId);\n}\n\n/**\n * Derives the emissions auth PDA for a bank\n * Seeds: [\"emissions_auth_seed\", bank]\n */\nexport function deriveBankEmissionsAuth(\n  programId: PublicKey,\n  bank: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_EMISSIONS_AUTH_SEED, bank.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the emissions vault PDA for a bank and emissions mint\n * Seeds: [\"emissions_vault\", bank, emissionsMint]\n */\nexport function deriveBankEmissionsVault(\n  programId: PublicKey,\n  bank: PublicKey,\n  emissionsMint: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [PDA_BANK_EMISSIONS_VAULT_SEED, bank.toBuffer(), emissionsMint.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derives the marginfi account PDA\n * Seeds: [\"marginfi_account\", group, authority, accountIndex, thirdPartyId]\n */\nexport function deriveMarginfiAccount(\n  programId: PublicKey,\n  group: PublicKey,\n  authority: PublicKey,\n  accountIndex: number,\n  thirdPartyId: number = 0\n): [PublicKey, number] {\n  const accountIndexBuf = Buffer.alloc(2);\n  accountIndexBuf.writeUInt16LE(accountIndex);\n\n  const thirdPartyIdBuf = Buffer.alloc(2);\n  thirdPartyIdBuf.writeUInt16LE(thirdPartyId);\n\n  return PublicKey.findProgramAddressSync(\n    [\n      PDA_MARGINFI_ACCOUNT_SEED,\n      group.toBuffer(),\n      authority.toBuffer(),\n      accountIndexBuf,\n      thirdPartyIdBuf,\n    ],\n    programId\n  );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport const PYTH_PUSH_ORACLE_ID = new PublicKey(\"pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT\");\nexport const PYTH_SPONSORED_SHARD_ID = 0;\nexport const MARGINFI_SPONSORED_SHARD_ID = 3301;\n\nexport const DEFAULT_ORACLE_MAX_AGE = 60; // seconds\n\nexport const ZERO_ORACLE_KEY = \"DMhGWtLAKE5d56WdyHQxqeFncwUeqMEnuC2RvvZfbuur\";\n\nexport const PYTH_PRICE_CONF_INTERVALS = new BigNumber(2.12);\nexport const SWB_PRICE_CONF_INTERVALS = new BigNumber(1.96);\nexport const MAX_CONFIDENCE_INTERVAL_RATIO = new BigNumber(0.05);\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const DISABLED_FLAG: number = 1 << 0;\nexport const FLASHLOAN_ENABLED_FLAG: number = 1 << 2;\nexport const TRANSFER_ACCOUNT_AUTHORITY_FLAG: number = 1 << 3;\n\n// Bank flags (0.1.9 SVSP transition)\n/** Bank flags bit 9: staked oracle pricing is temporarily disabled */\nexport const STAKED_ORACLE_DISABLED_FLAG: number = 1 << 9;\n/** Bank flags bit 10: staked oracle pricing includes the SPL single-pool on-ramp in NAV */\nexport const STAKED_ORACLE_USES_ONRAMP_FLAG: number = 1 << 10;\n\n// Program keys\nexport const MARGINFI_PROGRAM = new PublicKey(\"MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA\");\nexport const MARGINFI_PROGRAM_STAGING = new PublicKey(\n  \"stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct\"\n);\nexport const MARGINFI_PROGRAM_STAGING_ALT = new PublicKey(\n  \"5UDghkpgW1HfYSrmEj2iAApHShqU44H6PKTAar9LL9bY\"\n);\n","import { PublicKey } from \"@solana/web3.js\";\n\n/**\n * General LUT set per group: covers all banks except native-stake/isolated/reduce-only.\n * Used for any transaction that touches a non-(STAKED|SOL) bank.\n */\nexport const ADDRESS_LOOKUP_TABLE_FOR_GROUP: { [key: string]: PublicKey[] } = {\n  \"4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8\": [\n    new PublicKey(\"8dk6oxKXC4iMLMa8Q4AVtPJPkEfitZuHSB4JqUsLLV2R\"),\n    new PublicKey(\"43xneYSZYLFkaksMcfBMJANibRiKsWgxkPbsrmcYjqF6\"),\n    new PublicKey(\"67cS6yqmAy5D1QRJwAXcFv9GLvrMbe88GFGDJcntkL7C\"),\n  ], // Main pool — general group\n  FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo: [\n    new PublicKey(\"9p1CwvXMYNEY9CqSwuWySVXsG37NGb36nua94ea5KsiQ\"),\n  ], // staging\n  Diu1q9gniR1qR4Daaej3rcHd6949HMmxLGsnQ94Z3rLz: [\n    new PublicKey(\"5ggm1hB8yPF5dKWJ3W7n1txztDrU4zf2RQk3TLrFvvRn\"),\n  ], // staging\n};\n\n/**\n * Native-stake LUT set per group: native-stake banks + the canonical wSOL bank.\n * Used for transactions that only touch STAKED/SOL banks (native-stake accounts can\n * only supply native-stake positions and borrow SOL). Groups without an entry fall\n * back to the general set.\n */\nexport const ADDRESS_LOOKUP_TABLE_FOR_GROUP_NATIVE_STAKE: {\n  [key: string]: PublicKey[];\n} = {\n  \"4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8\": [\n    new PublicKey(\"FhVyrX2gfHmxKHq8wWWBJB3ZvHZcAQ6UAcjWxUyfyXuE\"),\n    new PublicKey(\"GYEJ3BcgwHfNSL2BAuDcth3KKKt9eiK14EHwLCjU9Eoo\"),\n  ], // Main pool — native-stake group\n};\n\nexport const ADDRESS_LOOKUP_TABLE_FOR_SWAP = new PublicKey(\n  \"5X5gDr8Bp9BpizTeZ3VJhxMw4z3q2rwoexJvwttmATs5\"\n);\n\nexport const JUP_SWAP_LUT_PROGRAM_AUTHORITY_INDEX = 5;\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const JUPITER_V6_PROGRAM: PublicKey = new PublicKey(\n  \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\"\n);\nexport const SINGLE_POOL_PROGRAM_ID: PublicKey = new PublicKey(\n  \"SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE\"\n);\nexport const STAKE_PROGRAM_ID: PublicKey = new PublicKey(\n  \"Stake11111111111111111111111111111111111111\"\n);\nexport const MPL_METADATA_PROGRAM_ID: PublicKey = new PublicKey(\n  \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n);\nexport const SYSTEM_PROGRAM_ID: PublicKey = new PublicKey(\"11111111111111111111111111111111\");\nexport const SYSVAR_RENT_ID: PublicKey = new PublicKey(\n  \"SysvarRent111111111111111111111111111111111\"\n);\nexport const SYSVAR_CLOCK_ID: PublicKey = new PublicKey(\n  \"SysvarC1ock11111111111111111111111111111111\"\n);\nexport const SYSVAR_STAKE_HISTORY_ID: PublicKey = new PublicKey(\n  \"SysvarStakeHistory1111111111111111111111111\"\n);\nexport const STAKE_CONFIG_ID: PublicKey = new PublicKey(\n  \"StakeConfig11111111111111111111111111111111\"\n);\n","export const HOURS_PER_YEAR = 365.25 * 24;\n\nexport const MAX_U64 = BigInt(\"18446744073709551615\").toString();\n","export const MAX_TX_SIZE: number = 1232;\nexport const MAX_ACCOUNT_LOCKS = 64;\nexport const BUNDLE_TX_SIZE: number = 81;\nexport const PRIORITY_TX_SIZE: number = 44;\n","import { PublicKey } from \"@solana/web3.js\";\n\n// token mints\nexport const WSOL_MINT = new PublicKey(\"So11111111111111111111111111111111111111112\");\nexport const LST_MINT = new PublicKey(\"LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp\");\nexport const USDC_MINT = new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\");\nexport const USDT_MINT = new PublicKey(\"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\");\n\nexport const USDC_DECIMALS = 6;\n","import { HOURS_PER_YEAR } from \"../constants\";\n\n// ================ interest rate helpers ================\n\n/**\n * Formula source: http://www.linked8.com/blog/158-apy-to-apr-and-apr-to-apy-calculation-methodologies\n *\n * @param apy {Number} APY (i.e. 0.06 for 6%)\n * @param compoundingFrequency {Number} Compounding frequency (times a year)\n * @returns {Number} APR (i.e. 0.0582 for APY of 0.06)\n */\nconst apyToApr = (apy: number, compoundingFrequency: number = HOURS_PER_YEAR): number =>\n  ((1 + apy) ** (1 / compoundingFrequency) - 1) * compoundingFrequency;\n\n/**\n * Formula source: http://www.linked8.com/blog/158-apy-to-apr-and-apr-to-apy-calculation-methodologies\n *\n *\n * @param apr {Number} APR (i.e. 0.0582 for 5.82%)\n * @param compoundingFrequency {Number} Compounding frequency (times a year)\n * @returns {Number} APY (i.e. 0.06 for APR of 0.0582)\n */\nconst aprToApy = (apr: number, compoundingFrequency: number = HOURS_PER_YEAR, apyCap: number = 3): number =>\n  Math.min((1 + apr / compoundingFrequency) ** compoundingFrequency - 1, apyCap);\n\nfunction calculateInterestFromApy(principal: number, durationInYears: number, apy: number): number {\n  return principal * apy * durationInYears;\n}\n\nfunction calculateApyFromInterest(principal: number, durationInYears: number, interest: number): number {\n  return interest / (principal * durationInYears);\n}\n\nexport { apyToApr, aprToApy, calculateInterestFromApy, calculateApyFromInterest };\n","import { Address } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\nimport { Decimal } from \"decimal.js\";\n\nimport { Amount, WrappedI80F48 } from \"../types\";\n\nconst I80F48_FRACTIONAL_BYTES = 6;\nconst I80F48_TOTAL_BYTES = 16;\nconst I80F48_DIVISOR = new Decimal(2).pow(8 * I80F48_FRACTIONAL_BYTES);\n\nexport function wrappedI80F48toBigNumber(wrapped: WrappedI80F48): BigNumber {\n  const bytesLE = wrapped.value;\n  if (bytesLE.length !== I80F48_TOTAL_BYTES) {\n    throw new Error(`Expected a ${I80F48_TOTAL_BYTES}-byte buffer`);\n  }\n\n  let bytesBE = bytesLE.slice();\n  bytesBE.reverse();\n\n  let signChar = \"\";\n  const msb = bytesBE[0];\n  if (msb & 0x80) {\n    signChar = \"-\";\n    bytesBE = bytesBE.map((v) => ~v & 0xff);\n  }\n\n  const hex = signChar + \"0x\" + bytesBE.map((v) => v.toString(16).padStart(2, \"0\")).join(\"\");\n  const decoded = new Decimal(hex).dividedBy(I80F48_DIVISOR);\n\n  return new BigNumber(decoded.toString());\n}\n\nexport function bigNumberToWrappedI80F48(value: Amount): WrappedI80F48 {\n  let decimalValue = new Decimal(value.toString());\n  const isNegative = decimalValue.isNegative();\n\n  decimalValue = decimalValue.times(I80F48_DIVISOR);\n  let wrappedValue = new BN(decimalValue.round().toFixed()).toArray();\n\n  if (wrappedValue.length < I80F48_TOTAL_BYTES) {\n    const padding = Array(I80F48_TOTAL_BYTES - wrappedValue.length).fill(0);\n    wrappedValue.unshift(...padding);\n  }\n\n  if (isNegative) {\n    wrappedValue[wrappedValue.length - 1] |= 0x80;\n    wrappedValue = wrappedValue.map((v) => ~v & 0xff);\n  }\n\n  wrappedValue.reverse();\n\n  return { value: wrappedValue };\n}\n\n/**\n * Converts a ui representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function toNumber(amount: Amount): number {\n  let amt: number;\n  if (typeof amount === \"number\") {\n    amt = amount;\n  } else if (typeof amount === \"string\") {\n    amt = Number(amount);\n  } else {\n    amt = amount.toNumber();\n  }\n  return amt;\n}\n\n/**\n * Converts a ui representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function toBigNumber(amount: Amount | BN): BigNumber {\n  let amt: BigNumber;\n  if (amount instanceof BigNumber) {\n    amt = amount;\n  } else {\n    amt = new BigNumber(amount.toString());\n  }\n  return amt;\n}\n\n/**\n * Converts a UI representation of a token amount into its native value as `BN`, given the specified mint decimal amount (default to 6 for USDC).\n */\nexport function uiToNative(amount: Amount, decimals: number): BN {\n  const amt = toBigNumber(amount);\n  return new BN(amt.times(10 ** decimals).toFixed(0, BigNumber.ROUND_FLOOR));\n}\n\nexport function uiToNativeBigNumber(amount: Amount, decimals: number): BigNumber {\n  const amt = toBigNumber(amount);\n  return amt.times(10 ** decimals);\n}\n\n/**\n * Converts a native representation of a token amount into its UI value as `number`, given the specified mint decimal amount.\n */\nexport function nativeToUi(amount: Amount | BN, decimals: number): number {\n  const amt = toBigNumber(amount);\n  return amt.div(10 ** decimals).toNumber();\n}\n\n// shorten the checksummed version of the input address to have 4 characters at start and end\nexport function shortenAddress(pubkey: Address, chars = 4): string {\n  const pubkeyStr = pubkey.toString();\n  return `${pubkeyStr.slice(0, chars)}...${pubkeyStr.slice(-chars)}`;\n}\n\n/**\n * Converts basis points (bps) to a decimal percentage value.\n */\nexport function bpsToPercentile(bps: number): number {\n  return bps / 10000;\n}\n\n/**\n * Prepares transaction remaining accounts by processing bank-oracle groups:\n * 1. Sorts groups in descending order by bank public key (pushes inactive accounts to end)\n * 2. Flattens the structure into a single public key array\n *\n * Stable on most JS implementations (this shouldn't matter since we do not generally have duplicate\n * banks), in place, and uses the raw 32-byte value to sort in byte-wise lexicographical order (like\n * Rust's b.key.cmp(&a.key))\n *\n * @param banksAndOracles - Array where each element is a bank-oracle group: [bankPubkey,\n *                          oracle1Pubkey, oracle2Pubkey?, ...] Note: SystemProgram keys (111..111)\n *                          represent inactive accounts\n * @returns Flattened array of public keys with inactive accounts at the end, ready for transaction\n *          composition\n */\nexport const composeRemainingAccounts = (banksAndOracles: PublicKey[][]): PublicKey[] => {\n  banksAndOracles.sort((a, b) => {\n    const A = a[0].toBytes();\n    const B = b[0].toBytes();\n    // find the first differing byte\n    for (let i = 0; i < 32; i++) {\n      if (A[i] !== B[i]) {\n        // descending: bigger byte should come first\n        return B[i] - A[i];\n      }\n    }\n    return 0; // identical keys\n  });\n\n  // flatten out [bank, oracle…, oracle…] → [bank, oracle…, bank, oracle…, …]\n  return banksAndOracles.flat();\n};\n","import {\n  TransactionError,\n  PublicKey,\n  RpcResponseAndContext,\n  VersionedTransaction,\n  SolanaJSONRPCError,\n  Transaction,\n} from \"@solana/web3.js\";\n\nclass BundleSimulationError extends Error {\n  constructor(\n    message: string,\n    public readonly logs?: string[],\n    public readonly cause?: unknown\n  ) {\n    super(message);\n    this.name = \"BundleSimulationError\";\n  }\n\n  static fromHttpError(\n    status: number,\n    statusText: string\n  ): BundleSimulationError {\n    return new BundleSimulationError(`HTTP error ${status}: ${statusText}`);\n  }\n\n  static fromEncodingError(\n    error: unknown,\n    index?: number\n  ): BundleSimulationError {\n    return new BundleSimulationError(\n      `Failed to encode transaction${index !== undefined ? ` at index ${index}` : \"s\"}`\n    );\n  }\n}\n\ntype JsonRpcResponse<T> =\n  | {\n      id: number;\n      jsonrpc: string;\n      result: RpcResponseAndContext<T>;\n    }\n  | {\n      id: number;\n      jsonrpc: string;\n      error: SolanaJSONRPCError;\n    };\n\ninterface RpcSimulateBundleResult {\n  summary:\n    | \"succeeded\"\n    | {\n        failed: {\n          error: any;\n          txSignature?: string;\n        };\n      };\n  transactionResults: RpcSimulateBundleTransactionResult[];\n}\n\ninterface RpcSimulateBundleTransactionResult {\n  err?: TransactionError;\n  logs: string[];\n  preExecutionAccounts?: any; //UiAccount[],\n  postExecutionAccounts?: any; //UiAccount[],\n  unitsConsumed?: string;\n  returnData?: any; //UiTransactionReturnData,\n}\n\ninterface RpcSimulateBundleConfig {\n  preExecutionAccountsConfigs: (\n    | RpcSimulateTransactionAccountsConfig\n    | undefined\n  )[];\n  postExecutionAccountsConfigs: (\n    | RpcSimulateTransactionAccountsConfig\n    | undefined\n  )[];\n  transactionEncoding?: any;\n  simulationBank?: SimulationSlotConfig;\n  skipSigVerify?: boolean;\n  replaceRecentBlockhash?: boolean;\n}\n\ninterface RpcSimulateTransactionAccountsConfig {\n  encoding?: any; // UiAccountEncoding,\n  addresses: string[];\n}\n\ntype SimulationSlotConfig = \"confirmed\" | \"processed\" | number;\n\nexport async function simulateBundle(\n  rpcEndpoint: string,\n  transactions: (VersionedTransaction | Transaction)[],\n  includeAccounts?: Array<PublicKey>\n): Promise<RpcSimulateBundleTransactionResult[]> {\n  // Validate input\n  if (!transactions.length) {\n    throw new BundleSimulationError(\"No bundle provided for simulation\");\n  }\n\n  try {\n    // Prepare transaction data\n    const encodedTransactions = encodeTransactions(transactions);\n    const config = createBundleConfig(transactions, includeAccounts);\n\n    // Execute simulation\n    const result = await executeBundleSimulation(\n      rpcEndpoint,\n      encodedTransactions,\n      config\n    );\n\n    return result;\n  } catch (error) {\n    // If it's already a SolanaJSONRPCError or BundleSimulationError, rethrow it\n    if (\n      error instanceof SolanaJSONRPCError ||\n      error instanceof BundleSimulationError\n    ) {\n      throw error;\n    } else {\n      throw new BundleSimulationError(\n        \"Failed to execute bundle simulation\",\n        undefined,\n        error\n      );\n    }\n  }\n}\n\nfunction encodeTransactions(\n  transactions: (VersionedTransaction | Transaction)[]\n): string[] {\n  try {\n    return transactions.map((tx, index) => {\n      try {\n        const serialized = tx.serialize();\n        return Buffer.from(serialized).toString(\"base64\");\n      } catch (error) {\n        throw BundleSimulationError.fromEncodingError(error, index);\n      }\n    });\n  } catch (error) {\n    if (error instanceof BundleSimulationError) throw error;\n    throw BundleSimulationError.fromEncodingError(error);\n  }\n}\n\nfunction createBundleConfig(\n  transactions: (VersionedTransaction | Transaction)[],\n  includeAccounts?: Array<PublicKey>\n): RpcSimulateBundleConfig {\n  return {\n    skipSigVerify: true,\n    replaceRecentBlockhash: true,\n    preExecutionAccountsConfigs: transactions.map(() => ({ addresses: [] })),\n    postExecutionAccountsConfigs: transactions.map((_, index) => ({\n      addresses:\n        index === transactions.length - 1 && includeAccounts\n          ? includeAccounts.map((account) => account.toBase58())\n          : [],\n    })),\n  };\n}\n\nasync function executeBundleSimulation(\n  rpcEndpoint: string,\n  encodedTransactions: string[],\n  config: RpcSimulateBundleConfig\n): Promise<RpcSimulateBundleTransactionResult[]> {\n  const response = await fetch(rpcEndpoint, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      jsonrpc: \"2.0\",\n      id: 1,\n      method: \"simulateBundle\",\n      params: [{ encodedTransactions }, config],\n    }),\n  });\n\n  if (!response.ok) {\n    throw BundleSimulationError.fromHttpError(\n      response.status,\n      response.statusText\n    );\n  }\n\n  const jsonResponse =\n    (await response.json()) as JsonRpcResponse<RpcSimulateBundleResult>;\n\n  if (\"error\" in jsonResponse) {\n    throw jsonResponse.error;\n  }\n\n  const value = jsonResponse.result.value;\n\n  if (value.summary !== \"succeeded\") {\n    const logs = value.transactionResults.flatMap((tx) => tx.logs);\n\n    throw new BundleSimulationError(\n      JSON.stringify(value.summary.failed.error),\n      logs\n    );\n  }\n\n  return value.transactionResults;\n}\n","import {\n  PublicKey,\n  TransactionInstruction,\n  SystemProgram,\n  LAMPORTS_PER_SOL,\n  ComputeBudgetProgram,\n} from \"@solana/web3.js\";\n\n/**\n * Creates a compute budget instruction to set the priority fee for a transaction.\n * The priority fee is specified in micro-lamports per compute unit.\n *\n * @param priorityFeeMicro - Priority fee in micro-lamports per compute unit. If not provided, defaults to 1.\n * @returns A compute budget instruction with the specified priority fee\n */\nexport function makePriorityFeeMicroIx(priorityFeeMicro?: number): TransactionInstruction {\n  return ComputeBudgetProgram.setComputeUnitPrice({\n    microLamports: Math.floor(priorityFeeMicro ?? 1),\n  });\n}\n\n/*\n  deprecated use makePriorityFeeMicroIx instead\n*/\nexport function makePriorityFeeIx(\n  priorityFeeUi?: number,\n  computeUnitsLimit?: number\n): TransactionInstruction[] {\n  const priorityFeeIx: TransactionInstruction[] = [];\n  const limit = computeUnitsLimit ?? 1_400_000;\n\n  let microLamports: number = 1;\n\n  if (priorityFeeUi) {\n    // if priority fee is above 0.2 SOL discard it for safety reasons\n    const isAbsurdPriorityFee = priorityFeeUi > 0.1;\n\n    if (!isAbsurdPriorityFee) {\n      const priorityFeeMicroLamports = priorityFeeUi * LAMPORTS_PER_SOL * 1_000_000;\n      microLamports = Math.round(priorityFeeMicroLamports / limit);\n    }\n  }\n\n  priorityFeeIx.push(\n    ComputeBudgetProgram.setComputeUnitPrice({\n      microLamports,\n    })\n  );\n\n  return priorityFeeIx;\n}\n\n/**\n * @deprecated This method is deprecated.\n * Creates transaction priority instructions for different broadcast types.\n */\nexport function makeTxPriorityIx(\n  feePayer: PublicKey,\n  feeUi: number = 0,\n  broadcastType: \"BUNDLE\" | \"RPC\" | \"DYNAMIC\"\n) {\n  let bundleTipIx: TransactionInstruction | undefined = undefined;\n  let priorityFeeIx: TransactionInstruction = makePriorityFeeMicroIx();\n\n  if (broadcastType === \"BUNDLE\") {\n    bundleTipIx = makeBundleTipIx(feePayer, Math.trunc(feeUi * LAMPORTS_PER_SOL));\n  } else {\n    priorityFeeIx = makePriorityFeeMicroIx(feeUi);\n  }\n\n  return {\n    bundleTipIx,\n    priorityFeeIx,\n  };\n}\n\n/**\n * Creates a bundle tip instruction for Jito bundles.\n */\nexport function makeBundleTipIx(\n  feePayer: PublicKey,\n  bundleTip: number = 100_000\n): TransactionInstruction {\n  const tipAccounts = [\n    \"96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5\",\n    \"HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe\",\n    \"Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY\",\n    \"ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49\",\n    \"DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh\",\n    \"ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt\",\n    \"DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL\",\n    \"3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT\",\n  ];\n\n  const tipAccount = tipAccounts[Math.floor(Math.random() * tipAccounts.length)];\n\n  const bundleTipInstruction = SystemProgram.transfer({\n    fromPubkey: feePayer,\n    toPubkey: new PublicKey(tipAccount),\n    lamports: bundleTip,\n  });\n\n  return bundleTipInstruction;\n}\n","import { BorshInstructionCoder, Idl, Instruction } from \"@coral-xyz/anchor\";\nimport {\n  VersionedTransaction,\n  AddressLookupTableAccount,\n  TransactionMessage,\n} from \"@solana/web3.js\";\n\n/**\n * Decodes a Solana transaction instruction using the provided Interface Definition Language (IDL).\n * This function utilizes the BorshInstructionCoder to interpret the encoded instruction data.\n *\n * @param idl - The Interface Definition Language object that defines the structure of the instruction.\n * @param encoded - The Buffer containing the encoded instruction data.\n * @returns The decoded instruction object.\n */\nexport function decodeInstruction(idl: Idl, encoded: Buffer): Instruction | null {\n  const coder = new BorshInstructionCoder(idl);\n  return coder.decode(encoded, \"base58\");\n}\n\n/**\n * Decompiles a VersionedTransaction into a TransactionMessage.\n *\n * @param tx - The VersionedTransaction to be decompiled.\n * @param lookupTableAccounts - An array of AddressLookupTableAccount used for decompiling the transaction message.\n * @returns A TransactionMessage object representing the decompiled transaction.\n */\nexport function decompileV0Transaction(\n  tx: VersionedTransaction,\n  lookupTableAccounts: AddressLookupTableAccount[]\n) {\n  return TransactionMessage.decompile(tx.message, {\n    addressLookupTableAccounts: lookupTableAccounts,\n  });\n}\n","import {\n  AddressLookupTableAccount,\n  Transaction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { isV0Tx } from \"./tx-formatting\";\n\n/**\n * Calculates the size of a Solana transaction in bytes.\n * This function considers the number of required signatures and other transaction components.\n *\n * @param tx - The transaction object, which can be either a VersionedTransaction or a Transaction.\n * @returns The size of the transaction in bytes.\n */\nexport function getTxSize(tx: VersionedTransaction | Transaction): number {\n  const isVersioned = isV0Tx(tx);\n  const numSigners = tx.signatures.length;\n  const numRequiredSignatures = isVersioned ? tx.message.header.numRequiredSignatures : 0;\n  const feePayerSize = isVersioned || tx.feePayer ? 0 : 32;\n  const signaturesSize = (numRequiredSignatures - numSigners) * 64 + 1;\n\n  try {\n    const baseTxSize = isVersioned\n      ? tx.serialize().length\n      : tx.serialize({ requireAllSignatures: false, verifySignatures: false }).length;\n    const totalSize = baseTxSize + feePayerSize + signaturesSize;\n    if (isVersioned && totalSize > 1232) {\n      const { header, staticAccountKeys, addressTableLookups } = tx.message;\n      const lutWritable = addressTableLookups.reduce((s, l) => s + l.writableIndexes.length, 0);\n      const lutReadonly = addressTableLookups.reduce((s, l) => s + l.readonlyIndexes.length, 0);\n      console.warn(\"[getTxSize] oversized TX\", {\n        totalSize,\n        overshoot: totalSize - 1232,\n        staticKeys: staticAccountKeys.length,\n        numSignatures: header.numRequiredSignatures,\n        numLuts: addressTableLookups.length,\n        lutWritable,\n        lutReadonly,\n        totalAccounts: staticAccountKeys.length + lutWritable + lutReadonly,\n      });\n    }\n    return totalSize;\n  } catch (err) {\n    // tx is overflowing — log metadata for debugging\n    if (isVersioned) {\n      const { header, staticAccountKeys, addressTableLookups } = tx.message;\n      const lutWritable = addressTableLookups.reduce((s, l) => s + l.writableIndexes.length, 0);\n      const lutReadonly = addressTableLookups.reduce((s, l) => s + l.readonlyIndexes.length, 0);\n      console.warn(\"[getTxSize] serialize failed\", {\n        error: (err as Error).message,\n        staticKeys: staticAccountKeys.length,\n        numSignatures: header.numRequiredSignatures,\n        numLuts: addressTableLookups.length,\n        lutWritable,\n        lutReadonly,\n        totalAccounts: staticAccountKeys.length + lutWritable + lutReadonly,\n      });\n    } else {\n      console.warn(\"[getTxSize] serialize failed\", { error: (err as Error).message });\n    }\n    return 9999;\n  }\n}\n\nexport function getAccountKeys(\n  tx: VersionedTransaction | Transaction,\n  lookupTableAccounts: AddressLookupTableAccount[]\n): number {\n  const isVersioned = isV0Tx(tx);\n\n  try {\n    if (isVersioned) {\n      const message = TransactionMessage.decompile(tx.message, {\n        addressLookupTableAccounts: lookupTableAccounts,\n      });\n      return message.compileToLegacyMessage().getAccountKeys().length;\n    } else {\n      return tx.compileMessage().getAccountKeys().length;\n    }\n  } catch (err) {\n    console.warn(\"[getAccountKeys] decompile failed\", { error: (err as Error).message });\n    return 9999;\n  }\n}\n\nexport function getWritableAccountKeys(tx: VersionedTransaction | Transaction): number {\n  const isVersioned = isV0Tx(tx);\n\n  try {\n    if (isVersioned) {\n      const { header, staticAccountKeys, addressTableLookups } = tx.message;\n      const writableStatic =\n        staticAccountKeys.length -\n        header.numReadonlySignedAccounts -\n        header.numReadonlyUnsignedAccounts;\n      const writableLut = addressTableLookups.reduce(\n        (sum, lookup) => sum + lookup.writableIndexes.length,\n        0\n      );\n      return writableStatic + writableLut;\n    } else {\n      // Legacy: count non-readonly keys from compiled message\n      const message = tx.compileMessage();\n      const { numRequiredSignatures, numReadonlySignedAccounts, numReadonlyUnsignedAccounts } =\n        message.header;\n      const totalKeys = message.accountKeys.length;\n      const writableSigned = numRequiredSignatures - numReadonlySignedAccounts;\n      const writableUnsigned = totalKeys - numRequiredSignatures - numReadonlyUnsignedAccounts;\n      return writableSigned + writableUnsigned;\n    }\n  } catch {\n    return 9999;\n  }\n}\n\nexport function getTotalAccountKeys(tx: VersionedTransaction | Transaction): number {\n  const isVersioned = isV0Tx(tx);\n\n  try {\n    if (isVersioned) {\n      const { staticAccountKeys, addressTableLookups } = tx.message;\n      const lutAccounts = addressTableLookups.reduce(\n        (sum, lookup) => sum + lookup.writableIndexes.length + lookup.readonlyIndexes.length,\n        0\n      );\n      return staticAccountKeys.length + lutAccounts;\n    } else {\n      return tx.compileMessage().accountKeys.length;\n    }\n  } catch {\n    return 9999;\n  }\n}\n","{\n  \"address\": \"MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA\",\n  \"metadata\": {\n    \"name\": \"marginfi\",\n    \"version\": \"0.1.11\",\n    \"spec\": \"0.1.0\",\n    \"description\": \"Borrow Lending Prime Broker\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"admin_close_account\",\n      \"docs\": [\n        \"(permissionless) Close an account that is empty, inactive for >60 days, and has no\",\n        \"blocking state flags. Rent is returned to the group's global fee wallet.\"\n      ],\n      \"discriminator\": [\n        131,\n        60,\n        75,\n        215,\n        109,\n        34,\n        157,\n        26\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"config_group_fee\",\n      \"docs\": [\n        \"(global fee admin only) Enable or disable program fees for any group. Does not require the\",\n        \"group admin to sign: the global fee state admin can turn program fees on or off for any\",\n        \"group\"\n      ],\n      \"discriminator\": [\n        231,\n        205,\n        66,\n        242,\n        220,\n        87,\n        145,\n        38\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"global_fee_admin\",\n          \"docs\": [\n            \"`global_fee_admin` of the FeeState\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"enable_program_fee\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"configure_bank_rate_limits\",\n      \"docs\": [\n        \"(admin or delegate_limit_admin) Configure bank-level rate limits for withdraw/borrow.\",\n        \"Rate limits track net outflow in native tokens. Deposits offset withdraws.\",\n        \"Set to 0 to disable. Hourly and daily windows are independent.\"\n      ],\n      \"discriminator\": [\n        175,\n        84,\n        85,\n        221,\n        206,\n        220,\n        110,\n        174\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"hourly_max_outflow\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"daily_max_outflow\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"configure_deleverage_withdrawal_limit\",\n      \"docs\": [\n        \"(admin or delegate_limit_admin) Set the daily withdrawal limit for deleverages per group.\"\n      ],\n      \"discriminator\": [\n        28,\n        132,\n        205,\n        158,\n        67,\n        77,\n        177,\n        63\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"limit\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"configure_group_rate_limits\",\n      \"docs\": [\n        \"(admin or delegate_limit_admin) Configure group-level rate limits for withdraw/borrow.\",\n        \"Rate limits track aggregate net outflow in USD.\",\n        \"Example: $10M = 10_000_000. Set to 0 to disable.\"\n      ],\n      \"discriminator\": [\n        111,\n        47,\n        213,\n        142,\n        158,\n        51,\n        226,\n        102\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"hourly_max_outflow_usd\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"daily_max_outflow_usd\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"disable_staked_oracles\",\n      \"docs\": [\n        \"(admin only) Disable stake pricing, i.e. effectively forbidding all operations involving stake banks.\",\n        \"To be used during the rollout of the SVSP upgrade.\",\n        \"To be removed once SVSP update is rolled out (likely in 1.10)\"\n      ],\n      \"discriminator\": [\n        43,\n        90,\n        152,\n        55,\n        66,\n        101,\n        232,\n        200\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"staked_settings\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  116,\n                  97,\n                  107,\n                  101,\n                  100,\n                  95,\n                  115,\n                  101,\n                  116,\n                  116,\n                  105,\n                  110,\n                  103,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"drift_claim_bad_debt\",\n      \"docs\": [\n        \"(permissionless) Claim a Drift bad-debt portal allocation for a Drift bank.\",\n        \"The merkle claimant is the bank's liquidity_vault_authority PDA, and claimed tokens are\",\n        \"swept to the global fee wallet's canonical ATA.\"\n      ],\n      \"discriminator\": [\n        163,\n        67,\n        144,\n        231,\n        119,\n        20,\n        220,\n        33\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Pays transaction fees, ATA creation, and ClaimStatus rent.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"fee_state\",\n          \"docs\": [\n            \"Global fee state containing the global_fee_wallet destination owner.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority. This PDA is the claimant in Drift's merkle tree.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Drift user account owned by liquidity_vault_authority.\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"Drift user stats account owned by liquidity_vault_authority.\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"distributor\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_status\",\n          \"docs\": [\n            \"program. The distributor initializes and validates this account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  67,\n                  108,\n                  97,\n                  105,\n                  109,\n                  83,\n                  116,\n                  97,\n                  116,\n                  117,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"distributor\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                146,\n                236,\n                26,\n                197,\n                144,\n                103,\n                53,\n                152,\n                100,\n                169,\n                178,\n                41,\n                101,\n                122,\n                227,\n                41,\n                118,\n                44,\n                195,\n                207,\n                0,\n                4,\n                127,\n                191,\n                210,\n                197,\n                189,\n                231,\n                111,\n                46,\n                30,\n                226\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"from\",\n          \"docs\": [\n            \"Distributor token vault.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_mint\"\n        },\n        {\n          \"name\": \"global_fee_wallet\"\n        },\n        {\n          \"name\": \"claimant_token_account\",\n          \"docs\": [\n            \"Canonical ATA for the claim mint owned by liquidity_vault_authority.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Canonical ATA for the claim mint owned by FeeState.global_fee_wallet.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"merkle_distributor_program\",\n          \"address\": \"AtXLVASdFhmdq2KZxzhVFonmNXL76dTTsEABXySEHgLh\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"proof\",\n          \"type\": {\n            \"vec\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"drift_deposit\",\n      \"docs\": [\n        \"(user) Deposit into a Drift spot market through a marginfi account\",\n        \"* amount - in the underlying token (e.g., USDC), in native decimals\"\n      ],\n      \"discriminator\": [\n        252,\n        63,\n        250,\n        201,\n        98,\n        55,\n        130,\n        12\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_oracle\",\n          \"docs\": [\n            \"The oracle account for the asset (not needed if using oracle type QuoteAsset)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority, which owns the Drift user account\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit tokens into Drift\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"Owned by authority, the source account for the token deposit\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_state\",\n          \"docs\": [\n            \"The Drift state account\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The Drift user account owned by liquidity_vault_authority\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"The Drift user stats account owned by liquidity_vault_authority\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Drift spot market for this asset\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_spot_market_vault\",\n          \"docs\": [\n            \"The Drift spot market vault that will receive tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_program\",\n          \"address\": \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"drift_harvest_reward\",\n      \"docs\": [\n        \"(permissionless) Harvest rewards from admin deposits in Drift spot markets.\",\n        \"Rewards are always sent to the global fee wallet's canonical ATA.\",\n        \"The harvest spot market must be different from the bank's main drift spot market.\"\n      ],\n      \"discriminator\": [\n        167,\n        161,\n        240,\n        194,\n        138,\n        54,\n        87,\n        189\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"fee_state\",\n          \"docs\": [\n            \"Global fee state that contains the global_fee_wallet\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"intermediary_token_account\",\n          \"docs\": [\n            \"To create this manually just send some of the reward token\",\n            \"to the liquidity vault authority address before claiming\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"reward_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Destination token account must be owned by the global fee wallet\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"fee_state\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"reward_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"drift_state\",\n          \"docs\": [\n            \"Drift accounts\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"harvest_drift_spot_market\",\n          \"docs\": [\n            \"The harvest spot market - MUST be different from bank's Drift spot market (integration_acc_1)\",\n            \"This is the market that contains admin deposits to harvest\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"harvest_drift_spot_market_vault\",\n          \"docs\": [\n            \"The harvest spot market vault - derived from harvest_drift_spot_market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\",\n          \"docs\": [\n            \"The Drift signer PDA\"\n          ]\n        },\n        {\n          \"name\": \"reward_mint\"\n        },\n        {\n          \"name\": \"drift_program\",\n          \"address\": \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"drift_init_user\",\n      \"docs\": [\n        \"(permissionless) Initialize a Drift user and user stats for a marginfi bank\",\n        \"Creates user with sub_account_id = 0 and empty name\",\n        \"Requires a minimum deposit to ensure the account remains active\",\n        \"* amount - minimum deposit amount (at least 10 units) in native decimals\"\n      ],\n      \"discriminator\": [\n        29,\n        18,\n        236,\n        190,\n        29,\n        254,\n        114,\n        169\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays to init the drift user and user stats accounts and provides initial deposit\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"The fee payer must provide a nominal amount of bank tokens so the account is not empty.\",\n            \"This amount is irrecoverable and will prevent the account from being closed.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The liquidity vault authority (PDA that will own the Drift user)\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit a nominal amount of token into Drift.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC)\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"The user stats account to be created\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  117,\n                  115,\n                  101,\n                  114,\n                  95,\n                  115,\n                  116,\n                  97,\n                  116,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                9,\n                84,\n                219,\n                190,\n                158,\n                201,\n                96,\n                201,\n                138,\n                122,\n                41,\n                63,\n                226,\n                19,\n                54,\n                150,\n                111,\n                225,\n                128,\n                209,\n                81,\n                174,\n                75,\n                129,\n                121,\n                86,\n                31,\n                137,\n                133,\n                74,\n                83,\n                246\n              ]\n            }\n          },\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The user account to be created (sub_account_id = 0)\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  117,\n                  115,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  0,\n                  0\n                ]\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                9,\n                84,\n                219,\n                190,\n                158,\n                201,\n                96,\n                201,\n                138,\n                122,\n                41,\n                63,\n                226,\n                19,\n                54,\n                150,\n                111,\n                225,\n                128,\n                209,\n                81,\n                174,\n                75,\n                129,\n                121,\n                86,\n                31,\n                137,\n                133,\n                74,\n                83,\n                246\n              ]\n            }\n          },\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_spot_market_vault\",\n          \"docs\": [\n            \"The Drift spot market vault where tokens will be deposited\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_oracle\",\n          \"docs\": [\n            \"Oracle for the asset (can be null for USDC/market 0)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_program\",\n          \"address\": \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"rent\",\n          \"address\": \"SysvarRent111111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"drift_withdraw\",\n      \"docs\": [\n        \"(user) Withdraw from a Drift spot market through a marginfi account\",\n        \"* amount - in the underlying token (e.g., USDC), in native decimals\",\n        \"* if group rate limits are enabled, include the withdrawn bank's oracle group in\",\n        \"`remaining_accounts`\",\n        \"* withdraw_all - if true, withdraws entire position\"\n      ],\n      \"discriminator\": [\n        86,\n        59,\n        186,\n        123,\n        183,\n        181,\n        234,\n        137\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_oracle\",\n          \"docs\": [\n            \"The oracle account for the asset (not needed if using oracle type QuoteAsset)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority, which owns the Drift user account\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Receives tokens from Drift withdrawal\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Token account that will receive the withdrawn tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_state\",\n          \"docs\": [\n            \"The Drift state account\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The Drift user account owned by liquidity_vault_authority\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"The Drift user stats account owned by liquidity_vault_authority\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Drift spot market for this asset\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_spot_market_vault\",\n          \"docs\": [\n            \"The Drift spot market vault that holds tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_reward_oracle\",\n          \"docs\": [\n            \"Optional: Oracle for first reward asset (only needed if rewards exist)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_reward_spot_market\",\n          \"docs\": [\n            \"Optional: Spot market for first reward asset (only needed if rewards exist)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_reward_mint\",\n          \"docs\": [\n            \"Optional: Mint for first reward asset (only needed if rewards exist)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_reward_oracle_2\",\n          \"docs\": [\n            \"Optional: Oracle for second reward asset (backup in case multiple rewards)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_reward_spot_market_2\",\n          \"docs\": [\n            \"Optional: Spot market for second reward asset (backup in case multiple rewards)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_reward_mint_2\",\n          \"docs\": [\n            \"Optional: Mint for second reward asset (backup in case multiple rewards)\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"drift_signer\",\n          \"docs\": [\n            \"The Drift signer PDA\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"drift_program\",\n          \"address\": \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_all\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"edit_global_fee_state\",\n      \"docs\": [\n        \"(global fee admin only) Adjust fees, admin, wallet, or pause delegate admin\"\n      ],\n      \"discriminator\": [\n        52,\n        62,\n        35,\n        129,\n        93,\n        69,\n        165,\n        202\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"global_fee_admin\",\n          \"docs\": [\n            \"Admin of the global FeeState\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"fee_state\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"fee_wallet\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"bank_init_flat_sol_fee\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"liquidation_flat_sol_fee\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"order_init_flat_sol_fee\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"program_fee_fixed\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"program_fee_rate\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"liquidation_max_fee\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"order_execution_max_fee\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"pause_delegate_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"account_transfer_fee\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"edit_staked_settings\",\n      \"docs\": [\n        \"(admin only) Edit the staked collateral settings for the group.\"\n      ],\n      \"discriminator\": [\n        11,\n        108,\n        215,\n        87,\n        240,\n        9,\n        66,\n        241\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"relations\": [\n            \"staked_settings\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        },\n        {\n          \"name\": \"staked_settings\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"settings\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"StakedSettingsEditConfig\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"enable_staked_oracle_onramp\",\n      \"docs\": [\n        \"(admin only) Enable SPL single-pool on-ramp lamports in staked-collateral oracle pricing.\",\n        \"To be removed once SVSP update is rolled out (likely in 1.10)\",\n        \"This flips a per-group config flag so that every staked oracle uses the canonical single-pool NAV\",\n        \"formula.\"\n      ],\n      \"discriminator\": [\n        114,\n        248,\n        244,\n        6,\n        74,\n        212,\n        222,\n        230\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"staked_settings\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  116,\n                  97,\n                  107,\n                  101,\n                  100,\n                  95,\n                  115,\n                  101,\n                  116,\n                  116,\n                  105,\n                  110,\n                  103,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"end_deleverage\",\n      \"docs\": [\n        \"(risk_admin only) End forced deleverage. Validates health did not worsen.\"\n      ],\n      \"discriminator\": [\n        114,\n        14,\n        250,\n        143,\n        252,\n        104,\n        214,\n        209\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"risk_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"end_liquidation\",\n      \"docs\": [\n        \"(liquidation_receiver, set in start_liquidation) End receivership liquidation. Validates\",\n        \"health improved and seized assets are within fee limits. Charges a flat SOL fee.\"\n      ],\n      \"discriminator\": [\n        110,\n        11,\n        244,\n        54,\n        229,\n        181,\n        22,\n        184\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"Account under liquidation\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"docs\": [\n            \"The associated liquidation record PDA for the given `marginfi_account`\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"liquidation_receiver\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"liquidation_record\"\n          ]\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Optional separate payer for the flat liquidation fee. When provided it must sign and pays the\",\n            \"fee; when omitted, the `liquidation_receiver` pays (the default).\"\n          ],\n          \"writable\": true,\n          \"signer\": true,\n          \"optional\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_bank_metadata\",\n      \"docs\": [\n        \"(permissionless) pay the rent to open metadata for a bank. The bank account does not have\",\n        \"to exist yet \\u2014 callers can pre-create metadata for an upcoming bank pubkey at their own\",\n        \"rent expense. When the bank is initialized and its seed is on-chain, the PDA is verified.\"\n      ],\n      \"discriminator\": [\n        94,\n        239,\n        50,\n        136,\n        137,\n        204,\n        254,\n        213\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"bank\",\n          \"docs\": [\n            \"keypair-based bank. When initialized with a known seed, the PDA is verified in the handler.\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays the init fee\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"metadata\",\n          \"docs\": [\n            \"Note: unique per-bank.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  109,\n                  101,\n                  116,\n                  97,\n                  100,\n                  97,\n                  116,\n                  97\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_global_fee_state\",\n      \"docs\": [\n        \"(Runs once per program) Configures the fee state account, where the global admin sets fees\",\n        \"that are assessed to the protocol\"\n      ],\n      \"discriminator\": [\n        82,\n        48,\n        247,\n        59,\n        220,\n        109,\n        231,\n        44\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Pays the init fee\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"admin\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"fee_wallet\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"bank_init_flat_sol_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"liquidation_flat_sol_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"order_init_flat_sol_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"program_fee_fixed\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"WrappedI80F48\"\n            }\n          }\n        },\n        {\n          \"name\": \"program_fee_rate\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"WrappedI80F48\"\n            }\n          }\n        },\n        {\n          \"name\": \"liquidation_max_fee\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"WrappedI80F48\"\n            }\n          }\n        },\n        {\n          \"name\": \"order_execution_max_fee\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"WrappedI80F48\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"init_staked_settings\",\n      \"docs\": [\n        \"(group admin only) Init the Staked Settings account, which is used to create staked\",\n        \"collateral banks, and must run before any staked collateral bank can be created with\",\n        \"`add_pool_permissionless`. Running this ix effectively opts the group into the staked\",\n        \"collateral feature.\"\n      ],\n      \"discriminator\": [\n        52,\n        35,\n        149,\n        44,\n        69,\n        86,\n        69,\n        80\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays the init fee\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"staked_settings\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  116,\n                  97,\n                  107,\n                  101,\n                  100,\n                  95,\n                  115,\n                  101,\n                  116,\n                  116,\n                  105,\n                  110,\n                  103,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_group\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"settings\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"StakedSettingsConfig\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"juplend_deposit\",\n      \"docs\": [\n        \"(user) Deposit into a JupLend lending pool through a marginfi account.\",\n        \"* amount - in the underlying token (e.g., USDC), in native decimals\"\n      ],\n      \"discriminator\": [\n        114,\n        11,\n        218,\n        81,\n        183,\n        165,\n        143,\n        255\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"Owned by authority, the source account for the token deposit.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority PDA (acts as signer for JupLend CPIs).\",\n            \"NOTE: JupLend marks the signer as writable in their deposit instruction.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Bank liquidity vault (holds underlying mint and is used as depositor_token_account).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Underlying mint.\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"JupLend lending state account.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"docs\": [\n            \"JupLend fToken mint.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"integration_acc_1\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Bank's fToken vault (validated via has_one on bank).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"address\": \"jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC\"\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"juplend_program\",\n          \"address\": \"jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"juplend_init_position\",\n      \"docs\": [\n        \"(permissionless) Initialize the bank-level JupLend position.\",\n        \"\",\n        \"This creates the bank's fToken ATA (owned by the bank liquidity vault authority) and\",\n        \"performs a nominal seed deposit into JupLend, then flips the bank from `Paused` to\",\n        \"`Operational`.\"\n      ],\n      \"discriminator\": [\n        176,\n        255,\n        151,\n        106,\n        5,\n        207,\n        74,\n        215\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Provides a nominal deposit amount.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"Token account owned by the fee payer holding the underlying mint.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority PDA (acts as signer for JupLend CPIs).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Bank liquidity vault (holds underlying mint and is used as depositor_token_account).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Underlying mint (must match bank mint and JupLend lending state mint).\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"JupLend lending state account.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"docs\": [\n            \"JupLend fToken mint.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"integration_acc_1\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Bank's fToken vault (validated via has_one on bank).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"address\": \"jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC\"\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"juplend_program\",\n          \"address\": \"jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"juplend_withdraw\",\n      \"docs\": [\n        \"(user) Withdraw from a JupLend lending pool through a marginfi account.\",\n        \"* amount - in the underlying token (e.g., USDC), in native decimals\",\n        \"* if group rate limits are enabled, include the withdrawn bank's oracle group in\",\n        \"`remaining_accounts`\"\n      ],\n      \"discriminator\": [\n        245,\n        164,\n        253,\n        202,\n        53,\n        77,\n        251,\n        221\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Token account that will receive the underlying withdrawal.\",\n            \"WARN: Completely unchecked!\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority PDA (acts as signer for JupLend CPIs).\",\n            \"NOTE: JupLend marks the signer as writable in their withdraw instruction.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Underlying mint.\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"JupLend lending state account.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"docs\": [\n            \"JupLend fToken mint.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"integration_acc_1\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Bank's fToken vault (validated via has_one on bank).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"Withdraw intermediary ATA (authority = liquidity_vault_authority).\",\n            \"This must be an ATA to satisfy JupLend's withdraw constraints.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_account\",\n          \"docs\": [\n            \"JupLend claim account for liquidity_vault_authority.\",\n            \"TEMPORARY: Mainnet currently requires this account (passing None causes ConstraintMut errors),\",\n            \"but an upcoming upgrade is expected to make it truly optional. The account is never actually\",\n            \"validated or used - you can pass any mutable account. We create the canonical PDA for consistency.\",\n            \"Seeds: [\\\"user_claim\\\", liquidity_vault_authority, mint] on Liquidity program.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"address\": \"jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC\"\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"juplend_program\",\n          \"address\": \"jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_all\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"kamino_deposit\",\n      \"docs\": [\n        \"(user) Deposit into a Kamino pool through a marginfi account\",\n        \"* amount - in the liquidity token (e.g. if there is a Kamino USDC bank, pass the amount of\",\n        \"USDC desired), in native decimals.\"\n      ],\n      \"discriminator\": [\n        237,\n        8,\n        188,\n        187,\n        115,\n        99,\n        49,\n        85\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"Owned by authority, the source account for the token deposit.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority, which owns the Kamino obligation. Note: Kamino needs\",\n            \"this to be mut because `deposit` might return the rent here\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit token into Kamino\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Kamino reserve that holds liquidity\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC). Kamino calls this the `reserve_liquidity_mint`\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's mint for tokenized representations of Kamino deposits.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_destination_deposit_collateral\",\n          \"docs\": [\n            \"The reserve's destination for tokenized representations of deposits. Note: the\",\n            \"`reserve_collateral_mint` will mint tokens directly to this account.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"obligation_farm_user_state\",\n          \"docs\": [\n            \"Required if the Kamino reserve has an active farm.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"reserve_farm_state\",\n          \"docs\": [\n            \"Required if the Kamino reserve has an active farm.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"kamino_program\",\n          \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n        },\n        {\n          \"name\": \"farms_program\",\n          \"docs\": [\n            \"Farms program for Kamino staking functionality\"\n          ],\n          \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n        },\n        {\n          \"name\": \"collateral_token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"refresh_reserve\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"kamino_harvest_reward\",\n      \"docs\": [\n        \"(permissionless) Harvest the specified reward index from the Kamino Farm attached to this\",\n        \"bank. Rewards are always sent to the global fee wallet's canonical ATA.\",\n        \"\",\n        \"* `reward_index` \\u2014 index of the reward token in the Kamino Farm's reward list\"\n      ],\n      \"discriminator\": [\n        163,\n        202,\n        248,\n        141,\n        106,\n        20,\n        116,\n        5\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"fee_state\",\n          \"docs\": [\n            \"Global fee state that contains the global_fee_admin\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Destination token account must be owned by the global fee admin\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"fee_state\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"reward_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority, which owns the Kamino obligation.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"user_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"farm_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"global_config\"\n        },\n        {\n          \"name\": \"reward_mint\"\n        },\n        {\n          \"name\": \"user_reward_ata\",\n          \"docs\": [\n            \"An initialized ATA of type reward mint owned by liquidity vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"rewards_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rewards_treasury_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"farm_vaults_authority\"\n        },\n        {\n          \"name\": \"scope_prices\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"farms_program\",\n          \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"reward_index\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"kamino_init_obligation\",\n      \"docs\": [\n        \"(permissionless) Initialize a Kamino obligation for a marginfi bank\",\n        \"* amount - In token, in native decimals. Must be >10 (i.e. 10 lamports, not 10 tokens). Lost\",\n        \"forever. Generally, try to make this the equivalent of around $1, in case Kamino ever\",\n        \"rounds small balances down to zero.\"\n      ],\n      \"discriminator\": [\n        253,\n        177,\n        160,\n        225,\n        70,\n        156,\n        217,\n        109\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays to init the obligation and pays a nominal amount to ensure the obligation has a\",\n            \"non-zero balance.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"The fee payer must provide a nominal amount of bank tokens so the obligation is not empty.\",\n            \"This amount is irrecoverable and and will prevent the obligation from ever being closed,\",\n            \"even if the bank is otherwise empty (Kamino normally closes empty obligations automatically)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The liquidity vault authority (PDA that will own the Kamino obligation). Note: Kamino needs\",\n            \"this to be mut because `deposit` might return the rent here\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit a nominal amount of token into the obligation.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The obligation account to be created. Note that the key was already derived when\",\n            \"initializing the bank, and this must match the obligation recorded at that time.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"user_metadata\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC). Kamino calls this the `reserve_liquidity_mint`\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's mint for tokenized representations of Kamino deposits.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_destination_deposit_collateral\",\n          \"docs\": [\n            \"The reserve's destination for tokenized representations of deposits. Note: the\",\n            \"`reserve_collateral_mint` will mint tokens directly to this account.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"obligation_farm_user_state\",\n          \"docs\": [\n            \"Required if the Kamino reserve has an active farm.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"reserve_farm_state\",\n          \"docs\": [\n            \"Required if the Kamino reserve has an active farm.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"kamino_program\",\n          \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n        },\n        {\n          \"name\": \"farms_program\",\n          \"docs\": [\n            \"Farms program for Kamino staking functionality\"\n          ],\n          \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n        },\n        {\n          \"name\": \"collateral_token_program\",\n          \"docs\": [\n            \"Note: the collateral token always uses Token classic, never Token22.\"\n          ],\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"liquidity_token_program\",\n          \"docs\": [\n            \"Note: Kamino does not have full Token22 support, certain Token22 features are disallowed.\",\n            \"Expect this to update over time. Check with the Kamino source.\"\n          ]\n        },\n        {\n          \"name\": \"instruction_sysvar_account\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"rent\",\n          \"address\": \"SysvarRent111111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"kamino_withdraw\",\n      \"docs\": [\n        \"(user) Withdraw from a Kamino pool through a marginfi account\",\n        \"* amount - in the collateral token (NOT liquidity token), in native decimals. Must convert\",\n        \"from collateral to liquidity token amounts using the current exchange rate.\",\n        \"* if group rate limits are enabled, include the withdrawn bank's oracle group in\",\n        \"`remaining_accounts`\",\n        \"* flags - optional bitflags:\",\n        \"- bit 0 (`0x01`): withdraw all\",\n        \"- bit 1 (`0x02`): refresh reserve via batch refresh\"\n      ],\n      \"discriminator\": [\n        199,\n        101,\n        41,\n        45,\n        213,\n        98,\n        224,\n        200\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Token account that will receive the withdrawn tokens. Mint/owner are validated by the\",\n            \"SPL transfer; the caller controls the destination.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          },\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_market\",\n          \"docs\": [\n            \"The Kamino lending market\"\n          ]\n        },\n        {\n          \"name\": \"lending_market_authority\",\n          \"docs\": [\n            \"The Kamino lending market authority\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Kamino reserve that holds liquidity\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"The liquidity token mint (e.g., USDC)\",\n            \"Needs serde to get the mint decimals for transfer checked\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"docs\": [\n            \"The reserve's liquidity supply account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's collateral mint\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_source_collateral\",\n          \"docs\": [\n            \"The reserve's source for collateral tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"obligation_farm_user_state\",\n          \"docs\": [\n            \"Optional farms accounts for Kamino staking functionality\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"reserve_farm_state\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"kamino_program\",\n          \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n        },\n        {\n          \"name\": \"farms_program\",\n          \"docs\": [\n            \"Farms program for Kamino staking functionality\"\n          ],\n          \"address\": \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n        },\n        {\n          \"name\": \"collateral_token_program\",\n          \"docs\": [\n            \"The token program for the collateral token\"\n          ],\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"liquidity_token_program\",\n          \"docs\": [\n            \"The token program for the liquidity token\"\n          ]\n        },\n        {\n          \"name\": \"instruction_sysvar_account\",\n          \"docs\": [\n            \"Used by kamino validate CPI calls\"\n          ],\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_borrow\",\n      \"docs\": [\n        \"(account authority) Borrow assets from a bank. Accrues interest, records liability, applies\",\n        \"origination fee, transfers tokens, and runs a health check. If group rate limits are\",\n        \"enabled, `remaining_accounts` must include the borrowed bank's oracle group for USD\",\n        \"pricing.\"\n      ],\n      \"discriminator\": [\n        4,\n        126,\n        116,\n        53,\n        48,\n        5,\n        212,\n        31\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"bank_liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_close_balance\",\n      \"docs\": [\n        \"(account authority) Close a balance position with dust-level amounts.\"\n      ],\n      \"discriminator\": [\n        245,\n        54,\n        41,\n        4,\n        243,\n        202,\n        31,\n        17\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_account_deposit\",\n      \"docs\": [\n        \"(account authority) Deposit assets into a bank. Accrues interest, records deposit, and\",\n        \"transfers tokens from the signer's token account to the bank's liquidity vault.\"\n      ],\n      \"discriminator\": [\n        171,\n        94,\n        235,\n        103,\n        82,\n        64,\n        212,\n        140\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"deposit_up_to_limit\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_end_flashloan\",\n      \"docs\": [\n        \"(account authority) End a flash loan and run the health check.\"\n      ],\n      \"discriminator\": [\n        105,\n        124,\n        201,\n        106,\n        153,\n        2,\n        8,\n        156\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_account_liquidate\",\n      \"docs\": [\n        \"(permissionless) Liquidate a lending account balance of an unhealthy marginfi account.\",\n        \"The liquidator takes on the liability and receives discounted collateral (2.5% liquidator\",\n        \"fee + 2.5% insurance fee).\",\n        \"* `asset_amount` - amount of collateral to liquidate\",\n        \"* `liquidatee_accounts` - number of remaining accounts for the liquidatee\",\n        \"* `liquidator_accounts` - number of remaining accounts for the liquidator\"\n      ],\n      \"discriminator\": [\n        214,\n        169,\n        151,\n        213,\n        251,\n        167,\n        86,\n        219\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"asset_bank\",\n            \"liab_bank\",\n            \"liquidator_marginfi_account\",\n            \"liquidatee_marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"asset_bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liab_bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidatee_marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"bank_liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liab_bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"bank_liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liab_bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"bank_insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liab_bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"asset_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"liquidatee_accounts\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"liquidator_accounts\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_pulse_health\",\n      \"docs\": [\n        \"(Permissionless) Refresh the internal risk engine health cache. Useful for liquidators and\",\n        \"other consumers that want to see the internal risk state of a user account. This cache is\",\n        \"read-only and serves no purpose except being populated by this ix.\",\n        \"* remaining accounts expected in the same order as borrow, etc. I.e., for each balance the\",\n        \"user has, pass bank and oracle: <bank1, oracle1, bank2, oracle2>\"\n      ],\n      \"discriminator\": [\n        186,\n        52,\n        117,\n        97,\n        34,\n        74,\n        39,\n        253\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_account_repay\",\n      \"docs\": [\n        \"(account authority, or any signer during receivership) Repay borrowed assets. Accrues\",\n        \"interest, records repayment, and transfers tokens to the bank's liquidity vault.\"\n      ],\n      \"discriminator\": [\n        79,\n        209,\n        172,\n        177,\n        222,\n        51,\n        173,\n        151\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"Must be marginfi_account's authority, unless in liquidation/deleverage receivership or order execution\",\n            \"\",\n            \"Note: during receivership and order execution, there are no signer checks whatsoever: any key can repay as\",\n            \"long as the invariants checked at the end of execution are met.\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"repay_all\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_start_flashloan\",\n      \"docs\": [\n        \"(account authority) Start a flash loan. Must have a corresponding `end_flashloan` ix in the\",\n        \"same tx. Health checks are skipped until the flash loan ends.\"\n      ],\n      \"discriminator\": [\n        14,\n        131,\n        33,\n        220,\n        81,\n        186,\n        180,\n        107\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"ixs_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"end_index\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_account_withdraw\",\n      \"docs\": [\n        \"(account authority, or any signer during receivership) Withdraw assets from a bank. Accrues\",\n        \"interest, records withdrawal, transfers tokens, and runs a health check (skipped during\",\n        \"receivership). If group rate limits are enabled, `remaining_accounts` must include the\",\n        \"withdrawn bank's oracle group for USD pricing.\"\n      ],\n      \"discriminator\": [\n        36,\n        72,\n        74,\n        19,\n        210,\n        210,\n        192,\n        192\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"Must be marginfi_account's authority, unless in liquidation/deleverage receivership or order execution\",\n            \"\",\n            \"Note: during receivership and order execution, there are no signer checks whatsoever: any key can repay as\",\n            \"long as the invariants checked at the end of execution are met.\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"bank_liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_all\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_accrue_bank_interest\",\n      \"docs\": [\n        \"(permissionless) Accrue interest on a bank, updating share values and collecting fees.\"\n      ],\n      \"discriminator\": [\n        108,\n        201,\n        30,\n        87,\n        47,\n        65,\n        97,\n        188\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_add_bank\",\n      \"docs\": [\n        \"(admin only) Add a new bank to the lending pool\"\n      ],\n      \"discriminator\": [\n        215,\n        68,\n        72,\n        78,\n        208,\n        218,\n        103,\n        182\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"bank_mint\"\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"BankConfigCompact\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_drift\",\n      \"docs\": [\n        \"(group admin only) Add a Drift bank to the group.\"\n      ],\n      \"discriminator\": [\n        62,\n        63,\n        49,\n        48,\n        76,\n        55,\n        108,\n        155\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\",\n          \"docs\": [\n            \"Must match the mint used by `integration_acc_1`\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"Drift spot market account that must match the bank mint\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Drift user account for the marginfi program (derived from liquidity_vault_authority)\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  117,\n                  115,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  0,\n                  0\n                ]\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                9,\n                84,\n                219,\n                190,\n                158,\n                201,\n                96,\n                201,\n                138,\n                122,\n                41,\n                63,\n                226,\n                19,\n                54,\n                150,\n                111,\n                225,\n                128,\n                209,\n                81,\n                174,\n                75,\n                129,\n                121,\n                86,\n                31,\n                137,\n                133,\n                74,\n                83,\n                246\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"integration_acc_3\",\n          \"docs\": [\n            \"Drift user stats account for the marginfi program (derived from liquidity_vault_authority)\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  117,\n                  115,\n                  101,\n                  114,\n                  95,\n                  115,\n                  116,\n                  97,\n                  116,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"liquidity_vault_authority\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                9,\n                84,\n                219,\n                190,\n                158,\n                201,\n                96,\n                201,\n                138,\n                122,\n                41,\n                63,\n                226,\n                19,\n                54,\n                150,\n                111,\n                225,\n                128,\n                209,\n                81,\n                174,\n                75,\n                129,\n                121,\n                86,\n                31,\n                137,\n                133,\n                74,\n                83,\n                246\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"Will be authority of the bank's liquidity vault. Used as intermediary for deposits/withdraws\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"For Drift banks, the `liquidity_vault` never holds assets, but is instead used as an\",\n            \"intermediary when depositing/withdrawing, e.g., withdrawn funds move from Drift -> here ->\",\n            \"the user's token account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"DriftConfigCompact\"\n            }\n          }\n        },\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_juplend\",\n      \"docs\": [\n        \"(admin) Add a JupLend bank to the marginfi group.\",\n        \"\",\n        \"Remaining accounts (for oracle validation):\",\n        \"0. underlying oracle feed (pyth push or switchboard pull)\",\n        \"1. JupLend `Lending` state\"\n      ],\n      \"discriminator\": [\n        18,\n        208,\n        117,\n        90,\n        53,\n        111,\n        195,\n        41\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\",\n          \"docs\": [\n            \"Must match the mint used by the JupLend lending state.\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"JupLend lending state account that must match the bank mint.\"\n          ]\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"Will be authority of the bank's liquidity vault. Used as intermediary for deposits/withdraws.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"For JupLend banks, the `liquidity_vault` is used as an intermediary when depositing/\",\n            \"withdrawing, e.g., withdrawn funds move from JupLend -> here -> the user's token account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"relations\": [\n            \"integration_acc_1\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The bank's fToken vault holds the fTokens received when depositing into JupLend.\",\n            \"\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  95,\n                  116,\n                  111,\n                  107,\n                  101,\n                  110,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Token program for both underlying mint and fToken mint (SPL Token or Token-2022).\",\n            \"JupLend creates fToken mints using the same token program as the underlying.\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"JuplendConfigCompact\"\n            }\n          }\n        },\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_kamino\",\n      \"docs\": [\n        \"(group admin only) Add a Kamino bank to the group. Pass the oracle and reserve in remaining\",\n        \"accounts 0 and 1 respectively.\"\n      ],\n      \"discriminator\": [\n        118,\n        53,\n        16,\n        243,\n        255,\n        245,\n        149,\n        241\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\",\n          \"docs\": [\n            \"Must match the mint used by the Kamino reserve (integration_acc_1), Kamino calls this the\",\n            \"`reserve_liquidity_mint` aka `liquidity.mint_pubkey`\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"integration_acc_1\"\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Note: not yet initialized in this instruction, run `init_obligation` after.\"\n          ]\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"Will be authority of the bank's Kamino obligation (integration_acc_2). Note: When\",\n            \"depositing/withdrawing Kamino assets, the source/destination must also be owned by the\",\n            \"obligation authority.\",\n            \"Kamino assets, the source/destination must also be owned by the obligation authority. This\",\n            \"account owns the `liquidity_vault`, and thus acts as intermediary for deposits/withdraws\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"For Kamino banks, the `liquidity_vault` never holds assets, but is instead used as an\",\n            \"intermediary when depositing/withdrawing, e.g., withdrawn funds move from Kamino -> here ->\",\n            \"the user's token account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"KaminoConfigCompact\"\n            }\n          }\n        },\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_permissionless\",\n      \"docs\": [\n        \"(permissionless) Add a staked collateral bank. Requires a valid SPL single-pool LST mint.\"\n      ],\n      \"discriminator\": [\n        127,\n        187,\n        121,\n        34,\n        187,\n        167,\n        238,\n        102\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true,\n          \"relations\": [\n            \"staked_settings\"\n          ]\n        },\n        {\n          \"name\": \"staked_settings\"\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\",\n          \"docs\": [\n            \"Mint of the spl-single-pool LST (a PDA derived from `stake_pool`)\",\n            \"\",\n            \"because the sol_pool and stake_pool will not derive to a valid PDA which is also owned by\",\n            \"the staking program and spl-single-pool program.\"\n          ]\n        },\n        {\n          \"name\": \"sol_pool\"\n        },\n        {\n          \"name\": \"pool_onramp\"\n        },\n        {\n          \"name\": \"stake_pool\",\n          \"docs\": [\n            \"this key.\",\n            \"\",\n            \"If derives the same `bank_mint`, then this must be the correct stake pool for that mint, and\",\n            \"we can subsequently use it to validate the `sol_pool`\"\n          ]\n        },\n        {\n          \"name\": \"validator_vote_account\",\n          \"docs\": [\n            \"Validator vote account for this staked bank.\",\n            \"\",\n            \"vote -> stake_pool -> mint/stake/on-ramp.\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_solend\",\n      \"docs\": [\n        \"(admin) Add a Solend bank to the marginfi group\"\n      ],\n      \"discriminator\": [\n        81,\n        233,\n        203,\n        199,\n        47,\n        226,\n        0,\n        68\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\",\n          \"docs\": [\n            \"Must match the mint used by `integration_acc_1`, Solend calls this the `liquidity.mint_pubkey`\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"Solend reserve account that must match the bank mint\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"Obligation PDA for this bank in Solend\",\n            \"Will be initialized and transferred to Solend in init_obligation instruction\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  111,\n                  108,\n                  101,\n                  110,\n                  100,\n                  95,\n                  111,\n                  98,\n                  108,\n                  105,\n                  103,\n                  97,\n                  116,\n                  105,\n                  111,\n                  110\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"Will be authority of the bank's liquidity vault. Used as intermediary for deposits/withdraws\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"For Solend banks, the `liquidity_vault` never holds assets, but is instead used as an\",\n            \"intermediary when depositing/withdrawing, e.g., withdrawn funds move from Solend -> here ->\",\n            \"the user's token account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"docs\": [\n            \"Note: Currently does nothing.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"SolendConfigCompact\"\n            }\n          }\n        },\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_add_bank_with_seed\",\n      \"docs\": [\n        \"(admin only) A copy of lending_pool_add_bank with an additional bank seed.\",\n        \"This seed is used to create a PDA for the bank's signature.\",\n        \"lending_pool_add_bank is preserved for backwards compatibility.\"\n      ],\n      \"discriminator\": [\n        76,\n        211,\n        213,\n        171,\n        117,\n        78,\n        158,\n        76\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"bank_mint\"\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"BankConfigCompact\"\n            }\n          }\n        },\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_backfill_bank_is_t22_flag\",\n      \"docs\": [\n        \"(permissionless) Backfill `IS_T22` on existing banks created before this flag existed.\",\n        \"Also optionally backfills `bank_seed` in the same call.\",\n        \"Pass `None` to skip seed backfill, `Some(seed)` to backfill (including `Some(0)`).\"\n      ],\n      \"discriminator\": [\n        189,\n        14,\n        205,\n        160,\n        172,\n        46,\n        157,\n        52\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\n            \"bank\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_seed\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_backfill_staked_bank_validator_vote_account\",\n      \"docs\": [\n        \"(permissionless) Backfill validator vote account on existing staked-collateral banks.\",\n        \"No-op if already set to the same validator vote account.\"\n      ],\n      \"discriminator\": [\n        141,\n        6,\n        23,\n        125,\n        72,\n        34,\n        199,\n        24\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"validator_vote_account\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_clear_circuit_breaker\",\n      \"docs\": [\n        \"(admin or risk_admin) Clear an active circuit-breaker halt on a bank.\",\n        \"* `reseed_reference` - If true, also zero the EMA reference so the next pulse reseeds it\",\n        \"from live oracle data (use when clearing because the new price level is valid and the\",\n        \"pre-halt reference would cause an immediate re-halt).\"\n      ],\n      \"discriminator\": [\n        64,\n        73,\n        106,\n        46,\n        213,\n        86,\n        31,\n        48\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"Either `group.admin` or `group.risk_admin`. Validated in the handler.\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"reseed_reference\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_clone_bank\",\n      \"docs\": [\n        \"(admin only) Staging or localnet only, panics on mainnet\",\n        \"This instruction is used to clone a bank to a new PDA.\"\n      ],\n      \"discriminator\": [\n        214,\n        93,\n        17,\n        236,\n        177,\n        228,\n        78,\n        17\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank_mint\"\n        },\n        {\n          \"name\": \"source_bank\",\n          \"docs\": [\n            \"Source bank to clone from mainnet program\",\n            \"\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_clone_emode\",\n      \"docs\": [\n        \"(admin or emode_admin) Copies emode settings from one bank to another. Useful when applying\",\n        \"emode settings from e.g. one LST to another.\"\n      ],\n      \"discriminator\": [\n        146,\n        167,\n        94,\n        106,\n        184,\n        202,\n        15,\n        10\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"copy_from_bank\",\n            \"copy_to_bank\"\n          ]\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"copy_from_bank\"\n        },\n        {\n          \"name\": \"copy_to_bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_close_bank\",\n      \"docs\": [\n        \"(admin only) Close a bank. Requires CLOSE_ENABLED_FLAG and zero positions/shares.\",\n        \"\",\n        \"Pass `force_close = Some(true)` to bypass the CLOSE_ENABLED_FLAG and open-position checks\",\n        \"(zero-shares/emissions are still required). Forcing a bank closed is **VERY DANGEROUS**.\",\n        \"Only do it if a Bank was fundamentally broken in some way. The admin **MUST ENSURE** that:\",\n        \"\",\n        \"* **NO USER** has a Balance in this bank (zero-shares on the bank  is not sufficient to\",\n        \"guarantee this, a user can have a zero-share Balance, this could brick their account.)\",\n        \"* fee and insurance vault balances are withdrawn (unless you don't care if they are lost\",\n        \"**FOREVER**).\",\n        \"* all three vault token-account balances are zero (or you don't care if anything remaining\",\n        \"is lost **FOREVER**), including the liquidity vault\",\n        \"* all three outstanding-fee fields are zero (or you don't care if anything remaining is lost\",\n        \"**FOREVER**)\"\n      ],\n      \"discriminator\": [\n        22,\n        115,\n        7,\n        130,\n        227,\n        85,\n        0,\n        47\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"force_close\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_collect_bank_fees\",\n      \"docs\": [\n        \"(permissionless) Transfer accrued fees from the liquidity vault to insurance/fee/program\",\n        \"vaults.\"\n      ],\n      \"discriminator\": [\n        201,\n        5,\n        215,\n        116,\n        230,\n        92,\n        75,\n        150\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_ata\",\n          \"docs\": [\n            \"(validated in handler). Must already exist, may require initializing the ATA if it does not\",\n            \"already exist prior to this ix.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_configure_bank\",\n      \"docs\": [\n        \"(admin only) Configure bank parameters. If the bank has `FREEZE_SETTINGS`, only\",\n        \"deposit/borrow limits are updated and all other config changes are silently ignored.\"\n      ],\n      \"discriminator\": [\n        121,\n        173,\n        156,\n        40,\n        93,\n        148,\n        56,\n        237\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_config_opt\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"BankConfigOpt\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_configure_bank_emode\",\n      \"docs\": [\n        \"(emode_admin only)\"\n      ],\n      \"discriminator\": [\n        17,\n        175,\n        91,\n        57,\n        239,\n        86,\n        49,\n        71\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"emode_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"emode_tag\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"entries\",\n          \"type\": {\n            \"array\": [\n              {\n                \"defined\": {\n                  \"name\": \"EmodeEntry\"\n                }\n              },\n              10\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_configure_bank_interest_only\",\n      \"docs\": [\n        \"(delegate_curve_admin only) Update interest rate config. Does nothing if bank has\",\n        \"`FREEZE_SETTINGS`.\"\n      ],\n      \"discriminator\": [\n        245,\n        107,\n        83,\n        38,\n        103,\n        219,\n        163,\n        241\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"delegate_curve_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"interest_rate_config\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"InterestRateConfigOpt\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_configure_bank_limits_only\",\n      \"docs\": [\n        \"(delegate_limit_admin only) Update deposit/borrow/init limits only.\"\n      ],\n      \"discriminator\": [\n        157,\n        196,\n        221,\n        200,\n        202,\n        62,\n        84,\n        21\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"delegate_limit_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deposit_limit\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"borrow_limit\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"total_asset_value_init_limit\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_configure_bank_oracle\",\n      \"docs\": [\n        \"(admin only)\"\n      ],\n      \"discriminator\": [\n        209,\n        82,\n        255,\n        171,\n        124,\n        21,\n        71,\n        81\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"setup\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"oracle\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_configure_bank_oracle_scope\",\n      \"docs\": [\n        \"(admin only) Point a bank at a Scope feed entry.\",\n        \"* oracle - the feed's `OraclePrices` account\",\n        \"* entry_index - which of the 512 entries in that account prices this bank\"\n      ],\n      \"discriminator\": [\n        134,\n        228,\n        127,\n        3,\n        117,\n        132,\n        85,\n        146\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"oracle\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"entry_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_emissions_deposit\",\n      \"docs\": [\n        \"(permissionless) Deposit same-bank emissions directly into liquidity vault and increase\",\n        \"depositors' value via `asset_share_value`.\"\n      ],\n      \"discriminator\": [\n        121,\n        118,\n        123,\n        58,\n        59,\n        192,\n        74,\n        138\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"emissions_funding_account\",\n          \"docs\": [\n            \"NOTE: This is a TokenAccount, spl transfer will validate it.\",\n            \"\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_force_tokenless_repay_complete\",\n      \"docs\": [\n        \"(risk_admin only) - Signals all of a bank's liability have been deleveraged. Used if a bank\",\n        \"still has liability dust after the risk admin has completed deleveraging all debts. The\",\n        \"risk admin is trusted not to execute this until all non-dust debts have been deleveraged.\"\n      ],\n      \"discriminator\": [\n        15,\n        203,\n        147,\n        232,\n        199,\n        14,\n        231,\n        37\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"risk_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_handle_bankruptcy\",\n      \"docs\": [\n        \"(risk_admin or admin, unless `PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG` is set on the bank)\",\n        \"Handle bad debt of a bankrupt marginfi account for a given bank. Covers bad debt from the\",\n        \"insurance fund and socializes any remainder among depositors.\"\n      ],\n      \"discriminator\": [\n        162,\n        11,\n        56,\n        139,\n        90,\n        128,\n        70,\n        173\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\",\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"signer\",\n          \"docs\": [\n            \"Must be risk_admin or admin, unless the bank has PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG\",\n            \"set, in which case any signer is accepted.\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_init_same_asset_emode_registry\",\n      \"docs\": [\n        \"(admin or emode_admin only) Initialize the per-group same-asset e-mode registry.\"\n      ],\n      \"discriminator\": [\n        217,\n        78,\n        227,\n        223,\n        147,\n        231,\n        213,\n        108\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\"\n        },\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"same_asset_emode_registry\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  97,\n                  109,\n                  101,\n                  95,\n                  97,\n                  115,\n                  115,\n                  101,\n                  116,\n                  95,\n                  101,\n                  109,\n                  111,\n                  100,\n                  101,\n                  95,\n                  114,\n                  101,\n                  103,\n                  105,\n                  115,\n                  116,\n                  114,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_pulse_bank_price_cache\",\n      \"docs\": [\n        \"(Permissionless) Refresh the cached oracle price for a bank.\"\n      ],\n      \"discriminator\": [\n        192,\n        19,\n        201,\n        135,\n        105,\n        203,\n        32,\n        222\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_resize_group_account\",\n      \"docs\": [\n        \"(permissionless) Resize the group account to the v2 layout size; `payer` funds the\",\n        \"added rent.\"\n      ],\n      \"discriminator\": [\n        97,\n        221,\n        69,\n        96,\n        204,\n        162,\n        174,\n        250\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"docs\": [\n            \"undersized group can still be resized under the future (larger-struct) program.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Funds the rent for the added account space.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_set_bank_same_asset_emode_eligibility\",\n      \"docs\": [\n        \"(admin or emode_admin only) Opt a bank in/out of same-asset e-mode participation.\"\n      ],\n      \"discriminator\": [\n        149,\n        50,\n        162,\n        236,\n        150,\n        119,\n        9,\n        47\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\",\n            \"same_asset_emode_registry\"\n          ]\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"same_asset_emode_registry\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  97,\n                  109,\n                  101,\n                  95,\n                  97,\n                  115,\n                  115,\n                  101,\n                  116,\n                  95,\n                  101,\n                  109,\n                  111,\n                  100,\n                  101,\n                  95,\n                  114,\n                  101,\n                  103,\n                  105,\n                  115,\n                  116,\n                  114,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_set_oracle_price\",\n      \"docs\": [\n        \"(admin only)\"\n      ],\n      \"discriminator\": [\n        234,\n        244,\n        37,\n        65,\n        101,\n        255,\n        217,\n        160\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"price\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"WrappedI80F48\"\n            }\n          }\n        },\n        {\n          \"name\": \"setup\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_update_fees_destination_account\",\n      \"docs\": [\n        \"(admin only) Set the destination wallet for permissionless fee withdrawals.\"\n      ],\n      \"discriminator\": [\n        102,\n        4,\n        121,\n        243,\n        237,\n        110,\n        95,\n        13\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"destination_account\",\n          \"docs\": [\n            \"Bank fees will be sent to this account which must be an ATA of the bank's mint.\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"lending_pool_withdraw_fees\",\n      \"docs\": [\n        \"(admin only) Withdraw collected group fees from the fee vault.\"\n      ],\n      \"discriminator\": [\n        92,\n        140,\n        215,\n        254,\n        170,\n        0,\n        83,\n        174\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"dst_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_withdraw_fees_permissionless\",\n      \"docs\": [\n        \"(permissionless) Withdraw group fees to the pre-configured `fees_destination_account`.\"\n      ],\n      \"discriminator\": [\n        57,\n        245,\n        1,\n        208,\n        130,\n        18,\n        145,\n        113\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fees_destination_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"lending_pool_withdraw_insurance\",\n      \"docs\": [\n        \"(admin only) Withdraw from the insurance vault.\"\n      ],\n      \"discriminator\": [\n        108,\n        60,\n        60,\n        246,\n        104,\n        79,\n        159,\n        243\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"insurance_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"insurance_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  105,\n                  110,\n                  115,\n                  117,\n                  114,\n                  97,\n                  110,\n                  99,\n                  101,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"dst_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_account_close\",\n      \"docs\": [\n        \"(account authority) Close a marginfi account. Requires all balances to be empty and no\",\n        \"active flags (disabled, flashloan, receivership).\"\n      ],\n      \"discriminator\": [\n        186,\n        221,\n        93,\n        34,\n        50,\n        97,\n        194,\n        241\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_close_liq_record\",\n      \"docs\": [\n        \"(permissionless) Close a liquidation record PDA and return rent to the original payer.\",\n        \"Rent always goes to `record_payer`. Fails if the account is in receivership or deleverage.\"\n      ],\n      \"discriminator\": [\n        187,\n        222,\n        41,\n        134,\n        102,\n        10,\n        112,\n        147\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"liquidation_record\"\n          ]\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"record_payer\",\n          \"docs\": [\n            \"The wallet that originally paid to create this record.\",\n            \"Rent is returned here via Anchor's `close` constraint.\"\n          ],\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_close_order\",\n      \"docs\": [\n        \"(user) Close an existing Order, returning rent to the user\"\n      ],\n      \"discriminator\": [\n        212,\n        223,\n        79,\n        182,\n        172,\n        183,\n        205,\n        237\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"order\"\n          ]\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"order\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_recipient\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_end_execute_order\",\n      \"docs\": [\n        \"(permissionless keeper) End Order execution\",\n        \"* Closes the Order (keeper keeps the rent)\",\n        \"* Closes the borrow position involved in the Order, the lending position remains open\",\n        \"* User health must be \\\"unchanged\\\" (within Order requirements i.e. minus slippage). Keeper\",\n        \"may keep any slippage in excess of what was needed to complete the Order as profit.\",\n        \"* `StartExecuteOrder` must appear earlier in the tx\",\n        \"* Must appear last in the tx\",\n        \"* CPI is forbidden\",\n        \"* Returns rent for ephemeral accounts created during `StartExecuteOrder`\"\n      ],\n      \"discriminator\": [\n        115,\n        42,\n        20,\n        93,\n        121,\n        84,\n        178,\n        83\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"The account owning the order\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"order\"\n          ]\n        },\n        {\n          \"name\": \"executor\",\n          \"docs\": [\n            \"The executioner \\u2620\\ufe0f\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"execute_record\"\n          ]\n        },\n        {\n          \"name\": \"fee_recipient\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"order\",\n          \"writable\": true,\n          \"relations\": [\n            \"execute_record\"\n          ]\n        },\n        {\n          \"name\": \"execute_record\",\n          \"docs\": [\n            \"This keeps track of the relevant state to be checked at the end of execution.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_init_liq_record\",\n      \"docs\": [\n        \"(permissionless) Initialize a liquidation record PDA for a marginfi account. The fee_payer\",\n        \"pays rent; the record is required for receivership liquidation.\"\n      ],\n      \"discriminator\": [\n        236,\n        213,\n        238,\n        126,\n        147,\n        251,\n        164,\n        8\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  95,\n                  114,\n                  101,\n                  99,\n                  111,\n                  114,\n                  100\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_account\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_initialize\",\n      \"docs\": [\n        \"Initialize a marginfi account for a given group. The account is a fresh keypair, and must\",\n        \"sign. If you are a CPI caller, consider using `marginfi_account_initialize_pda` instead, or\",\n        \"create the account manually and use `transfer_to_new_account` to gift it to the owner you\",\n        \"wish.\"\n      ],\n      \"discriminator\": [\n        43,\n        78,\n        61,\n        255,\n        148,\n        52,\n        249,\n        154\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\"\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_initialize_pda\",\n      \"docs\": [\n        \"The same as `marginfi_account_initialize`, except the created marginfi account uses a PDA\",\n        \"(Program Derived Address)\",\n        \"\",\n        \"seeds:\",\n        \"- marginfi_group\",\n        \"- authority: The account authority (owner)\",\n        \"- account_index: A u16 value to allow multiple accounts per authority\",\n        \"- third_party_id: Optional u16 for third-party tagging. Seeds < PDA_FREE_THRESHOLD can be\",\n        \"used freely. For a dedicated seed used by just your program (via CPI), contact us.\"\n      ],\n      \"discriminator\": [\n        87,\n        177,\n        91,\n        80,\n        218,\n        119,\n        245,\n        31\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\"\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  109,\n                  97,\n                  114,\n                  103,\n                  105,\n                  110,\n                  102,\n                  105,\n                  95,\n                  97,\n                  99,\n                  99,\n                  111,\n                  117,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"marginfi_group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"authority\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"account_index\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"third_party_id.unwrap_or(0)\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"instructions_sysvar\",\n          \"docs\": [\n            \"Instructions sysvar for CPI validation\",\n            \"\"\n          ],\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"account_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"third_party_id\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_account_keeper_close_order\",\n      \"docs\": [\n        \"(permissionless keeper) Close an existing Order after the user account was closed, or it no\",\n        \"longer has the associated positions, or the user has executed\",\n        \"`marginfi_account_set_keeper_close_flags`. Keeper keeps the rent.\"\n      ],\n      \"discriminator\": [\n        128,\n        114,\n        71,\n        46,\n        194,\n        71,\n        186,\n        106\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"marginfi account was closed.\",\n            \"The ownership check is checked in the handler or/and type checks are made in the handler.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"order\"\n          ]\n        },\n        {\n          \"name\": \"fee_recipient\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"order\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_place_order\",\n      \"docs\": [\n        \"(user) Create a new Order.\",\n        \"* bank_keys - Currently only two keys: the lending position and borrowing position in the\",\n        \"users's Balances for which the order is being placed\",\n        \"* trigger - the type of order (stop loss, take profit, or both), and the threshold at which\",\n        \"to trigger the order, in dollars\"\n      ],\n      \"discriminator\": [\n        244,\n        112,\n        75,\n        138,\n        143,\n        108,\n        7,\n        186\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"order\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_keys\",\n          \"type\": {\n            \"vec\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"trigger\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderTrigger\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_account_set_freeze\",\n      \"docs\": [\n        \"(admin only) Freeze or unfreeze a marginfi account. Frozen accounts can only be operated on\",\n        \"by the group admin.\"\n      ],\n      \"discriminator\": [\n        199,\n        179,\n        231,\n        30,\n        138,\n        247,\n        110,\n        227\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"frozen\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_account_set_keeper_close_flags\",\n      \"docs\": [\n        \"(user) Purge flags from some balances, enabling a Keeper to call\",\n        \"`marginfi_account_keeper_close_order` on associated Orders. Typically, use\",\n        \"`marginfi_account_close_order` instead if trying to close an Order.\"\n      ],\n      \"discriminator\": [\n        82,\n        163,\n        165,\n        222,\n        212,\n        255,\n        33,\n        210\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_keys_opt\",\n          \"type\": {\n            \"option\": {\n              \"vec\": \"pubkey\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_account_start_execute_order\",\n      \"docs\": [\n        \"(permissionless keeper) Begin Order execution\",\n        \"* Enables the Keeper to withdraw/repay associated positions until the end of the tx\",\n        \"* Only one `StartExecuteOrder` is allowed per tx\",\n        \"* Must appear before `EndExecuteOrder` in the tx, and before any instructions except certain\",\n        \"allowed ones (compute budget, kamino refresh, etc)\",\n        \"* `EndExecuteOrder` must also appear in the tx\",\n        \"* CPI is forbidden\",\n        \"* Costs a small amount of rent, which is returned at the end of the tx, make sure you have\",\n        \"enough SOL to start the tx.\"\n      ],\n      \"discriminator\": [\n        1,\n        70,\n        140,\n        134,\n        183,\n        29,\n        208,\n        224\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"The account owning the order\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"order\"\n          ]\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"executor\",\n          \"docs\": [\n            \"This account will have the authority to withdraw/repay as if they are the user authority\",\n            \"until the end of the tx.\",\n            \"\"\n          ]\n        },\n        {\n          \"name\": \"order\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"execute_record\",\n          \"docs\": [\n            \"This keeps track of the relevant state to be checked at the end of execution.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  101,\n                  120,\n                  101,\n                  99,\n                  117,\n                  116,\n                  101,\n                  95,\n                  111,\n                  114,\n                  100,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"order\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"instruction_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_account_update_emissions_destination_account\",\n      \"docs\": [\n        \"(account authority) Set the wallet whose canonical ATA will receive off-chain emissions.\"\n      ],\n      \"discriminator\": [\n        73,\n        185,\n        162,\n        201,\n        111,\n        24,\n        116,\n        185\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"destination_account\",\n          \"docs\": [\n            \"the canonical ATA for each emissions mint.\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"marginfi_group_configure\",\n      \"docs\": [\n        \"(admin only) Configure group admin keys and emode leverage caps. All admin keys must be\",\n        \"provided on every call. Emode leverage caps are set if provided, otherwise the existing\",\n        \"(non-zero) values are kept. Pass `Some(value)` to update, `None` to leave unchanged.\",\n        \"Same-asset emode leverage is disabled by configuring both init and maint leverage to `1`;\",\n        \"values below `1`, including `0`, are invalid.\",\n        \"\",\n        \"Note: `new_emissions_admin` is deprecated and currently has no on-chain effect.\"\n      ],\n      \"discriminator\": [\n        62,\n        199,\n        81,\n        78,\n        33,\n        13,\n        236,\n        61\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_emode_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_curve_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_limit_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_flow_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_emissions_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_metadata_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"new_risk_admin\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        },\n        {\n          \"name\": \"emode_max_init_leverage\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"emode_max_maint_leverage\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"same_asset_emode_init_leverage\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"same_asset_emode_maint_leverage\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"marginfi_group_initialize\",\n      \"docs\": [\n        \"(admin only) Initialize a new marginfi group. The signer becomes the group admin.\"\n      ],\n      \"discriminator\": [\n        255,\n        67,\n        67,\n        26,\n        94,\n        31,\n        34,\n        20\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"panic_pause\",\n      \"docs\": [\n        \"(global_fee_admin or pause_delegate_admin only) Pause the protocol. Auto-expires after 6\",\n        \"hours. Limited to 3 pauses per day and 4 consecutive pauses.\"\n      ],\n      \"discriminator\": [\n        76,\n        164,\n        123,\n        25,\n        4,\n        43,\n        79,\n        165\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"pause_authority\",\n          \"docs\": [\n            \"Global fee admin or the dedicated pause delegate admin.\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"docs\": [\n            \"Global fee state account containing the panic state\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"panic_unpause\",\n      \"docs\": [\n        \"(global_fee_admin only) Unpause the protocol before auto-expiry.\"\n      ],\n      \"discriminator\": [\n        236,\n        107,\n        194,\n        242,\n        99,\n        51,\n        121,\n        128\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"global_fee_admin\",\n          \"docs\": [\n            \"Global fee admin only.\"\n          ],\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"fee_state\"\n          ]\n        },\n        {\n          \"name\": \"fee_state\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"panic_unpause_permissionless\",\n      \"docs\": [\n        \"(permissionless) Unpause the protocol when pause time has expired\"\n      ],\n      \"discriminator\": [\n        245,\n        139,\n        50,\n        159,\n        213,\n        62,\n        91,\n        248\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_state\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"propagate_fee_state\",\n      \"docs\": [\n        \"(Permissionless) Force any group to adopt the current FeeState settings\"\n      ],\n      \"discriminator\": [\n        64,\n        3,\n        166,\n        194,\n        129,\n        21,\n        101,\n        155\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"marginfi_group\",\n          \"docs\": [\n            \"Any group, this ix is permisionless and can propagate the fee to any group\"\n          ],\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"propagate_staked_settings\",\n      \"docs\": [\n        \"(permissionless) Propagate updated staked settings to a staked collateral bank.\"\n      ],\n      \"discriminator\": [\n        210,\n        30,\n        152,\n        69,\n        130,\n        99,\n        222,\n        170\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"relations\": [\n            \"staked_settings\"\n          ]\n        },\n        {\n          \"name\": \"staked_settings\"\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"purge_deleverage_balance\",\n      \"docs\": [\n        \"(risk admin only) Purge a user's lending balance on a bank being sunset, without paying the\",\n        \"user anything. Only usable after all the debt has been settled on a bank in deleveraging\",\n        \"mode, i.e. `TOKENLESS_REPAYMENTS_ALLOWED` and `TOKENLESS_REPAYMENTS_COMPLETE`. Used to clear\",\n        \"abandoned lending positions in a now-worthless bank so it can be closed via\",\n        \"`lending_pool_close_bank`.\"\n      ],\n      \"discriminator\": [\n        132,\n        187,\n        25,\n        149,\n        181,\n        59,\n        253,\n        136\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"risk_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"resize_global_fee_state\",\n      \"docs\": [\n        \"(permissionless) Resize the fee-state account to the v2 layout size; `payer` funds the\",\n        \"added rent.\"\n      ],\n      \"discriminator\": [\n        141,\n        111,\n        97,\n        79,\n        111,\n        143,\n        77,\n        159\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_state\",\n          \"docs\": [\n            \"Not an AccountLoader so an undersized fee state can still be resized under the future\",\n            \"(larger-struct) program.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Funds the rent for the added account space.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"solend_deposit\",\n      \"docs\": [\n        \"(user) Deposit into a Solend reserve through a marginfi account\",\n        \"* amount - in the underlying token (e.g., USDC), in native decimals\"\n      ],\n      \"discriminator\": [\n        56,\n        127,\n        176,\n        148,\n        12,\n        25,\n        3,\n        24\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"Owned by authority, the source account for the token deposit.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The bank's liquidity vault authority, which owns the Solend obligation\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit tokens into Solend\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The Solend obligation account\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\",\n          \"docs\": [\n            \"Derived from the lending market\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Solend reserve that holds liquidity\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC)\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"docs\": [\n            \"Reserve's liquidity supply SPL Token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's mint for cTokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_supply\",\n          \"docs\": [\n            \"The reserve's collateral supply account (where cTokens are stored)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_collateral\",\n          \"docs\": [\n            \"The user's destination for cTokens (collateral). This is a temporary account owned by\",\n            \"liquidity_vault_authority that will hold cTokens between deposit and obligation update.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"pyth_price\",\n          \"docs\": [\n            \"Oracle accounts - required by Solend even if not actively used\"\n          ]\n        },\n        {\n          \"name\": \"switchboard_feed\"\n        },\n        {\n          \"name\": \"solend_program\",\n          \"address\": \"So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"solend_init_obligation\",\n      \"docs\": [\n        \"(permissionless) Initialize a Solend obligation for a marginfi bank\",\n        \"Requires a minimum deposit to ensure the obligation remains active\",\n        \"* amount - minimum deposit amount (at least 10 units) in native decimals\"\n      ],\n      \"discriminator\": [\n        81,\n        96,\n        123,\n        149,\n        218,\n        116,\n        235,\n        196\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_payer\",\n          \"docs\": [\n            \"Pays to init the obligation and pays a nominal amount to ensure the obligation has a\",\n            \"non-zero balance.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\"\n        },\n        {\n          \"name\": \"signer_token_account\",\n          \"docs\": [\n            \"The fee payer must provide a nominal amount of bank tokens so the obligation is not empty.\",\n            \"This amount is irrecoverable and will prevent the obligation from ever being closed.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"docs\": [\n            \"The liquidity vault authority (PDA that will own the Solend obligation)\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"docs\": [\n            \"Used as an intermediary to deposit a nominal amount of token into the obligation.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  111,\n                  108,\n                  101,\n                  110,\n                  100,\n                  95,\n                  111,\n                  98,\n                  108,\n                  105,\n                  103,\n                  97,\n                  116,\n                  105,\n                  111,\n                  110\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          },\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\",\n          \"docs\": [\n            \"Derived from the lending market\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC)\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's mint for cTokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_supply\",\n          \"docs\": [\n            \"The reserve's collateral supply account (where cTokens are stored)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_collateral\",\n          \"docs\": [\n            \"The user's destination for cTokens (collateral). This is a temporary account owned by\",\n            \"liquidity_vault_authority that will hold cTokens between deposit and obligation update.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"pyth_price\",\n          \"docs\": [\n            \"Oracle accounts - required by Solend even if not actively used\"\n          ]\n        },\n        {\n          \"name\": \"switchboard_feed\"\n        },\n        {\n          \"name\": \"solend_program\",\n          \"address\": \"So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"rent\",\n          \"address\": \"SysvarRent111111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"solend_withdraw\",\n      \"docs\": [\n        \"(user) Withdraw from a Solend reserve through a marginfi account\",\n        \"* amount - in collateral tokens (cTokens), in native decimals\",\n        \"* if group rate limits are enabled, include the withdrawn bank's oracle group in\",\n        \"`remaining_accounts`\",\n        \"* withdraw_all - withdraw entire position if true\"\n      ],\n      \"discriminator\": [\n        238,\n        144,\n        170,\n        199,\n        21,\n        72,\n        155,\n        36\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\",\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"docs\": [\n            \"Token account that will receive the withdrawn tokens. Mint/owner are validated by the\",\n            \"SPL transfer; the caller controls the destination.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_2\",\n          \"docs\": [\n            \"The Solend obligation account\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"lending_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market_authority\",\n          \"docs\": [\n            \"Derived from the lending market\"\n          ]\n        },\n        {\n          \"name\": \"integration_acc_1\",\n          \"docs\": [\n            \"The Solend reserve that holds liquidity\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"mint\",\n          \"docs\": [\n            \"Bank's liquidity token mint (e.g., USDC)\"\n          ],\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"docs\": [\n            \"Reserve's liquidity supply SPL Token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"docs\": [\n            \"The reserve's mint for cTokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_supply\",\n          \"docs\": [\n            \"The reserve's collateral supply account (where cTokens are stored)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_collateral\",\n          \"docs\": [\n            \"The user's destination for cTokens (collateral). This is a temporary account owned by\",\n            \"liquidity_vault_authority that holds cTokens.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"solend_program\",\n          \"address\": \"So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_all\",\n          \"type\": {\n            \"option\": \"bool\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"start_deleverage\",\n      \"docs\": [\n        \"(risk_admin only) Begin forced deleverage on an account. Similar to start_liquidation but\",\n        \"does not require the account to be unhealthy.\"\n      ],\n      \"discriminator\": [\n        10,\n        138,\n        10,\n        57,\n        40,\n        232,\n        182,\n        193\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"Account to deleverage\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"docs\": [\n            \"The associated liquidation record PDA for the given `marginfi_account`\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"risk_admin\",\n          \"docs\": [\n            \"The risk admin will have the authority to withdraw/repay as if they are the user authority\",\n            \"until the end of the tx.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"instruction_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"start_liquidation\",\n      \"docs\": [\n        \"(permissionless) Begin receivership liquidation on an unhealthy account. Snapshots health\",\n        \"and marks the account in receivership. Must have `end_liquidation` as the last ix in the tx.\"\n      ],\n      \"discriminator\": [\n        244,\n        93,\n        90,\n        214,\n        192,\n        166,\n        191,\n        21\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_account\",\n          \"docs\": [\n            \"Account under liquidation\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidation_record\",\n          \"docs\": [\n            \"The associated liquidation record PDA for the given `marginfi_account`\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"liquidation_receiver\",\n          \"docs\": [\n            \"This account will have the authority to withdraw/repay as if they are the user authority\",\n            \"until the end of the tx.\",\n            \"\"\n          ]\n        },\n        {\n          \"name\": \"instruction_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"super_admin_deposit\",\n      \"docs\": [\n        \"(primary admin only) Deposit directly into a bank liquidity vault and raise\",\n        \"`asset_share_value` proportionally. No marginfi account is involved.\"\n      ],\n      \"discriminator\": [\n        241,\n        189,\n        199,\n        17,\n        207,\n        225,\n        64,\n        75\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"super_admin_withdraw\",\n      \"docs\": [\n        \"(primary admin only) Withdraw directly from a bank liquidity vault and lower\",\n        \"`asset_share_value` proportionally. No marginfi account is involved.\"\n      ],\n      \"discriminator\": [\n        202,\n        67,\n        85,\n        126,\n        104,\n        138,\n        79,\n        197\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"destination_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_vault_authority\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108,\n                  105,\n                  113,\n                  117,\n                  105,\n                  100,\n                  105,\n                  116,\n                  121,\n                  95,\n                  118,\n                  97,\n                  117,\n                  108,\n                  116,\n                  95,\n                  97,\n                  117,\n                  116,\n                  104\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"liquidity_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"sync_indexer_flags\",\n      \"docs\": [\n        \"(Permissionless) Batch-sync balance-derived indexer flags for existing accounts.\",\n        \"Pass MarginfiAccounts as writable remaining_accounts.\"\n      ],\n      \"discriminator\": [\n        171,\n        146,\n        145,\n        43,\n        190,\n        175,\n        9,\n        32\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"transfer_to_new_account\",\n      \"docs\": [\n        \"(account authority) Transfer all positions to a new account under a new authority. The old\",\n        \"account is disabled. Pays a flat SOL fee to the protocol.\"\n      ],\n      \"discriminator\": [\n        28,\n        79,\n        129,\n        231,\n        169,\n        69,\n        69,\n        65\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"old_marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"old_marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"new_marginfi_account\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"new_authority\"\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"transfer_to_new_account_pda\",\n      \"docs\": [\n        \"(account authority) Same as `transfer_to_new_account` except the resulting account is a PDA\",\n        \"\",\n        \"seeds:\",\n        \"- marginfi_group\",\n        \"- authority: The account authority (owner)\",\n        \"- account_index: A u16 value to allow multiple accounts per authority\",\n        \"- third_party_id: Optional u16 for third-party tagging. Seeds < PDA_FREE_THRESHOLD can be\",\n        \"used freely. For a dedicated seed used by just your program (via CPI), contact us.\"\n      ],\n      \"discriminator\": [\n        172,\n        210,\n        224,\n        220,\n        146,\n        212,\n        253,\n        49\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"old_marginfi_account\"\n          ]\n        },\n        {\n          \"name\": \"old_marginfi_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"new_marginfi_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  109,\n                  97,\n                  114,\n                  103,\n                  105,\n                  110,\n                  102,\n                  105,\n                  95,\n                  97,\n                  99,\n                  99,\n                  111,\n                  117,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"new_authority\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"account_index\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"third_party_id.unwrap_or(0)\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"new_authority\"\n        },\n        {\n          \"name\": \"global_fee_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_state\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102,\n                  101,\n                  101,\n                  115,\n                  116,\n                  97,\n                  116,\n                  101\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"instructions_sysvar\",\n          \"docs\": [\n            \"Instructions sysvar for CPI validation\"\n          ],\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"account_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"third_party_id\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_deleverage_withdrawals\",\n      \"docs\": [\n        \"(delegate_flow_admin only) Update the deleverage daily withdraw outflow with\",\n        \"aggregated data. The delegate flow admin aggregates\",\n        \"`DeleverageWithdrawFlowEvent` events off-chain and calls this instruction at intervals.\"\n      ],\n      \"discriminator\": [\n        56,\n        3,\n        181,\n        118,\n        27,\n        247,\n        207,\n        227\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"delegate_flow_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"outflow_usd\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"update_seq\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"event_start_slot\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"event_end_slot\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_group_rate_limiter\",\n      \"docs\": [\n        \"(delegate_flow_admin only) Update the group rate limiter with aggregated\",\n        \"inflow/outflow. The delegate flow admin aggregates\",\n        \"`RateLimitFlowEvent` events off-chain, converts to USD, and calls this instruction at\",\n        \"intervals to update group rate limiter state.\"\n      ],\n      \"discriminator\": [\n        23,\n        78,\n        60,\n        139,\n        187,\n        44,\n        129,\n        37\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"marginfi_group\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"delegate_flow_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"marginfi_group\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"outflow_usd\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"inflow_usd\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"update_seq\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"event_start_slot\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"event_end_slot\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"write_bank_metadata\",\n      \"docs\": [\n        \"(metadata admin only) Write ticker/description for an initialized bank. The bank account\",\n        \"must exist; when its seed is on-chain, the canonical PDA is verified.\"\n      ],\n      \"discriminator\": [\n        147,\n        78,\n        81,\n        133,\n        129,\n        138,\n        233,\n        59\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\",\n          \"relations\": [\n            \"bank\"\n          ]\n        },\n        {\n          \"name\": \"bank\",\n          \"docs\": [\n            \"Must be initialized. The metadata-to-bank binding is enforced by `metadata.has_one = bank`,\",\n            \"and `bank.has_one = group` ties this bank to the admin's group.\"\n          ],\n          \"relations\": [\n            \"metadata\"\n          ]\n        },\n        {\n          \"name\": \"metadata_admin\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"metadata\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"ticker\",\n          \"type\": {\n            \"option\": \"bytes\"\n          }\n        },\n        {\n          \"name\": \"description\",\n          \"type\": {\n            \"option\": \"bytes\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"write_bank_metadata_pre_init\",\n      \"docs\": [\n        \"(metadata admin only) Write ticker/description before bank initialization, for canonical\",\n        \"seeded banks only.\"\n      ],\n      \"discriminator\": [\n        224,\n        124,\n        22,\n        73,\n        60,\n        209,\n        80,\n        170\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"group\"\n        },\n        {\n          \"name\": \"bank_mint\"\n        },\n        {\n          \"name\": \"bank\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"group\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"bank_mint\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"bank_seed\"\n              }\n            ]\n          },\n          \"relations\": [\n            \"metadata\"\n          ]\n        },\n        {\n          \"name\": \"metadata_admin\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"group\"\n          ]\n        },\n        {\n          \"name\": \"metadata\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bank_seed\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"ticker\",\n          \"type\": {\n            \"option\": \"bytes\"\n          }\n        },\n        {\n          \"name\": \"description\",\n          \"type\": {\n            \"option\": \"bytes\"\n          }\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"Bank\",\n      \"discriminator\": [\n        142,\n        49,\n        166,\n        242,\n        50,\n        66,\n        97,\n        188\n      ]\n    },\n    {\n      \"name\": \"BankMetadata\",\n      \"discriminator\": [\n        49,\n        207,\n        31,\n        34,\n        67,\n        225,\n        169,\n        186\n      ]\n    },\n    {\n      \"name\": \"ExecuteOrderRecord\",\n      \"discriminator\": [\n        6,\n        100,\n        107,\n        60,\n        164,\n        226,\n        56,\n        97\n      ]\n    },\n    {\n      \"name\": \"FeeState\",\n      \"discriminator\": [\n        63,\n        224,\n        16,\n        85,\n        193,\n        36,\n        235,\n        220\n      ]\n    },\n    {\n      \"name\": \"LiquidationRecord\",\n      \"discriminator\": [\n        95,\n        116,\n        23,\n        132,\n        89,\n        210,\n        245,\n        162\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccount\",\n      \"discriminator\": [\n        67,\n        178,\n        130,\n        109,\n        126,\n        114,\n        28,\n        42\n      ]\n    },\n    {\n      \"name\": \"MarginfiGroup\",\n      \"discriminator\": [\n        182,\n        23,\n        173,\n        240,\n        151,\n        206,\n        182,\n        67\n      ]\n    },\n    {\n      \"name\": \"Order\",\n      \"discriminator\": [\n        134,\n        173,\n        223,\n        185,\n        77,\n        86,\n        28,\n        51\n      ]\n    },\n    {\n      \"name\": \"SameAssetEmodeRegistry\",\n      \"discriminator\": [\n        222,\n        21,\n        195,\n        149,\n        193,\n        72,\n        219,\n        31\n      ]\n    },\n    {\n      \"name\": \"StakedSettings\",\n      \"discriminator\": [\n        157,\n        140,\n        6,\n        77,\n        89,\n        173,\n        173,\n        125\n      ]\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"AdminCloseAccountEvent\",\n      \"discriminator\": [\n        166,\n        92,\n        180,\n        81,\n        158,\n        251,\n        225,\n        73\n      ]\n    },\n    {\n      \"name\": \"CircuitBreakerAutoBrokenEvent\",\n      \"discriminator\": [\n        104,\n        30,\n        251,\n        194,\n        213,\n        139,\n        21,\n        230\n      ]\n    },\n    {\n      \"name\": \"CircuitBreakerClearedEvent\",\n      \"discriminator\": [\n        97,\n        244,\n        85,\n        48,\n        246,\n        155,\n        29,\n        219\n      ]\n    },\n    {\n      \"name\": \"CircuitBreakerTrippedEvent\",\n      \"discriminator\": [\n        112,\n        68,\n        182,\n        85,\n        54,\n        184,\n        4,\n        134\n      ]\n    },\n    {\n      \"name\": \"DeleverageEvent\",\n      \"discriminator\": [\n        161,\n        8,\n        108,\n        204,\n        209,\n        198,\n        12,\n        30\n      ]\n    },\n    {\n      \"name\": \"DeleverageWithdrawFlowEvent\",\n      \"discriminator\": [\n        109,\n        90,\n        139,\n        200,\n        10,\n        204,\n        84,\n        176\n      ]\n    },\n    {\n      \"name\": \"DriftClaimBadDebtEvent\",\n      \"discriminator\": [\n        20,\n        106,\n        26,\n        156,\n        28,\n        116,\n        250,\n        172\n      ]\n    },\n    {\n      \"name\": \"EditStakedSettingsEvent\",\n      \"discriminator\": [\n        29,\n        58,\n        155,\n        191,\n        75,\n        220,\n        145,\n        206\n      ]\n    },\n    {\n      \"name\": \"HealthPulseEvent\",\n      \"discriminator\": [\n        183,\n        159,\n        218,\n        110,\n        61,\n        220,\n        65,\n        1\n      ]\n    },\n    {\n      \"name\": \"KeeperCloseOrderEvent\",\n      \"discriminator\": [\n        46,\n        152,\n        11,\n        174,\n        92,\n        157,\n        77,\n        64\n      ]\n    },\n    {\n      \"name\": \"LendingAccountBorrowEvent\",\n      \"discriminator\": [\n        223,\n        96,\n        81,\n        10,\n        156,\n        99,\n        26,\n        59\n      ]\n    },\n    {\n      \"name\": \"LendingAccountDepositEvent\",\n      \"discriminator\": [\n        161,\n        54,\n        237,\n        217,\n        105,\n        248,\n        122,\n        151\n      ]\n    },\n    {\n      \"name\": \"LendingAccountLiquidateEvent\",\n      \"discriminator\": [\n        166,\n        160,\n        249,\n        154,\n        183,\n        39,\n        23,\n        242\n      ]\n    },\n    {\n      \"name\": \"LendingAccountRepayEvent\",\n      \"discriminator\": [\n        16,\n        220,\n        55,\n        111,\n        7,\n        80,\n        16,\n        25\n      ]\n    },\n    {\n      \"name\": \"LendingAccountWithdrawEvent\",\n      \"discriminator\": [\n        3,\n        220,\n        148,\n        243,\n        33,\n        249,\n        54,\n        88\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankAccrueInterestEvent\",\n      \"discriminator\": [\n        104,\n        117,\n        187,\n        156,\n        111,\n        154,\n        106,\n        186\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankCollectFeesEvent\",\n      \"discriminator\": [\n        101,\n        119,\n        97,\n        250,\n        169,\n        175,\n        156,\n        253\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureEvent\",\n      \"discriminator\": [\n        246,\n        35,\n        233,\n        110,\n        93,\n        152,\n        235,\n        40\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureFrozenEvent\",\n      \"discriminator\": [\n        24,\n        10,\n        55,\n        18,\n        49,\n        150,\n        157,\n        179\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureOracleEvent\",\n      \"discriminator\": [\n        119,\n        140,\n        110,\n        253,\n        150,\n        64,\n        210,\n        62\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankCreateEvent\",\n      \"discriminator\": [\n        236,\n        220,\n        201,\n        63,\n        239,\n        126,\n        136,\n        249\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankHandleBankruptcyEvent\",\n      \"discriminator\": [\n        166,\n        77,\n        41,\n        140,\n        36,\n        94,\n        10,\n        57\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankSetOraclePriceEvent\",\n      \"discriminator\": [\n        92,\n        180,\n        117,\n        175,\n        131,\n        24,\n        159,\n        141\n      ]\n    },\n    {\n      \"name\": \"LendingPoolBankSetSameAssetEmodeEligibilityEvent\",\n      \"discriminator\": [\n        186,\n        247,\n        119,\n        107,\n        251,\n        215,\n        15,\n        79\n      ]\n    },\n    {\n      \"name\": \"LendingPoolSuperAdminDepositEvent\",\n      \"discriminator\": [\n        99,\n        152,\n        211,\n        30,\n        58,\n        165,\n        210,\n        71\n      ]\n    },\n    {\n      \"name\": \"LendingPoolSuperAdminWithdrawEvent\",\n      \"discriminator\": [\n        107,\n        168,\n        232,\n        181,\n        144,\n        161,\n        252,\n        37\n      ]\n    },\n    {\n      \"name\": \"LiquidationReceiverEvent\",\n      \"discriminator\": [\n        40,\n        131,\n        224,\n        220,\n        151,\n        83,\n        24,\n        230\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccountCloseOrderEvent\",\n      \"discriminator\": [\n        158,\n        34,\n        122,\n        98,\n        23,\n        146,\n        229,\n        212\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccountCreateEvent\",\n      \"discriminator\": [\n        183,\n        5,\n        117,\n        104,\n        122,\n        199,\n        68,\n        51\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccountFreezeEvent\",\n      \"discriminator\": [\n        219,\n        219,\n        57,\n        178,\n        75,\n        86,\n        146,\n        122\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccountPlaceOrderEvent\",\n      \"discriminator\": [\n        1,\n        105,\n        79,\n        28,\n        142,\n        242,\n        99,\n        145\n      ]\n    },\n    {\n      \"name\": \"MarginfiAccountTransferToNewAccount\",\n      \"discriminator\": [\n        59,\n        105,\n        171,\n        110,\n        223,\n        136,\n        80,\n        89\n      ]\n    },\n    {\n      \"name\": \"MarginfiGroupConfigureEvent\",\n      \"discriminator\": [\n        241,\n        104,\n        172,\n        167,\n        41,\n        195,\n        199,\n        170\n      ]\n    },\n    {\n      \"name\": \"MarginfiGroupCreateEvent\",\n      \"discriminator\": [\n        233,\n        125,\n        61,\n        14,\n        98,\n        240,\n        136,\n        253\n      ]\n    },\n    {\n      \"name\": \"RateLimitFlowEvent\",\n      \"discriminator\": [\n        229,\n        5,\n        73,\n        200,\n        0,\n        107,\n        105,\n        109\n      ]\n    },\n    {\n      \"name\": \"SetKeeperCloseFlagsEvent\",\n      \"discriminator\": [\n        193,\n        230,\n        93,\n        128,\n        117,\n        87,\n        96,\n        21\n      ]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"InternalLogicError\",\n      \"msg\": \"Internal Marginfi logic error\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"BankNotFound\",\n      \"msg\": \"Invalid bank index\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"LendingAccountBalanceNotFound\",\n      \"msg\": \"Lending account balance not found\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"BankAssetCapacityExceeded\",\n      \"msg\": \"Bank deposit capacity exceeded\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"InvalidTransfer\",\n      \"msg\": \"Invalid transfer\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"MissingPythOrBankAccount\",\n      \"msg\": \"Missing Oracle, Bank, LST mint, or Sol Pool\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"MissingPythAccount\",\n      \"msg\": \"Missing Pyth account\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"MissingBankAccount\",\n      \"msg\": \"Missing Bank account\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"InvalidBankAccount\",\n      \"msg\": \"Invalid Bank account\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"RiskEngineInitRejected\",\n      \"msg\": \"RiskEngine rejected due to either bad health or stale oracles\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"LendingAccountBalanceSlotsFull\",\n      \"msg\": \"Lending account balance slots are full\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"BankAlreadyExists\",\n      \"msg\": \"Bank already exists\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"ZeroLiquidationAmount\",\n      \"msg\": \"Amount to liquidate must be positive\"\n    },\n    {\n      \"code\": 6013,\n      \"name\": \"AccountNotBankrupt\",\n      \"msg\": \"Account is not bankrupt\"\n    },\n    {\n      \"code\": 6014,\n      \"name\": \"BalanceNotBadDebt\",\n      \"msg\": \"Account balance is not bad debt\"\n    },\n    {\n      \"code\": 6015,\n      \"name\": \"InvalidConfig\",\n      \"msg\": \"Invalid group config\"\n    },\n    {\n      \"code\": 6016,\n      \"name\": \"BankPaused\",\n      \"msg\": \"Bank paused\"\n    },\n    {\n      \"code\": 6017,\n      \"name\": \"BankReduceOnly\",\n      \"msg\": \"Bank is ReduceOnly mode\"\n    },\n    {\n      \"code\": 6018,\n      \"name\": \"BankAccountNotFound\",\n      \"msg\": \"Bank is missing\"\n    },\n    {\n      \"code\": 6019,\n      \"name\": \"OperationDepositOnly\",\n      \"msg\": \"Operation is deposit-only\"\n    },\n    {\n      \"code\": 6020,\n      \"name\": \"OperationWithdrawOnly\",\n      \"msg\": \"Operation is withdraw-only\"\n    },\n    {\n      \"code\": 6021,\n      \"name\": \"OperationBorrowOnly\",\n      \"msg\": \"Operation is borrow-only\"\n    },\n    {\n      \"code\": 6022,\n      \"name\": \"OperationRepayOnly\",\n      \"msg\": \"Operation is repay-only\"\n    },\n    {\n      \"code\": 6023,\n      \"name\": \"NoAssetFound\",\n      \"msg\": \"No asset found\"\n    },\n    {\n      \"code\": 6024,\n      \"name\": \"NoLiabilityFound\",\n      \"msg\": \"No liability found\"\n    },\n    {\n      \"code\": 6025,\n      \"name\": \"InvalidOracleSetup\",\n      \"msg\": \"Invalid oracle setup\"\n    },\n    {\n      \"code\": 6026,\n      \"name\": \"IllegalUtilizationRatio\",\n      \"msg\": \"Invalid bank utilization ratio\"\n    },\n    {\n      \"code\": 6027,\n      \"name\": \"BankLiabilityCapacityExceeded\",\n      \"msg\": \"Bank borrow cap exceeded\"\n    },\n    {\n      \"code\": 6028,\n      \"name\": \"InvalidPrice\",\n      \"msg\": \"Invalid Price\"\n    },\n    {\n      \"code\": 6029,\n      \"name\": \"IsolatedAccountIllegalState\",\n      \"msg\": \"Account can have only one liability when account is under isolated risk\"\n    },\n    {\n      \"code\": 6030,\n      \"name\": \"EmissionsAlreadySetup\",\n      \"msg\": \"Emissions already setup\"\n    },\n    {\n      \"code\": 6031,\n      \"name\": \"OracleNotSetup\",\n      \"msg\": \"Oracle is not set\"\n    },\n    {\n      \"code\": 6032,\n      \"name\": \"InvalidSwitchboardDecimalConversion\",\n      \"msg\": \"Invalid switchboard decimal conversion\"\n    },\n    {\n      \"code\": 6033,\n      \"name\": \"CannotCloseOutstandingEmissions\",\n      \"msg\": \"Cannot close balance because of outstanding emissions\"\n    },\n    {\n      \"code\": 6034,\n      \"name\": \"EmissionsUpdateError\",\n      \"msg\": \"Update emissions error\"\n    },\n    {\n      \"code\": 6035,\n      \"name\": \"AccountDisabled\",\n      \"msg\": \"Account disabled\"\n    },\n    {\n      \"code\": 6036,\n      \"name\": \"AccountTempActiveBalanceLimitExceeded\",\n      \"msg\": \"Account can't temporarily open 3 balances, please close a balance first\"\n    },\n    {\n      \"code\": 6037,\n      \"name\": \"AccountInFlashloan\",\n      \"msg\": \"Illegal action during flashloan\"\n    },\n    {\n      \"code\": 6038,\n      \"name\": \"IllegalFlashloan\",\n      \"msg\": \"Illegal flashloan\"\n    },\n    {\n      \"code\": 6039,\n      \"name\": \"IllegalFlag\",\n      \"msg\": \"Illegal flag\"\n    },\n    {\n      \"code\": 6040,\n      \"name\": \"IllegalBalanceState\",\n      \"msg\": \"Illegal balance state\"\n    },\n    {\n      \"code\": 6041,\n      \"name\": \"IllegalAccountAuthorityTransfer\",\n      \"msg\": \"Illegal account authority transfer\"\n    },\n    {\n      \"code\": 6042,\n      \"name\": \"Unauthorized\",\n      \"msg\": \"Unauthorized\"\n    },\n    {\n      \"code\": 6043,\n      \"name\": \"IllegalAction\",\n      \"msg\": \"Invalid account authority\"\n    },\n    {\n      \"code\": 6044,\n      \"name\": \"T22MintRequired\",\n      \"msg\": \"Token22 Banks require mint account as first remaining account\"\n    },\n    {\n      \"code\": 6045,\n      \"name\": \"InvalidFeeAta\",\n      \"msg\": \"Invalid ATA for global fee account\"\n    },\n    {\n      \"code\": 6046,\n      \"name\": \"AddedStakedPoolManually\",\n      \"msg\": \"Use add pool permissionless instead\"\n    },\n    {\n      \"code\": 6047,\n      \"name\": \"AssetTagMismatch\",\n      \"msg\": \"Staked SOL accounts can only deposit staked assets and borrow SOL\"\n    },\n    {\n      \"code\": 6048,\n      \"name\": \"StakePoolValidationFailed\",\n      \"msg\": \"Stake pool validation failed: check the stake pool, mint, or sol pool\"\n    },\n    {\n      \"code\": 6049,\n      \"name\": \"SwitchboardStalePrice\",\n      \"msg\": \"Switchboard oracle: stale price\"\n    },\n    {\n      \"code\": 6050,\n      \"name\": \"PythPushStalePrice\",\n      \"msg\": \"Pyth Push oracle: stale price\"\n    },\n    {\n      \"code\": 6051,\n      \"name\": \"WrongNumberOfOracleAccounts\",\n      \"msg\": \"Oracle error: wrong number of accounts\"\n    },\n    {\n      \"code\": 6052,\n      \"name\": \"WrongOracleAccountKeys\",\n      \"msg\": \"Oracle error: wrong account keys\"\n    },\n    {\n      \"code\": 6053,\n      \"name\": \"StakeOraclesDisabled\",\n      \"msg\": \"Stake oracles are temporarily disabled\"\n    },\n    {\n      \"code\": 6054,\n      \"name\": \"Vacated3\",\n      \"msg\": \"Vacated3\"\n    },\n    {\n      \"code\": 6055,\n      \"name\": \"OracleMaxConfidenceExceeded\",\n      \"msg\": \"Oracle max confidence exceeded: try again later\"\n    },\n    {\n      \"code\": 6056,\n      \"name\": \"PythPushInsufficientVerificationLevel\",\n      \"msg\": \"Pyth Push oracle: insufficient verification level\"\n    },\n    {\n      \"code\": 6057,\n      \"name\": \"ZeroAssetPrice\",\n      \"msg\": \"Zero asset price\"\n    },\n    {\n      \"code\": 6058,\n      \"name\": \"ZeroLiabilityPrice\",\n      \"msg\": \"Zero liability price\"\n    },\n    {\n      \"code\": 6059,\n      \"name\": \"SwitchboardWrongAccountOwner\",\n      \"msg\": \"Switchboard oracle: wrong account owner\"\n    },\n    {\n      \"code\": 6060,\n      \"name\": \"PythPushInvalidAccount\",\n      \"msg\": \"Pyth Push oracle: invalid account\"\n    },\n    {\n      \"code\": 6061,\n      \"name\": \"SwitchboardInvalidAccount\",\n      \"msg\": \"Switchboard oracle: invalid account\"\n    },\n    {\n      \"code\": 6062,\n      \"name\": \"MathError\",\n      \"msg\": \"Math error\"\n    },\n    {\n      \"code\": 6063,\n      \"name\": \"InvalidEmissionsDestinationAccount\",\n      \"msg\": \"Invalid emissions destination account\"\n    },\n    {\n      \"code\": 6064,\n      \"name\": \"SameAssetAndLiabilityBanks\",\n      \"msg\": \"Asset and liability bank cannot be the same\"\n    },\n    {\n      \"code\": 6065,\n      \"name\": \"OverliquidationAttempt\",\n      \"msg\": \"Trying to withdraw more assets than available\"\n    },\n    {\n      \"code\": 6066,\n      \"name\": \"NoLiabilitiesInLiabilityBank\",\n      \"msg\": \"Liability bank has no liabilities\"\n    },\n    {\n      \"code\": 6067,\n      \"name\": \"AssetsInLiabilityBank\",\n      \"msg\": \"Liability bank has assets\"\n    },\n    {\n      \"code\": 6068,\n      \"name\": \"HealthyAccount\",\n      \"msg\": \"Account is healthy and cannot be liquidated\"\n    },\n    {\n      \"code\": 6069,\n      \"name\": \"ExhaustedLiability\",\n      \"msg\": \"Liability payoff too severe, exhausted liability\"\n    },\n    {\n      \"code\": 6070,\n      \"name\": \"TooSeverePayoff\",\n      \"msg\": \"Liability payoff too severe, liability balance has assets\"\n    },\n    {\n      \"code\": 6071,\n      \"name\": \"TooSevereLiquidation\",\n      \"msg\": \"Liquidation too severe, account above maintenance requirement\"\n    },\n    {\n      \"code\": 6072,\n      \"name\": \"WorseHealthPostLiquidation\",\n      \"msg\": \"Liquidation would worsen account health\"\n    },\n    {\n      \"code\": 6073,\n      \"name\": \"IntegrationPositionLimitExceeded\",\n      \"msg\": \"Exceeded the maximum allowed integration positions\"\n    },\n    {\n      \"code\": 6074,\n      \"name\": \"MaxInitLeverageExceeded\",\n      \"msg\": \"Maximum initial leverage exceeded\"\n    },\n    {\n      \"code\": 6075,\n      \"name\": \"BadEmodeConfig\",\n      \"msg\": \"The Emode config was invalid\"\n    },\n    {\n      \"code\": 6076,\n      \"name\": \"PythPushInvalidWindowSize\",\n      \"msg\": \"TWAP window size does not match expected duration\"\n    },\n    {\n      \"code\": 6077,\n      \"name\": \"InvalidFeesDestinationAccount\",\n      \"msg\": \"Invalid fees destination account\"\n    },\n    {\n      \"code\": 6078,\n      \"name\": \"BankCannotClose\",\n      \"msg\": \"Banks cannot close when they have open positions or emissions outstanding\"\n    },\n    {\n      \"code\": 6079,\n      \"name\": \"AccountAlreadyMigrated\",\n      \"msg\": \"Account already migrated\"\n    },\n    {\n      \"code\": 6080,\n      \"name\": \"ProtocolPaused\",\n      \"msg\": \"Protocol is paused\"\n    },\n    {\n      \"code\": 6081,\n      \"name\": \"MetadataTooLong\",\n      \"msg\": \"Metadata is too long\"\n    },\n    {\n      \"code\": 6082,\n      \"name\": \"PauseLimitExceeded\",\n      \"msg\": \"Pause limit exceeded\"\n    },\n    {\n      \"code\": 6083,\n      \"name\": \"ProtocolNotPaused\",\n      \"msg\": \"Protocol is not paused\"\n    },\n    {\n      \"code\": 6084,\n      \"name\": \"BankKilledByBankruptcy\",\n      \"msg\": \"Bank killed by bankruptcy: bank shutdown and value of all holdings is zero\"\n    },\n    {\n      \"code\": 6085,\n      \"name\": \"UnexpectedLiquidationState\",\n      \"msg\": \"Liquidation state issue. Check start before end, end last, and both unique\"\n    },\n    {\n      \"code\": 6086,\n      \"name\": \"StartNotFirst\",\n      \"msg\": \"Liquidation start must be first instruction (other than compute program ixes)\"\n    },\n    {\n      \"code\": 6087,\n      \"name\": \"StartRepeats\",\n      \"msg\": \"Only one liquidation event allowed per tx\"\n    },\n    {\n      \"code\": 6088,\n      \"name\": \"EndNotLast\",\n      \"msg\": \"The end instruction must be the last ix in the tx\"\n    },\n    {\n      \"code\": 6089,\n      \"name\": \"ForbiddenIx\",\n      \"msg\": \"Tried to call an instruction that is forbidden during liquidation\"\n    },\n    {\n      \"code\": 6090,\n      \"name\": \"LiquidationPremiumTooHigh\",\n      \"msg\": \"Seized too much of the asset relative to liability repaid\"\n    },\n    {\n      \"code\": 6091,\n      \"name\": \"NotAllowedInCPI\",\n      \"msg\": \"Start and end liquidation and flashloan must be top-level instructions\"\n    },\n    {\n      \"code\": 6092,\n      \"name\": \"ZeroSupplyInStakePool\",\n      \"msg\": \"Stake pool supply is zero: cannot compute price\"\n    },\n    {\n      \"code\": 6093,\n      \"name\": \"InvalidGroup\",\n      \"msg\": \"Invalid group: account constraint violated\"\n    },\n    {\n      \"code\": 6094,\n      \"name\": \"InvalidLiquidityVault\",\n      \"msg\": \"Invalid liquidity vault: account constraint violated\"\n    },\n    {\n      \"code\": 6095,\n      \"name\": \"InvalidLiquidationRecord\",\n      \"msg\": \"Invalid liquidation record: account constraint violated\"\n    },\n    {\n      \"code\": 6096,\n      \"name\": \"InvalidLiquidationReceiver\",\n      \"msg\": \"Invalid liquidation receiver: account constraint violated\"\n    },\n    {\n      \"code\": 6097,\n      \"name\": \"InvalidEmissionsMint\",\n      \"msg\": \"Invalid emissions mint: account constraint violated\"\n    },\n    {\n      \"code\": 6098,\n      \"name\": \"InvalidMint\",\n      \"msg\": \"Invalid mint: account constraint violated\"\n    },\n    {\n      \"code\": 6099,\n      \"name\": \"InvalidFeeWallet\",\n      \"msg\": \"Invalid fee wallet: account constraint violated\"\n    },\n    {\n      \"code\": 6100,\n      \"name\": \"FixedOraclePriceNegative\",\n      \"msg\": \"Fixed oracle price must be zero or greater\"\n    },\n    {\n      \"code\": 6101,\n      \"name\": \"DailyWithdrawalLimitExceeded\",\n      \"msg\": \"Daily withdrawal limit exceeded: try again later\"\n    },\n    {\n      \"code\": 6102,\n      \"name\": \"ZeroWithdrawalLimit\",\n      \"msg\": \"Cannot set daily withdrawal limit to zero\"\n    },\n    {\n      \"code\": 6103,\n      \"name\": \"AccountFrozen\",\n      \"msg\": \"Account is frozen by the group admin\"\n    },\n    {\n      \"code\": 6104,\n      \"name\": \"DuplicateBalance\",\n      \"msg\": \"Cannot reference duplicate balances\"\n    },\n    {\n      \"code\": 6105,\n      \"name\": \"InvalidBalanceCount\",\n      \"msg\": \"Invalid amount of balances referenced\"\n    },\n    {\n      \"code\": 6106,\n      \"name\": \"LiquidatorOrderCloseNotAllowed\",\n      \"msg\": \"Liquidator not allowed to close order\"\n    },\n    {\n      \"code\": 6107,\n      \"name\": \"OrderTriggerNotMet\",\n      \"msg\": \"Order trigger is yet to be met\"\n    },\n    {\n      \"code\": 6108,\n      \"name\": \"UnexpectedOrderExecutionState\",\n      \"msg\": \"Order execution state issue. Check not in flashloan, disabled, etc\"\n    },\n    {\n      \"code\": 6109,\n      \"name\": \"OrderLiabilityNotClosed\",\n      \"msg\": \"Order liability not closed\"\n    },\n    {\n      \"code\": 6110,\n      \"name\": \"InvalidAssetOrLiabilitiesCount\",\n      \"msg\": \"Invalid asset or liabilities count\"\n    },\n    {\n      \"code\": 6111,\n      \"name\": \"WorseHealthPostExecution\",\n      \"msg\": \"Account health can only worsen if account is healthy\"\n    },\n    {\n      \"code\": 6112,\n      \"name\": \"InvalidOrderTakeProfitOrStopLoss\",\n      \"msg\": \"TP must be > 0, SL must be > 0 and TP > SL if both are set\"\n    },\n    {\n      \"code\": 6113,\n      \"name\": \"InvalidSlippage\",\n      \"msg\": \"Max slippage must be less than 100%\"\n    },\n    {\n      \"code\": 6114,\n      \"name\": \"OrderExecutionOverWithdrawal\",\n      \"msg\": \"Executor withdrew too much: slippage or max fee constraint violated\"\n    },\n    {\n      \"code\": 6115,\n      \"name\": \"BankHourlyRateLimitExceeded\",\n      \"msg\": \"Bank hourly rate limit exceeded: try again later\"\n    },\n    {\n      \"code\": 6116,\n      \"name\": \"BankDailyRateLimitExceeded\",\n      \"msg\": \"Bank daily rate limit exceeded: try again later\"\n    },\n    {\n      \"code\": 6117,\n      \"name\": \"GroupHourlyRateLimitExceeded\",\n      \"msg\": \"Group hourly rate limit exceeded: try again later\"\n    },\n    {\n      \"code\": 6118,\n      \"name\": \"GroupDailyRateLimitExceeded\",\n      \"msg\": \"Group daily rate limit exceeded: try again later\"\n    },\n    {\n      \"code\": 6119,\n      \"name\": \"InvalidRateLimitPrice\",\n      \"msg\": \"Invalid rate limit price: pass oracle or pre-crank cache\"\n    },\n    {\n      \"code\": 6120,\n      \"name\": \"GroupRateLimiterUpdateEmpty\",\n      \"msg\": \"Group rate limiter admin update must include inflow and/or outflow\"\n    },\n    {\n      \"code\": 6121,\n      \"name\": \"GroupRateLimiterUpdateInvalidSlotRange\",\n      \"msg\": \"Group rate limiter admin update slot range is invalid\"\n    },\n    {\n      \"code\": 6122,\n      \"name\": \"GroupRateLimiterUpdateFutureSlot\",\n      \"msg\": \"Group rate limiter admin update cannot reference future slots\"\n    },\n    {\n      \"code\": 6123,\n      \"name\": \"GroupRateLimiterUpdateStale\",\n      \"msg\": \"Group rate limiter admin update is too stale\"\n    },\n    {\n      \"code\": 6124,\n      \"name\": \"GroupRateLimiterUpdateOutOfOrderSlot\",\n      \"msg\": \"Group rate limiter admin update slot progression is out of order\"\n    },\n    {\n      \"code\": 6125,\n      \"name\": \"GroupRateLimiterUpdateOutOfOrderSeq\",\n      \"msg\": \"Group rate limiter admin update sequence is out of order\"\n    },\n    {\n      \"code\": 6126,\n      \"name\": \"DeleverageWithdrawalUpdateEmpty\",\n      \"msg\": \"Deleverage withdrawal admin update must include outflow\"\n    },\n    {\n      \"code\": 6127,\n      \"name\": \"DeleverageWithdrawalUpdateInvalidSlotRange\",\n      \"msg\": \"Deleverage withdrawal admin update slot range is invalid\"\n    },\n    {\n      \"code\": 6128,\n      \"name\": \"DeleverageWithdrawalUpdateFutureSlot\",\n      \"msg\": \"Deleverage withdrawal admin update cannot reference future slots\"\n    },\n    {\n      \"code\": 6129,\n      \"name\": \"DeleverageWithdrawalUpdateStale\",\n      \"msg\": \"Deleverage withdrawal admin update is too stale\"\n    },\n    {\n      \"code\": 6130,\n      \"name\": \"DeleverageWithdrawalUpdateOutOfOrderSlot\",\n      \"msg\": \"Deleverage withdrawal admin update slot progression is out of order\"\n    },\n    {\n      \"code\": 6131,\n      \"name\": \"DeleverageWithdrawalUpdateOutOfOrderSeq\",\n      \"msg\": \"Deleverage withdrawal admin update sequence is out of order\"\n    },\n    {\n      \"code\": 6132,\n      \"name\": \"UseSetOraclePrice\",\n      \"msg\": \"Use set_oracle_price instead\"\n    },\n    {\n      \"code\": 6133,\n      \"name\": \"InvalidGlobalFeeWallet\",\n      \"msg\": \"Provided global fee wallet does not match group fee state cache\"\n    },\n    {\n      \"code\": 6134,\n      \"name\": \"BankUninitialized\",\n      \"msg\": \"Bank has not completed one-time initialization\"\n    },\n    {\n      \"code\": 6135,\n      \"name\": \"SlippageTooHigh\",\n      \"msg\": \"Max slippage exceeds the allowed cap\"\n    },\n    {\n      \"code\": 6136,\n      \"name\": \"MarinadeStateValidationFailed\",\n      \"msg\": \"Marinade state validation failed\"\n    },\n    {\n      \"code\": 6137,\n      \"name\": \"ExponentVaultValidationFailed\",\n      \"msg\": \"Exponent vault validation failed\"\n    },\n    {\n      \"code\": 6138,\n      \"name\": \"InvalidPtStartPrice\",\n      \"msg\": \"PT start price must be in (0, 1]\"\n    },\n    {\n      \"code\": 6139,\n      \"name\": \"StakePoolStale\",\n      \"msg\": \"Stake pool balance has not been updated recently enough\"\n    },\n    {\n      \"code\": 6200,\n      \"name\": \"WrongAssetTagForStandardInstructions\",\n      \"msg\": \"Wrong asset tag for standard instructions, expected DEFAULT, SOL, or STAKED asset tag\"\n    },\n    {\n      \"code\": 6201,\n      \"name\": \"WrongAssetTagForKaminoInstructions\",\n      \"msg\": \"Wrong asset tag for Kamino instructions, expected KAMINO asset tag\"\n    },\n    {\n      \"code\": 6202,\n      \"name\": \"CantAddPool\",\n      \"msg\": \"Cannot create a kamino bank with this instruction, use add_bank_kamino\"\n    },\n    {\n      \"code\": 6203,\n      \"name\": \"KaminoReserveMintAddressMismatch\",\n      \"msg\": \"Kamino reserve mint address doesn't match the bank mint address\"\n    },\n    {\n      \"code\": 6204,\n      \"name\": \"KaminoDepositFailed\",\n      \"msg\": \"Deposit failed: obligation deposit amount increase did not match the expected increase, left - actual, right - expected\"\n    },\n    {\n      \"code\": 6205,\n      \"name\": \"KaminoWithdrawFailed\",\n      \"msg\": \"Withdraw failed: token vault increase did not match the expected increase, left - actual, right - expected\"\n    },\n    {\n      \"code\": 6206,\n      \"name\": \"ReserveStale\",\n      \"msg\": \"Kamino Reserve data is stale - run refresh_reserve on kamino program first\"\n    },\n    {\n      \"code\": 6207,\n      \"name\": \"InvalidObligationDepositCount\",\n      \"msg\": \"Kamino obligation must have exactly one active deposit, at index 0\"\n    },\n    {\n      \"code\": 6208,\n      \"name\": \"ObligationDepositReserveMismatch\",\n      \"msg\": \"Kamino obligation deposit doesn't match the expected reserve\"\n    },\n    {\n      \"code\": 6209,\n      \"name\": \"ObligationInitDepositInsufficient\",\n      \"msg\": \"Failed to meet minimum deposit amount requirement for init obligation\"\n    },\n    {\n      \"code\": 6210,\n      \"name\": \"KaminoReserveValidationFailed\",\n      \"msg\": \"Kamino reserve validation failed\"\n    },\n    {\n      \"code\": 6211,\n      \"name\": \"KaminoInvalidOracleSetup\",\n      \"msg\": \"Invalid oracle setup: only KaminoPythPush and KaminoSwitchboardPull are supported\"\n    },\n    {\n      \"code\": 6212,\n      \"name\": \"MaxMaintLeverageExceeded\",\n      \"msg\": \"Maximum Maintenance leverage exceeded\"\n    },\n    {\n      \"code\": 6213,\n      \"name\": \"InvalidKaminoReserve\",\n      \"msg\": \"Invalid Kamino reserve: account constraint violated\"\n    },\n    {\n      \"code\": 6214,\n      \"name\": \"InvalidKaminoObligation\",\n      \"msg\": \"Invalid Kamino obligation: account constraint violated\"\n    },\n    {\n      \"code\": 6300,\n      \"name\": \"DriftInvalidOracleSetup\",\n      \"msg\": \"Invalid oracle setup: only DriftPythPull and DriftSwitchboardPull are supported\"\n    },\n    {\n      \"code\": 6301,\n      \"name\": \"DriftSpotMarketMintMismatch\",\n      \"msg\": \"Drift spot market mint does not match bank mint\"\n    },\n    {\n      \"code\": 6302,\n      \"name\": \"WrongBankAssetTagForDriftOperation\",\n      \"msg\": \"Wrong bank asset tag for Drift operation\"\n    },\n    {\n      \"code\": 6303,\n      \"name\": \"CantUseStandardOperationsOnDriftAssets\",\n      \"msg\": \"Cannot use standard operations on Drift assets\"\n    },\n    {\n      \"code\": 6304,\n      \"name\": \"DriftSpotMarketValidationFailed\",\n      \"msg\": \"Drift spot market validation failed\"\n    },\n    {\n      \"code\": 6305,\n      \"name\": \"DriftInvalidSpotPositions\",\n      \"msg\": \"Drift user has invalid spot positions (only first position can have balance)\"\n    },\n    {\n      \"code\": 6306,\n      \"name\": \"DriftSpotPositionMarketMismatch\",\n      \"msg\": \"Drift spot position market does not match bank's configured market\"\n    },\n    {\n      \"code\": 6307,\n      \"name\": \"DriftInvalidPositionType\",\n      \"msg\": \"Drift position has invalid balance type (must be deposit)\"\n    },\n    {\n      \"code\": 6308,\n      \"name\": \"DriftScaledBalanceMismatch\",\n      \"msg\": \"Drift scaled balance change does not match expected amount\"\n    },\n    {\n      \"code\": 6309,\n      \"name\": \"DriftWithdrawFailed\",\n      \"msg\": \"Drift withdrawal failed - token amount mismatch\"\n    },\n    {\n      \"code\": 6310,\n      \"name\": \"DriftUserInitDepositInsufficient\",\n      \"msg\": \"Drift user initial deposit insufficient (minimum 10 units required)\"\n    },\n    {\n      \"code\": 6311,\n      \"name\": \"InvalidDriftAccount\",\n      \"msg\": \"Invalid drift account\"\n    },\n    {\n      \"code\": 6312,\n      \"name\": \"DriftAuthorityMismatch\",\n      \"msg\": \"Drift authority mismatch\"\n    },\n    {\n      \"code\": 6313,\n      \"name\": \"DriftInvalidHarvestPositionIndex\",\n      \"msg\": \"Invalid harvest position index - must be between 2 and 7\"\n    },\n    {\n      \"code\": 6314,\n      \"name\": \"DriftPositionEmpty\",\n      \"msg\": \"Drift position is empty\"\n    },\n    {\n      \"code\": 6315,\n      \"name\": \"DriftInvalidBalanceType\",\n      \"msg\": \"Drift position has invalid balance type\"\n    },\n    {\n      \"code\": 6316,\n      \"name\": \"DriftNoAdminDeposit\",\n      \"msg\": \"No admin deposits found in Drift positions 2-7 for this market\"\n    },\n    {\n      \"code\": 6317,\n      \"name\": \"DriftHarvestSameMarket\",\n      \"msg\": \"Cannot harvest from the same market as the bank's main drift spot market\"\n    },\n    {\n      \"code\": 6318,\n      \"name\": \"DriftBrickedAccount\",\n      \"msg\": \"Drift account bricked: too many active deposits from admin operations\"\n    },\n    {\n      \"code\": 6319,\n      \"name\": \"DriftMissingRewardOracle\",\n      \"msg\": \"Drift reward oracle required when 2+ active deposits exist\"\n    },\n    {\n      \"code\": 6320,\n      \"name\": \"DriftMissingRewardSpotMarket\",\n      \"msg\": \"Drift reward spot market required when 2+ active deposits exist\"\n    },\n    {\n      \"code\": 6321,\n      \"name\": \"DriftMissingRewardAccounts\",\n      \"msg\": \"Drift account has admin deposits that require reward accounts to be provided\"\n    },\n    {\n      \"code\": 6322,\n      \"name\": \"DriftSpotMarketStale\",\n      \"msg\": \"Drift spot market is stale, interest needs to be updated\"\n    },\n    {\n      \"code\": 6323,\n      \"name\": \"InvalidDriftSpotMarket\",\n      \"msg\": \"Invalid Drift spot market: account constraint violated\"\n    },\n    {\n      \"code\": 6324,\n      \"name\": \"InvalidDriftUser\",\n      \"msg\": \"Invalid Drift user: account constraint violated\"\n    },\n    {\n      \"code\": 6325,\n      \"name\": \"InvalidDriftUserStats\",\n      \"msg\": \"Invalid Drift user stats: account constraint violated\"\n    },\n    {\n      \"code\": 6326,\n      \"name\": \"DriftUnsupportedTokenDecimals\",\n      \"msg\": \"Drift cannot support tokens with more than 19 decimals\"\n    },\n    {\n      \"code\": 6400,\n      \"name\": \"SolendInvalidOracleSetup\",\n      \"msg\": \"Invalid oracle setup: only SolendPythPull and SolendSwitchboardPull are supported\"\n    },\n    {\n      \"code\": 6401,\n      \"name\": \"SolendReserveValidationFailed\",\n      \"msg\": \"Solend reserve validation failed\"\n    },\n    {\n      \"code\": 6402,\n      \"name\": \"SolendObligationOwnerMismatch\",\n      \"msg\": \"Solend obligation owner mismatch\"\n    },\n    {\n      \"code\": 6403,\n      \"name\": \"WrongBankAssetTagForSolendOperation\",\n      \"msg\": \"Wrong bank asset tag for Solend operation\"\n    },\n    {\n      \"code\": 6404,\n      \"name\": \"CantUseStandardOperationsOnSolendAssets\",\n      \"msg\": \"Cannot use standard operations on Solend assets\"\n    },\n    {\n      \"code\": 6405,\n      \"name\": \"SolendReserveMismatch\",\n      \"msg\": \"Solend reserve mismatch\"\n    },\n    {\n      \"code\": 6406,\n      \"name\": \"SolendReserveMintMismatch\",\n      \"msg\": \"Solend reserve mint mismatch\"\n    },\n    {\n      \"code\": 6407,\n      \"name\": \"SolendInvalidDepositPositions\",\n      \"msg\": \"Solend obligation has invalid deposits (only first position can have balance)\"\n    },\n    {\n      \"code\": 6408,\n      \"name\": \"SolendDepositPositionReserveMismatch\",\n      \"msg\": \"Solend deposit position reserve does not match bank's configured reserve\"\n    },\n    {\n      \"code\": 6409,\n      \"name\": \"SolendCTokenBalanceMismatch\",\n      \"msg\": \"Solend cToken balance change does not match expected amount\"\n    },\n    {\n      \"code\": 6410,\n      \"name\": \"SolendWithdrawFailed\",\n      \"msg\": \"Solend withdrawal failed - token amount mismatch\"\n    },\n    {\n      \"code\": 6411,\n      \"name\": \"SolendReserveStale\",\n      \"msg\": \"Solend reserve is stale\"\n    },\n    {\n      \"code\": 6412,\n      \"name\": \"SolendDepositFailed\",\n      \"msg\": \"Solend deposit failed - collateral amount mismatch\"\n    },\n    {\n      \"code\": 6413,\n      \"name\": \"InvalidSolendAccount\",\n      \"msg\": \"Invalid Solend account owner\"\n    },\n    {\n      \"code\": 6414,\n      \"name\": \"InvalidSolendAccountVersion\",\n      \"msg\": \"Invalid Solend account version\"\n    },\n    {\n      \"code\": 6415,\n      \"name\": \"InvalidSolendReserve\",\n      \"msg\": \"Invalid Solend reserve: account constraint violated\"\n    },\n    {\n      \"code\": 6416,\n      \"name\": \"InvalidSolendObligation\",\n      \"msg\": \"Invalid Solend obligation: account constraint violated\"\n    },\n    {\n      \"code\": 6500,\n      \"name\": \"JuplendInvalidOracleSetup\",\n      \"msg\": \"Invalid oracle setup: only JuplendPythPull and JuplendSwitchboardPull are supported\"\n    },\n    {\n      \"code\": 6501,\n      \"name\": \"JuplendLendingValidationFailed\",\n      \"msg\": \"Juplend lending state validation failed\"\n    },\n    {\n      \"code\": 6502,\n      \"name\": \"WrongBankAssetTagForJuplendOperation\",\n      \"msg\": \"Wrong bank asset tag for Juplend operation\"\n    },\n    {\n      \"code\": 6503,\n      \"name\": \"CantUseStandardOperationsOnJuplendAssets\",\n      \"msg\": \"Cannot use standard operations on Juplend assets\"\n    },\n    {\n      \"code\": 6504,\n      \"name\": \"JuplendLendingStale\",\n      \"msg\": \"Juplend lending state is stale\"\n    },\n    {\n      \"code\": 6505,\n      \"name\": \"InvalidJuplendLending\",\n      \"msg\": \"Invalid Juplend lending: account constraint violated\"\n    },\n    {\n      \"code\": 6506,\n      \"name\": \"JuplendLendingMintMismatch\",\n      \"msg\": \"Juplend lending mint mismatch\"\n    },\n    {\n      \"code\": 6507,\n      \"name\": \"JuplendBankAlreadyActivated\",\n      \"msg\": \"Juplend bank is already activated\"\n    },\n    {\n      \"code\": 6508,\n      \"name\": \"InvalidJuplendFTokenVault\",\n      \"msg\": \"Invalid Juplend fToken vault\"\n    },\n    {\n      \"code\": 6509,\n      \"name\": \"JuplendDepositFailed\",\n      \"msg\": \"Juplend deposit failed\"\n    },\n    {\n      \"code\": 6510,\n      \"name\": \"JuplendWithdrawFailed\",\n      \"msg\": \"Juplend withdraw failed\"\n    },\n    {\n      \"code\": 6511,\n      \"name\": \"JuplendInitPositionDepositInsufficient\",\n      \"msg\": \"Juplend init position deposit insufficient\"\n    },\n    {\n      \"code\": 6512,\n      \"name\": \"InvalidJuplendWithdrawIntermediaryAta\",\n      \"msg\": \"Invalid Juplend withdraw intermediary ATA\"\n    },\n    {\n      \"code\": 6513,\n      \"name\": \"InvalidResize\",\n      \"msg\": \"Account is already at (or above) the target size\"\n    },\n    {\n      \"code\": 6600,\n      \"name\": \"BankCircuitBreakerHalted\",\n      \"msg\": \"Bank is halted by oracle circuit breaker\"\n    },\n    {\n      \"code\": 6601,\n      \"name\": \"CircuitBreakerAdminOnly\",\n      \"msg\": \"Action requires risk admin while bank is circuit-breaker halted\"\n    },\n    {\n      \"code\": 6602,\n      \"name\": \"CircuitBreakerInvalidConfig\",\n      \"msg\": \"Invalid circuit breaker config\"\n    },\n    {\n      \"code\": 6603,\n      \"name\": \"CircuitBreakerRequiresWarmCache\",\n      \"msg\": \"Circuit breaker cannot be enabled until the oracle price cache is warm (call pulse first)\"\n    },\n    {\n      \"code\": 6604,\n      \"name\": \"CircuitBreakerPriceJump\",\n      \"msg\": \"Oracle price deviates too far from the circuit breaker reference; action rejected\"\n    },\n    {\n      \"code\": 6800,\n      \"name\": \"ScopeInvalidAccount\",\n      \"msg\": \"Scope oracle account is not owned by the Scope program or is malformed\"\n    },\n    {\n      \"code\": 6801,\n      \"name\": \"ScopeInvalidEntry\",\n      \"msg\": \"Scope entry index is out of range or the entry has never been refreshed\"\n    },\n    {\n      \"code\": 6802,\n      \"name\": \"ScopeStalePrice\",\n      \"msg\": \"Scope price is stale\"\n    },\n    {\n      \"code\": 6803,\n      \"name\": \"UseConfigureBankOracleScope\",\n      \"msg\": \"Use lending_pool_configure_bank_oracle_scope; Scope requires an entry index\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"AccountEventHeader\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"signer\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"marginfi_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"marginfi_account_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"marginfi_group\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AdminCloseAccountEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"global_fee_wallet\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Balance\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"active\",\n            \"docs\": [\n              \"Whether this balance slot is in use (nonzero = active)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"bank_pk\",\n            \"docs\": [\n              \"The bank this balance corresponds to\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bank_asset_tag\",\n            \"docs\": [\n              \"Inherited from the bank when the position is first created and CANNOT BE CHANGED after that.\",\n              \"Note that all balances created before the addition of this feature use `ASSET_TAG_DEFAULT`\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"tag\",\n            \"docs\": [\n              \"Tag used by orders to reference this balance (0 means unused/unassigned).\",\n              \"A tag may also have a non-zero value while having no orders.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"asset_shares\",\n            \"docs\": [\n              \"The user's asset (deposit) shares in the bank. Multiply by `bank.asset_share_value` for\",\n              \"the token amount.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_shares\",\n            \"docs\": [\n              \"The user's liability (borrow) shares in the bank. Multiply by `bank.liability_share_value`\",\n              \"for the token amount.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"emissions_outstanding\",\n            \"docs\": [\n              \"Unclaimed emissions rewards for this position\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Unix timestamp (u64) of the last emissions calculation for this position\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"_padding\",\n            \"docs\": [\n              \"Reserved for future use\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                1\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Bank\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"docs\": [\n              \"The SPL token mint this bank manages\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_decimals\",\n            \"docs\": [\n              \"Number of decimals of the `mint`. Must be < 24.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"group\",\n            \"docs\": [\n              \"The `MarginfiGroup` this bank belongs to\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"asset_share_value\",\n            \"docs\": [\n              \"Monotonically increases as interest rate accumulates. For typical banks, a user's asset\",\n              \"value in token = (number of shares the user has * asset_share_value).\",\n              \"* A float (arbitrary decimals)\",\n              \"* Initially 1\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_share_value\",\n            \"docs\": [\n              \"Monotonically increases as interest rate accumulates. For typical banks, a user's liabilty\",\n              \"value in token = (number of shares the user has * liability_share_value)\",\n              \"* A float (arbitrary decimals)\",\n              \"* Initially 1\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidity_vault\",\n            \"docs\": [\n              \"The SPL token account holding deposited liquidity\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_vault_bump\",\n            \"docs\": [\n              \"PDA bump for the liquidity vault\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidity_vault_authority_bump\",\n            \"docs\": [\n              \"PDA bump for the liquidity vault authority\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"insurance_vault\",\n            \"docs\": [\n              \"The SPL token account holding insurance fund tokens\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"insurance_vault_bump\",\n            \"docs\": [\n              \"PDA bump for the insurance vault\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"insurance_vault_authority_bump\",\n            \"docs\": [\n              \"PDA bump for the insurance vault authority\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"collected_insurance_fees_outstanding\",\n            \"docs\": [\n              \"Fees collected and pending withdraw for the `insurance_vault`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"fee_vault\",\n            \"docs\": [\n              \"The SPL token account holding collected group fees\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_vault_bump\",\n            \"docs\": [\n              \"PDA bump for the fee vault\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fee_vault_authority_bump\",\n            \"docs\": [\n              \"PDA bump for the fee vault authority\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"collected_group_fees_outstanding\",\n            \"docs\": [\n              \"Fees collected and pending withdraw for the `fee_vault`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_liability_shares\",\n            \"docs\": [\n              \"Sum of all liability shares held by all borrowers in this bank.\",\n              \"Multiply by `liability_share_value` to get the total liability amount in native token units.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_asset_shares\",\n            \"docs\": [\n              \"Sum of all asset shares held by all depositors in this bank.\",\n              \"Multiply by `asset_share_value` to get the total asset amount in native token units.\",\n              \"* For Kamino banks, this is the quantity of collateral tokens (NOT liquidity tokens) in the\",\n              \"bank, and also uses `mint_decimals`, though the mint itself will always show (6) decimals\",\n              \"exactly (i.e Kamino ignores this and treats it as if it was using `mint_decimals`)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Unix timestamp (i64) of the last interest accrual\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"config\",\n            \"docs\": [\n              \"The bank's configuration parameters (weights, limits, oracle setup, interest rate config)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankConfig\"\n              }\n            }\n          },\n          {\n            \"name\": \"flags\",\n            \"docs\": [\n              \"Bank flags bitfield (u64).\",\n              \"\",\n              \"- Bit 0 (1): `EMISSIONS_FLAG_BORROW_ACTIVE` \\u2014 borrow-side emissions are active\",\n              \"- Bit 1 (2): `EMISSIONS_FLAG_LENDING_ACTIVE` \\u2014 lending-side emissions are active\",\n              \"- Bit 2 (4): `PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG` \\u2014 anyone can settle bad debt\",\n              \"- Bit 3 (8): `FREEZE_SETTINGS` \\u2014 bank configuration is frozen (only limits can change)\",\n              \"- Bit 4 (16): `CLOSE_ENABLED_FLAG` \\u2014 bank can be closed (set at creation for banks >= 0.1.4)\",\n              \"- Bit 5 (32): `TOKENLESS_REPAYMENTS_ALLOWED` \\u2014 risk admin can repay debt without tokens\",\n              \"- Bit 6 (64): `TOKENLESS_REPAYMENTS_COMPLETE` \\u2014 all debt cleared, lender purge enabled\",\n              \"- Bit 7 (128): `IS_T22` \\u2014 1 if T22, 0 if token classic\",\n              \"- Bit 8 (256): `BANK_SEED_KNOWN` \\u2014 bank is known to be PDA/seed-derived. If not set, bank\",\n              \"may still be a PDA, but created before this flag launched (1.8 or earlier) or is a legacy\",\n              \"keypair-based bank.\",\n              \"- Bit 9 (512): `STAKED_ORACLE_DISABLED` \\u2014 staked oracle pricing is temporarily disabled.\",\n              \"- Bit 10 (1024): `STAKED_ORACLE_PRICE_USES_ONRAMP` \\u2014 staked oracle pricing includes the SPL\",\n              \"single-pool on-ramp account in NAV.\",\n              \"- Bit 11 (2048): `CIRCUIT_BREAKER_ENABLED` \\u2014 oracle deviation breaker active on this bank\",\n              \"- Bit 12 (4096): `BANK_SAME_ASSET_EMODE_ELIGIBLE` \\u2014 bank may participate in same-asset e-mode.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emissions_rate\",\n            \"docs\": [\n              \"Emissions APR. Number of emitted tokens (emissions_mint) per 1e(bank.mint_decimal) tokens\",\n              \"(bank mint) (native amount) per 1 YEAR.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emissions_remaining\",\n            \"docs\": [\n              \"Remaining emissions tokens available for distribution\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"emissions_mint\",\n            \"docs\": [\n              \"The SPL token mint used for emissions rewards\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"collected_program_fees_outstanding\",\n            \"docs\": [\n              \"Fees collected and pending withdraw for the `FeeState.global_fee_wallet`'s canonical ATA for `mint`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"emode\",\n            \"docs\": [\n              \"Controls this bank's emode configuration, which enables some banks to treat the assets of\",\n              \"certain other banks more preferentially as collateral.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"EmodeSettings\"\n              }\n            }\n          },\n          {\n            \"name\": \"fees_destination_account\",\n            \"docs\": [\n              \"Set with `update_fees_destination_account`. Fees can be withdrawn to the canonical ATA of\",\n              \"this wallet without the admin's input (withdraw_fees_permissionless). If pubkey default, the\",\n              \"bank doesn't support this feature, and the fees must be collected manually (withdraw_fees).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"cache\",\n            \"docs\": [\n              \"Cached bank metrics (interest rates, oracle price, etc.)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"lending_position_count\",\n            \"docs\": [\n              \"Number of user lending positions currently open in this bank\",\n              \"* For banks created prior to 0.1.4, this is the number of positions opened/closed after\",\n              \"0.1.4 goes live, and may be negative.\",\n              \"* For banks created in 0.1.4 or later, this is the number of positions open in total, and\",\n              \"the bank may safely be closed if this is zero. Will never go negative.\"\n            ],\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"borrowing_position_count\",\n            \"docs\": [\n              \"Number of user borrowing positions currently open in this bank\",\n              \"* For banks created prior to 0.1.4, this is the number of positions opened/closed after\",\n              \"0.1.4 goes live, and may be negative.\",\n              \"* For banks created in 0.1.4 or later, this is the number of positions open in total, and\",\n              \"the bank may safely be closed if this is zero. Will never go negative.\"\n            ],\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"liquidation_liquidator_fee\",\n            \"docs\": [\n              \"Fee the liquidator earns when liquidating against this bank's liability. Decode with\",\n              \"`u32_to_centi` (`u32::MAX` = 100%).\",\n              \"* 0 falls back to the default (`DEFAULT_LIQUIDATION_FEE` = 2.5%).\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"liquidation_insurance_fee\",\n            \"docs\": [\n              \"Fee routed to this bank's insurance fund on a liquidation against its liability. Decode\",\n              \"with `u32_to_centi` (`u32::MAX` = 100%).\",\n              \"* 0 falls back to the default (`DEFAULT_LIQUIDATION_FEE` = 2.5%).\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"_padding_0\",\n            \"docs\": [\n              \"Reserved for future use\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"integration_acc_1\",\n            \"docs\": [\n              \"Integration account slot 1 (default Pubkey for non-integrations).\",\n              \"- Kamino: reserve\",\n              \"- Drift: spot market\",\n              \"- Solend: reserve\",\n              \"- JupLend: lending state\",\n              \"- Staked Collateral: Validator vote account\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"integration_acc_2\",\n            \"docs\": [\n              \"Integration account slot 2 (default Pubkey for non-integrations).\",\n              \"- Kamino: obligation\",\n              \"- Drift: user\",\n              \"- Solend: obligation\",\n              \"- JupLend: fToken vault\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"integration_acc_3\",\n            \"docs\": [\n              \"Integration account slot 3 (default Pubkey for non-integrations).\",\n              \"- Drift: user stats\",\n              \"- JupLend: withdraw intermediary ATA (ATA of liquidity_vault_authority for bank mint)\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"rate_limiter\",\n            \"docs\": [\n              \"Rate limiter for controlling withdraw/borrow outflow.\",\n              \"Tracks net outflow (outflows - inflows) in native tokens.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankRateLimiter\"\n              }\n            }\n          },\n          {\n            \"name\": \"_pad_0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"bank_seed\",\n            \"docs\": [\n              \"* `0` for legacy banks created via `lending_pool_add_bank` (created via keypair, not a PDA),\",\n              \"or pre-backfill banks (1.8 or earlier) where seed remains unknown.\",\n              \"* Otherwise the `bank_seed: u64` argument passed when creating the bank.\",\n              \"* Use `flags & BANK_SEED_KNOWN` to verify this value has known seed provenance.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"cb_halt_started_at\",\n            \"docs\": [\n              \"Unix-seconds when the current halt started, zero if not halted.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cb_halt_ended_at\",\n            \"docs\": [\n              \"Unix-seconds when the current halt's tier duration ends. Tier stays sticky past this for\",\n              \"the escalation window; a fresh breach within the window ratchets to the next tier.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cb_tier\",\n            \"docs\": [\n              \"0 = operational, 1..=3 = escalating halt severity.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"cb_tier3_consecutive_trips\",\n            \"docs\": [\n              \"Consecutive tier-3 trips with no clean escalation-window between them. Hitting\",\n              \"`CB_MAX_TIER3_BEFORE_CIRCUIT_BREAK` forces the bank to `CircuitBroken`.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"cb_pre_break_state\",\n            \"docs\": [\n              \"`BankOperationalState` (as `u8`) the bank held before the breaker forced it to\",\n              \"`CircuitBroken`. Restored by `clear_circuit_breaker`. Meaningless unless\",\n              \"`operational_state == CircuitBroken`.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_cb_pad\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"cb_last_observed_slot\",\n            \"docs\": [\n              \"Solana slot of the last counted CB observation; used for slot-level dedup.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"cb_last_oracle_source_time\",\n            \"docs\": [\n              \"Publisher-side timestamp of the last counted CB observation; rejects re-reads of the same\",\n              \"publication across multiple Solana slots. Zero when the adapter doesn't expose one.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cb_reference_price\",\n            \"docs\": [\n              \"EMA reference price used by the circuit breaker, in the multiplier-adjusted effective-price\",\n              \"domain the risk engine uses. Frozen while halted, zero until the first observation after\",\n              \"enable.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"cb_window_reference_price\",\n            \"docs\": [\n              \"Long-window reference price (same multiplier-adjusted domain as `cb_reference_price`) used\",\n              \"to catch slow oracle walking that stays below the per-observation breaker threshold.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"cb_window_started_at\",\n            \"docs\": [\n              \"Unix-seconds when `cb_window_reference_price` was anchored.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cb_frozen_seconds_pending\",\n            \"docs\": [\n              \"Frozen halt seconds from halt intervals overwritten or cleared before `accrue_interest`\",\n              \"consumed them. Non-zero only when the halt record changes without a preceding accrual, i.e.\",\n              \"a paused pulse; the next accrual excludes these on top of the current halt. Zero normally.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"_padding_1\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                2\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankCache\",\n      \"docs\": [\n        \"A read-only cache of the bank's key metrics, e.g. spot interest/fee rates.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"base_rate\",\n            \"docs\": [\n              \"Actual (spot) interest/fee rates of the bank, based on utilization\",\n              \"* APR (annual percentage rate) values\",\n              \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u32::MAX/2 = 500%, etc\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"lending_rate\",\n            \"docs\": [\n              \"Equivalent to `base_rate` * utilization\",\n              \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u32::MAX/2 = 500%, etc\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"borrowing_rate\",\n            \"docs\": [\n              \"Equivalent to `base_rate` * (1 + ir_fees) + fixed_fees\",\n              \"* From 0-1000%, as u32, e.g. u32::MAX = 1000%, u32::MAX/2 = 500%, etc\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"interest_accumulated_for\",\n            \"docs\": [\n              \"* in seconds\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"accumulated_since_last_update\",\n            \"docs\": [\n              \"equivalent to (share value increase in the last `interest_accumulated_for` seconds *\",\n              \"shares), i.e. the delta in `asset_share_value`, in token.\",\n              \"* Note: if the tx that triggered this cache update increased or decreased the net shares,\",\n              \"this value still reports using the PRE-CHANGE share amount, since interest is always\",\n              \"earned on that amount.\",\n              \"* in token, in native decimals, as I80F48\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_oracle_price\",\n            \"docs\": [\n              \"Oracle price used in the last instruction that consumed an oracle price\",\n              \"* Only updated when instruction uses an oracle price, not updated for operations that don't\",\n              \"require prices (e.g., deposit, repay)\",\n              \"* Price in USD, with no price bias\",\n              \"* Zero if never updated\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_oracle_price_timestamp\",\n            \"docs\": [\n              \"Unix timestamp (seconds) when last_oracle_price was last updated\",\n              \"* Used to determine staleness of cached price\",\n              \"* Zero if never updated\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_price_confidence\",\n            \"docs\": [\n              \"Confidence interval reported by the oracle when last_oracle_price was fetched\",\n              \"* Always non-negative\",\n              \"* Zero if never updated\",\n              \"* Pyth: confidence * 2.12\",\n              \"* Switchboard: price * oracle_max_confidence / U32_MAX\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liq_cache_flags\",\n            \"docs\": [\n              \"Liquidation cache flags, set during receivership flow.\",\n              \"* 1 (LIQ_CACHE_LOCKED_FLAG) - We \\\"lock\\\" the liquidation cache when writing to it in Start\",\n              \"Liquidate as an additional safeguard, if the liquidation prices stored here were to be\",\n              \"edited between start and end, it would completely break the risk engine. End validates that\",\n              \"the lock is set, panics if not, and removes it - which prevents footguns if the cache was\",\n              \"e.g. accidently set to default. The lock is also removed when a Balance is closed via\",\n              \"withdraw_all, repay_all, or close_balance, but only when the account has\",\n              \"ACCOUNT_IN_RECEIVERSHIP set, so that operations on unrelated accounts sharing the same\",\n              \"bank do not interfere with an in-progress liquidation.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_cb_cache_pad\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"price_multiplier\",\n            \"docs\": [\n              \"For integration banks, this is the exchange rate of cToken/token or similar. The \\\"real\\\"\",\n              \"price of one deposited token is `price_multiplier` * `last_oracle_price`, we split it here\",\n              \"for consumers who are only interested in reading the oracle price and are applying the\",\n              \"multiplier already elsewhere.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidation_price_rt\",\n            \"docs\": [\n              \"Cached real-time price for receivership liquidation.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidation_price_rt_confidence\",\n            \"docs\": [\n              \"Cached real-time price confidence for receivership liquidation.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidation_price_twap\",\n            \"docs\": [\n              \"Cached TWAP price for receivership liquidation.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidation_price_twap_confidence\",\n            \"docs\": [\n              \"Cached TWAP price confidence for receivership liquidation.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankConfig\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_weight_init\",\n            \"docs\": [\n              \"Discount factor for asset values in initial margin calculation (0 to 1).\",\n              \"E.g., 0.8 means assets count as 80% of their value for borrowing purposes.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"docs\": [\n              \"Discount factor for asset values in maintenance margin calculation (0 to 2).\",\n              \"Used for liquidation eligibility. Generally >= asset_weight_init.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_init\",\n            \"docs\": [\n              \"Premium factor for liability values in initial margin calculation (>= 1).\",\n              \"E.g., 1.2 means liabilities count as 120% of their value for borrowing purposes.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_maint\",\n            \"docs\": [\n              \"Premium factor for liability values in maintenance margin calculation (>= 1).\",\n              \"Used for liquidation eligibility. Generally <= liability_weight_init.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"docs\": [\n              \"Maximum total deposits allowed in this bank, in native token units (0 = no limit)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"interest_rate_config\",\n            \"docs\": [\n              \"Interest rate model configuration\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"InterestRateConfig\"\n              }\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"docs\": [\n              \"Current operational state of the bank (Paused, Operational, ReduceOnly, KilledByBankruptcy)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankOperationalState\"\n              }\n            }\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"docs\": [\n              \"Oracle type used for price feeds\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSetup\"\n              }\n            }\n          },\n          {\n            \"name\": \"oracle_keys\",\n            \"docs\": [\n              \"Oracle account keys (usage depends on oracle_setup type)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"pubkey\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"cb_window_max_up_bps\",\n            \"docs\": [\n              \"CB long-window upward move cap in bps; `0` uses the `CB_WINDOW_MAX_UP_BPS` default.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"cb_window_max_down_bps\",\n            \"docs\": [\n              \"CB long-window downward move cap in bps; `0` uses the `CB_WINDOW_MAX_DOWN_BPS` default.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"borrow_limit\",\n            \"docs\": [\n              \"Maximum total borrows allowed in this bank, in native token units (0 = no limit)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"Risk tier for this bank (Collateral or Isolated)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_tag\",\n            \"docs\": [\n              \"Determines what kinds of assets users of this bank can interact with. Options:\",\n              \"* `ASSET_TAG_DEFAULT` (0) - A regular asset that can be comingled with any other regular\",\n              \"asset or with `ASSET_TAG_SOL`\",\n              \"* `ASSET_TAG_SOL` (1) - Accounts with a SOL position can comingle with **either**\",\n              \"`ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both\",\n              \"* `ASSET_TAG_STAKED` (2) - Staked SOL assets. Accounts with a STAKED position can only\",\n              \"deposit other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL\",\n              \"* `ASSET_TAG_KAMINO` (3) - Treated the same as `ASSET_TAG_DEFAULT`\",\n              \"* `ASSET_TAG_DRIFT` (4) - Treated the same as `ASSET_TAG_DEFAULT`\",\n              \"* `ASSET_TAG_SOLEND` (5) - Treated the same as `ASSET_TAG_DEFAULT`\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Flags for various config options\",\n              \"* 1 - Always set if bank created in 0.1.4 or later, or if migrated to the new pyth oracle\",\n              \"setup from a prior version. Not set in 0.1.3 or earlier banks using pyth that have not yet\",\n              \"migrated. Does nothing for banks that use switchboard.\",\n              \"* 2, 4, 8, 16, etc - reserved for future use.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"cb_window_seconds\",\n            \"docs\": [\n              \"CB long-window length in seconds; `0` uses the `CB_WINDOW_SECONDS` default.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"docs\": [\n              \"USD denominated limit for calculating asset value for initialization margin requirements.\",\n              \"Example, if total SOL deposits are equal to $1M and the limit it set to $500K, then SOL\",\n              \"assets will be discounted by 50%.\",\n              \"\",\n              \"In other words the max value of liabilities that can be backed by the asset is $500K. This\",\n              \"is useful for limiting the damage of oracle attacks.\",\n              \"\",\n              \"Value is UI USD value, for example value 100 -> $100\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"docs\": [\n              \"Time window in seconds for the oracle price feed to be considered live.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"scope_entry_index\",\n            \"docs\": [\n              \"Entry index into the Scope `OraclePrices` price list. Only read when\",\n              \"`oracle_setup == OracleSetup::Scope`; ignored (and zero) for every other setup.\",\n              \"Occupies what was previously `_padding0`, so the layout is unchanged.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"A %, as u32, e.g. 100% = u32::MAX, 50% = u32::MAX/2, etc.\",\n              \"\",\n              \"Oracle confidence configuration. Semantics depend on the oracle type:\",\n              \"* Pyth: Maximum allowed confidence interval. Prices exceeding this threshold are rejected.\",\n              \"- 0 defaults to 10%.\",\n              \"* Switchboard: Confidence spread used for price biasing.\",\n              \"- 0 disables confidence adjustment.\",\n              \"- Non-zero: confidence = price * oracle_max_confidence / U32_MAX.\",\n              \"- Clamped to MAX_CONF_INTERVAL (5% of price).\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fixed_price\",\n            \"docs\": [\n              \"Stored oracle price for `OracleSetup::Fixed`, otherwise does nothing\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"cb_deviation_bps_tiers\",\n            \"docs\": [\n              \"Deviation thresholds in basis points for tiers 1/2/3, strictly monotonic.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                3\n              ]\n            }\n          },\n          {\n            \"name\": \"cb_tier_durations_seconds\",\n            \"docs\": [\n              \"Halt durations in seconds for tiers 1/2/3, strictly monotonic.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                3\n              ]\n            }\n          },\n          {\n            \"name\": \"cb_escalation_window_mult\",\n            \"docs\": [\n              \"Escalation window multiplier: a re-breach within `prev_tier_duration * mult` seconds\",\n              \"after a halt ends ratchets to the next tier.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_cb_config_pad\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"cb_ema_alpha_bps\",\n            \"docs\": [\n              \"EMA smoothing factor for the reference price, in basis points (e.g. 1000 = \\u03b1=0.1).\"\n            ],\n            \"type\": \"u16\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankConfigCompact\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"interest_rate_config\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"InterestRateConfigCompact\"\n              }\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankOperationalState\"\n              }\n            }\n          },\n          {\n            \"name\": \"borrow_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_tag\",\n            \"docs\": [\n              \"Determines what kinds of assets users of this bank can interact with. Options:\",\n              \"* `ASSET_TAG_DEFAULT` (0) - A regular asset that can be comingled with any other regular\",\n              \"asset or with `ASSET_TAG_SOL`\",\n              \"* `ASSET_TAG_SOL` (1) - Accounts with a SOL position can comingle with **either**\",\n              \"`ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both\",\n              \"* `ASSET_TAG_STAKED` (2) - Staked SOL assets. Accounts with a STAKED position can only\",\n              \"deposit other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL\",\n              \"* `ASSET_TAG_KAMINO` (3) - Treated the same as `ASSET_TAG_DEFAULT`\",\n              \"* `ASSET_TAG_DRIFT` (4) - Treated the same as `ASSET_TAG_DEFAULT`\",\n              \"* `ASSET_TAG_SOLEND` (5) - Treated the same as `ASSET_TAG_DEFAULT`\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Flags for various config options\",\n              \"* 1 - Always set if bank created in 0.1.4 or later, or if migrated to the new oracle setup\",\n              \"from a prior version. Not set in 0.1.3 or earlier banks that have not yet migrated.\",\n              \"* 2, 4, 8, 16, etc - reserved for future use.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"docs\": [\n              \"USD denominated limit for calculating asset value for initialization margin requirements.\",\n              \"Example, if total SOL deposits are equal to $1M and the limit it set to $500K, then SOL\",\n              \"assets will be discounted by 50%.\",\n              \"\",\n              \"In other words the max value of liabilities that can be backed by the asset is $500K. This\",\n              \"is useful for limiting the damage of oracle attacks.\",\n              \"\",\n              \"Value is UI USD value, for example value 100 -> $100\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"docs\": [\n              \"Time window in seconds for the oracle price feed to be considered live.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"A %, as u32, e.g. 100% = u32::MAX, 50% = u32::MAX/2, etc.\",\n              \"\",\n              \"Oracle confidence configuration. Semantics depend on the oracle type.\",\n              \"* Pyth: Maximum allowed confidence interval. Prices exceeding this threshold are rejected.\",\n              \"- 0 defaults to 10%.\",\n              \"* Switchboard: Confidence spread used for price biasing.\",\n              \"- 0 disables confidence adjustment.\",\n              \"- Non-zero: confidence = price * oracle_max_confidence / U32_MAX.\",\n              \"- Clamped to MAX_CONF_INTERVAL (5% of price).\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankConfigOpt\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_init\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"liability_weight_maint\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"borrow_limit\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"BankOperationalState\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"interest_rate_config\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"InterestRateConfigOpt\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"RiskTier\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"asset_tag\",\n            \"type\": {\n              \"option\": \"u8\"\n            }\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": {\n              \"option\": \"u16\"\n            }\n          },\n          {\n            \"name\": \"permissionless_bad_debt_settlement\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"freeze_settings\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"tokenless_repayments_allowed\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"liquidation_liquidator_fee\",\n            \"docs\": [\n              \"Per-bank liquidation fees, encoded as `u32_to_centi` (`u32::MAX` = 100%; 0 => default 2.5%).\"\n            ],\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"liquidation_insurance_fee\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"circuit_breaker_enabled\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"cb_deviation_bps_tiers\",\n            \"type\": {\n              \"option\": {\n                \"array\": [\n                  \"u16\",\n                  3\n                ]\n              }\n            }\n          },\n          {\n            \"name\": \"cb_tier_durations_seconds\",\n            \"type\": {\n              \"option\": {\n                \"array\": [\n                  \"u16\",\n                  3\n                ]\n              }\n            }\n          },\n          {\n            \"name\": \"cb_escalation_window_mult\",\n            \"type\": {\n              \"option\": \"u8\"\n            }\n          },\n          {\n            \"name\": \"cb_ema_alpha_bps\",\n            \"type\": {\n              \"option\": \"u16\"\n            }\n          },\n          {\n            \"name\": \"cb_window_seconds\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"cb_window_max_up_bps\",\n            \"type\": {\n              \"option\": \"u16\"\n            }\n          },\n          {\n            \"name\": \"cb_window_max_down_bps\",\n            \"type\": {\n              \"option\": \"u16\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankMetadata\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bank\",\n            \"docs\": [\n              \"Bank this metadata corresponds to\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"placeholder\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"ticker\",\n            \"docs\": [\n              \"The token's ticker name, e.g. USDC\",\n              \"* utf-8\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"description\",\n            \"docs\": [\n              \"The token's plain english description, e.g US Dollar Coin\",\n              \"* utf-8\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"data_blob\",\n            \"docs\": [\n              \"Reserved for future use. Room for a very small icon or something else cool\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                256\n              ]\n            }\n          },\n          {\n            \"name\": \"end_description_byte\",\n            \"docs\": [\n              \"The last data byte in description (padding follows)\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"end_data_blob\",\n            \"docs\": [\n              \"The last data byte in data_blob (padding follows)\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"end_ticker_byte\",\n            \"docs\": [\n              \"The last data byte in ticker (padding follows)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankOperationalState\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Paused\"\n          },\n          {\n            \"name\": \"Operational\"\n          },\n          {\n            \"name\": \"ReduceOnly\"\n          },\n          {\n            \"name\": \"KilledByBankruptcy\"\n          },\n          {\n            \"name\": \"Uninitialized\"\n          },\n          {\n            \"name\": \"ReduceOnlyWithBorrowingPower\"\n          },\n          {\n            \"name\": \"CircuitBroken\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BankRateLimiter\",\n      \"docs\": [\n        \"Per-bank rate limiting configuration and state.\",\n        \"Tracks net outflow in native tokens.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"hourly\",\n            \"docs\": [\n              \"Hourly window rate limiter (native tokens).\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RateLimitWindow\"\n              }\n            }\n          },\n          {\n            \"name\": \"daily\",\n            \"docs\": [\n              \"Daily window rate limiter (native tokens).\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RateLimitWindow\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CircuitBreakerAutoBrokenEvent\",\n      \"docs\": [\n        \"Emitted when consecutive tier-3 trips force a bank into `CircuitBroken`.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"consecutive_tier3_trips\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"current_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CircuitBreakerClearedEvent\",\n      \"docs\": [\n        \"Emitted when a halt is cleared (admin override or escalation-window expiry).\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"prior_tier\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"reason\",\n            \"docs\": [\n              \"One of the `CB_CLEAR_REASON_*` constants.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"current_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CircuitBreakerTrippedEvent\",\n      \"docs\": [\n        \"Emitted when the per-bank oracle circuit breaker trips or escalates a halt.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"tier\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"deviation_bps\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"halt_started_at\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"halt_ended_at\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DeleverageEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"marginfi_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"risk_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deleveragee_assets_seized\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"deleveragee_liability_repaid\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DeleverageWithdrawFlowEvent\",\n      \"docs\": [\n        \"Emitted for deleverage-only withdraw outflows.\",\n        \"The delegate flow admin aggregates these off-chain and\",\n        \"updates the deleverage daily withdraws via `update_deleverage_withdrawals`.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"group\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"outflow_usd\",\n            \"docs\": [\n              \"Equity-denominated outflow value in USD, rounded to integer.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"current_timestamp\",\n            \"docs\": [\n              \"Unix timestamp when the flow was recorded\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DriftClaimBadDebtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"claim_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"distributor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"claim_status\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_vault_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"global_fee_wallet\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"requested_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"received_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"swept_amount\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DriftConfigCompact\",\n      \"docs\": [\n        \"Used to configure Drift banks. A simplified version of `BankConfigCompact` which omits most\",\n        \"values related to interest since Drift banks cannot earn interest or be borrowed from.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"docs\": [\n              \"Either `DriftPythPull` or `DriftSwitchboardPull`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSetup\"\n              }\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"docs\": [\n              \"Bank operational state - allows starting banks in paused state\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankOperationalState\"\n              }\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"Risk tier - determines if assets can be borrowed in isolation\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Config flags for future-proofing\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"Oracle confidence threshold (0 = use default 10%)\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"EditStakedSettingsEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"group\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"settings\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"StakedSettingsEditConfig\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"EmodeConfig\",\n      \"docs\": [\n        \"An emode configuration. Each bank has one such configuration, but this may also be the\",\n        \"intersection of many configurations (see `reconcile_emode_configs`). For example, the risk\",\n        \"engine creates such an intersection from all the emode config of all banks the user is borrowing\",\n        \"from.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"entries\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"EmodeEntry\"\n                  }\n                },\n                10\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"EmodeEntry\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"collateral_bank_emode_tag\",\n            \"docs\": [\n              \"emode_tag of the bank(s) whose collateral you wish to treat preferentially.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"flags\",\n            \"docs\": [\n              \"* APPLIES_TO_ISOLATED (1) - (NOT YET IMPLEMENTED) if set, isolated banks with this tag\",\n              \"also benefit. If not set, isolated banks continue to offer zero collateral, even if they\",\n              \"use this tag.\",\n              \"* 2, 4, 8, 16, 32, etc - reserved for future use\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"docs\": [\n              \"Note: If set below the collateral bank's weight, does nothing.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"docs\": [\n              \"Note: If set below the collateral bank's weight, does nothing.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"EmodeSettings\",\n      \"docs\": [\n        \"Controls the bank's e-mode configuration, allowing certain collateral sources to be treated more\",\n        \"favorably as collateral when used to borrow from this bank.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"emode_tag\",\n            \"docs\": [\n              \"This bank's NON-unique id that other banks will use to determine what emode rate to use when\",\n              \"this bank is offered as collateral.\",\n              \"\",\n              \"For example, all stablecoin banks might share the same emode_tag, and in their entries, each\",\n              \"such stablecoin bank will recognize that collateral sources with this \\\"stable\\\" tag get\",\n              \"preferential weights. When a new stablecoin is added that is considered riskier, it may get\",\n              \"a new, less favorable emode tag, and eventually get upgraded to the same one as the other\",\n              \"stables\",\n              \"\",\n              \"* 0 is in an invalid tag and will do nothing.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"timestamp\",\n            \"docs\": [\n              \"Unix timestamp from the system clock when emode state was last updated\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"flags\",\n            \"docs\": [\n              \"EMODE_ON (1) - If set, at least one entry is configured\",\n              \"2, 4, 8, etc, Reserved for future use\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emode_config\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"EmodeConfig\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ExecuteOrderBalanceRecord\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"is_asset\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"tag\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"shares\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ExecuteOrderRecord\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"order\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"executor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"balance_states\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"ExecuteOrderBalanceRecord\"\n                  }\n                },\n                14\n              ]\n            }\n          },\n          {\n            \"name\": \"active_balance_count\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"inactive_balance_count\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_reserved0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"order_start_health\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeState\",\n      \"docs\": [\n        \"Unique per-program. The Program Owner uses this account to administrate fees collected by the protocol\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"key\",\n            \"docs\": [\n              \"The fee state's own key. A PDA derived from just `b\\\"feestate\\\"`\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"global_fee_admin\",\n            \"docs\": [\n              \"Can modify fees, pause the protocol, etc\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"global_fee_wallet\",\n            \"docs\": [\n              \"The base wallet for all protocol fees. All SOL fees go to this wallet. All non-SOL fees go\",\n              \"to the cannonical ATA of this wallet for that asset.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"account_transfer_fee\",\n            \"docs\": [\n              \"Flat fee in lamports paid to the global fee wallet when initiating an account transfer\",\n              \"(anti-spam; 5,000,000 lamports ~= $0.50). A stored 0 means \\\"use the default\\\"\",\n              \"(`DEFAULT_ACCOUNT_TRANSFER_FEE_LAMPORTS`), which preserves the legacy fee for FeeStates\",\n              \"created before this field existed.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"_placeholder0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"bank_init_flat_sol_fee\",\n            \"docs\": [\n              \"Flat fee assessed when a new bank is initialized, in lamports.\",\n              \"* In SOL, in native decimals.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"bump_seed\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_padding0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                3\n              ]\n            }\n          },\n          {\n            \"name\": \"liquidation_max_fee\",\n            \"docs\": [\n              \"Liquidators can claim at this premium, when liquidating an asset in receivership\",\n              \"liquidation, e.g. (1 + this) * amount repaid >= asset seized\",\n              \"* A percentage\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"program_fee_fixed\",\n            \"docs\": [\n              \"Fee collected by the program owner from all groups\",\n              \"* A percentage\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"program_fee_rate\",\n            \"docs\": [\n              \"Fee collected by the program owner from all groups\",\n              \"* A percentage\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"panic_state\",\n            \"docs\": [\n              \"When the global admin pauses the protocol in the event of an emergency, information about\",\n              \"the pause duration will be stored here and propagated to groups.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PanicState\"\n              }\n            }\n          },\n          {\n            \"name\": \"placeholder1\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"liquidation_flat_sol_fee\",\n            \"docs\": [\n              \"Flat fee assessed for insurance/program use when a liquidation is executed\",\n              \"* In SOL, in native decimals.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"order_init_flat_sol_fee\",\n            \"docs\": [\n              \"Flat fee assessed for preventing spam use when creating an order\",\n              \"* In SOL, in native decimals.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"order_execution_max_fee\",\n            \"docs\": [\n              \"Take-profit Orders can be executed at this premium, which Keepers are allowed to keep (no\",\n              \"pun intended) e.g. (1 + this) * amount repaid >= asset seized\",\n              \"* A percentage\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"pause_delegate_admin\",\n            \"docs\": [\n              \"Can pause (not unpause) the protocol, but cannot modify any fee configuration.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"_reserved0\",\n            \"docs\": [\n              \"Reserved for future use (e.g. the variable-borrow premium settings). Accounts created\",\n              \"before the struct grew to this size are v1-sized (`8 + V1_LEN` bytes) and must be\",\n              \"grown via `resize_global_fee_state` before this program version can load them; the new\",\n              \"bytes are zero-filled.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                32\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeStateCache\",\n      \"docs\": [\n        \"Cached fee configuration propagated from the global FeeState\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"global_fee_wallet\",\n            \"docs\": [\n              \"The wallet that receives program-level fees\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"program_fee_fixed\",\n            \"docs\": [\n              \"Fixed fee APR charged to borrowers (program-level)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"program_fee_rate\",\n            \"docs\": [\n              \"Proportional fee rate on interest (program-level)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Unix timestamp of the last fee state propagation\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"GroupEventHeader\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"signer\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"marginfi_group\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"GroupRateLimiter\",\n      \"docs\": [\n        \"Per-group rate limiting configuration and state.\",\n        \"Tracks aggregate net outflow in USD.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"hourly\",\n            \"docs\": [\n              \"Hourly window rate limiter (USD).\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RateLimitWindow\"\n              }\n            }\n          },\n          {\n            \"name\": \"daily\",\n            \"docs\": [\n              \"Daily window rate limiter (USD).\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RateLimitWindow\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"HealthCache\",\n      \"docs\": [\n        \"A read-only cache of the internal risk engine's information. Only valid in borrow/withdraw if\",\n        \"the tx does not fail. To see the state in any context, e.g. to figure out if the risk engine is\",\n        \"failing due to some bad price information, use `pulse_health`.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_value\",\n            \"docs\": [\n              \"Internal risk engine asset value, using initial weight (e.g. what is used for borrowing\",\n              \"purposes), with all confidence adjustments, and other discounts on price.\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_value\",\n            \"docs\": [\n              \"Internal risk engine liability value, using initial weight (e.g. what is used for borrowing\",\n              \"purposes), with all confidence adjustments, and other discounts on price.\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_value_maint\",\n            \"docs\": [\n              \"Internal risk engine asset value, using maintenance weight (e.g. what is used for\",\n              \"liquidation purposes), with all confidence adjustments.\",\n              \"* Zero if the risk engine failed to load\",\n              \"* Uses SPOT price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_value_maint\",\n            \"docs\": [\n              \"Internal risk engine liability value, using maintenance weight (e.g. what is used for\",\n              \"liquidation purposes), with all confidence adjustments.\",\n              \"* Zero if the risk engine failed to load\",\n              \"* Uses SPOT price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_value_equity\",\n            \"docs\": [\n              \"The \\\"true\\\" value of assets without any confidence or weight adjustments. Internally, used\",\n              \"only for bankruptcies.\",\n              \"* Zero if the risk engine failed to load\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_value_equity\",\n            \"docs\": [\n              \"The \\\"true\\\" value of liabilities without any confidence or weight adjustments.\",\n              \"Internally, used only for bankruptcies.\",\n              \"* Zero if the risk engine failed to load\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"timestamp\",\n            \"docs\": [\n              \"Unix timestamp from the system clock when this cache was last updated\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"flags\",\n            \"docs\": [\n              \"The flags that indicate the state of the health cache. This is a u32 bitfield, where each\",\n              \"bit represents a flag.\",\n              \"\",\n              \"* HEALTHY = 1 - If set, the account cannot be liquidated. If 0, the account is unhealthy and\",\n              \"can be liquidated.\",\n              \"* ENGINE STATUS = 2 - If set, the engine did not error during the last health pulse. If 0,\",\n              \"the engine would have errored and this cache is likely invalid. `RiskEngineInitRejected`\",\n              \"is ignored and will allow the flag to be set anyways.\",\n              \"* ORACLE OK = 4 - If set, the engine did not error due to an oracle issue. If 0, engine was\",\n              \"passed a bad bank or oracle account, or an oracle was stale. Check the order in which\",\n              \"accounts were passed and ensure each balance has the correct banks/oracles, and that\",\n              \"oracle cranks ran recently enough. Check `internal_err` and `err_index` for more details\",\n              \"in some circumstances. Invalid if generated after borrow/withdraw (these instructions will\",\n              \"ignore oracle issues if health is still satisfactory with some balance zeroed out).\",\n              \"* 8, 16, 32, 64, 128, etc - reserved for future use\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"mrgn_err\",\n            \"docs\": [\n              \"If the engine errored, look here for the error code. If the engine returns ok, you may also\",\n              \"check here to see if the risk engine rejected this tx (3009).\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"prices\",\n            \"docs\": [\n              \"Each price corresponds to that index of Balances in the LendingAccount. Useful for debugging\",\n              \"or liquidator consumption, to determine how a user's position is priced internally.\",\n              \"* An f64 stored as bytes\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u8\",\n                    8\n                  ]\n                },\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"internal_err\",\n            \"docs\": [\n              \"Errors in asset oracles are ignored (with prices treated as zero). If you see a zero price\",\n              \"and the `ORACLE_OK` flag is not set, check here to see what error was ignored internally.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"err_index\",\n            \"docs\": [\n              \"Index in `balances` where `internal_err` appeared\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"program_version\",\n            \"docs\": [\n              \"Since 0.1.3, the version will be encoded here. See PROGRAM_VERSION.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"internal_liq_err\",\n            \"docs\": [\n              \"Error code from the liquidation health check during the last health pulse (0 if none)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"internal_bankruptcy_err\",\n            \"docs\": [\n              \"Error code from the bankruptcy check during the last health pulse (0 if none)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"reserved0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"reserved1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"HealthPulseEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"health_cache\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"HealthCache\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"IndexerFlags\",\n      \"docs\": [\n        \"On-chain flags for indexer tranching. Each flag is a full byte so off-chain consumers can\",\n        \"filter accounts via `memcmp`. Balance-derived flags are synced automatically on every\",\n        \"balance-mutating instruction. Pulse-derived flags are updated in `pulse_health`.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"is_lending_only\",\n            \"docs\": [\n              \"1 if the account has no liabilities\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"is_empty\",\n            \"docs\": [\n              \"1 if the account has no balances above the dust threshold\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"is_single_borrower\",\n            \"docs\": [\n              \"1 if the account has exactly one liability position\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_ever_been_liquidated\",\n            \"docs\": [\n              \"1 if the account has ever entered receivership (liquidation or deleverage), permanent.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_ever_been_deleveraged\",\n            \"docs\": [\n              \"1 if the account has ever been forcibly deleveraged (permanent, never unset)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_been_bankrupted\",\n            \"docs\": [\n              \"1 if `handle_bankruptcy` has ever been executed on this account (permanent, never unset)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_isolated\",\n            \"docs\": [\n              \"1 if the account has any liability on a bank with `RiskTier::Isolated`. Note: Not\",\n              \"authoritative due to a variety of edge cases, such as a Bank being configured from\",\n              \"Collateral -> Isolated after the user deposits. Set at borrow time and refreshed best-effort\",\n              \"by pulse from live bank state. Cleared by balance-derived sync only when liability count\",\n              \"reaches zero.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_staked\",\n            \"docs\": [\n              \"1 if the account has a STAKED asset tag position\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_kamino\",\n            \"docs\": [\n              \"1 if the account has a KAMINO asset tag position\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_drift\",\n            \"docs\": [\n              \"1 if the account has a DRIFT asset tag position\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_juplend\",\n            \"docs\": [\n              \"1 if the account has a JUPLEND asset tag position\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"was_liquidatable\",\n            \"docs\": [\n              \"1 if maintenance health was negative at last pulse\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"was_underwater\",\n            \"docs\": [\n              \"1 if equity health was negative at last pulse\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"was_active_30d\",\n            \"docs\": [\n              \"1 if account was active within the last 30 days. Raised to 1 on every\",\n              \"balance-mutating instruction; can only transition 1 \\u2192 0 at pulse time, when the\",\n              \"elapsed-since-`last_update` check fails.\",\n              \"Combined with `is_empty`, indicates an account pending closure.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"was_active_60d\",\n            \"docs\": [\n              \"1 if account was active within the last 60 days. Raised to 1 on every\",\n              \"balance-mutating instruction; can only transition 1 \\u2192 0 at pulse time, when the\",\n              \"elapsed-since-`last_update` check fails.\",\n              \"Combined with `is_empty`, indicates an account eligible for permissionless close.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_trivial_balance\",\n            \"docs\": [\n              \"1 if net equity value was greater than $0 and less than $1 at last pulse\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InterestRateConfig\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"placeholder0\",\n            \"docs\": [\n              \"DEPRECATED placeholder field. Formerly used for legacy curve math.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"placeholder1\",\n            \"docs\": [\n              \"DEPRECATED placeholder field. Formerly used for legacy curve math.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"placeholder2\",\n            \"docs\": [\n              \"DEPRECATED placeholder field. Formerly used for legacy curve math.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"insurance_fee_fixed_apr\",\n            \"docs\": [\n              \"Goes to insurance, funds `collected_insurance_fees_outstanding`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"insurance_ir_fee\",\n            \"docs\": [\n              \"Goes to insurance, funds `collected_insurance_fees_outstanding`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_fixed_fee_apr\",\n            \"docs\": [\n              \"Earned by the group, goes to `collected_group_fees_outstanding`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_ir_fee\",\n            \"docs\": [\n              \"Earned by the group, goes to `collected_group_fees_outstanding`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_origination_fee\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"zero_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 0\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"hundred_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 100\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"points\",\n            \"docs\": [\n              \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n              \"linear curve.\",\n              \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n              \"point, and so forth.\",\n              \"* points where util = 0 are unused\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"RatePoint\"\n                  }\n                },\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"curve_type\",\n            \"docs\": [\n              \"Determines which interest rate curve implementation is active.\",\n              \"- 0 (`INTEREST_CURVE_LEGACY`) is deprecated and unsupported.\",\n              \"- 1 (`INTEREST_CURVE_SEVEN_POINT`) is the active multi-point curve.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InterestRateConfigCompact\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"insurance_fee_fixed_apr\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"insurance_ir_fee\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_fixed_fee_apr\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_ir_fee\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_origination_fee\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"zero_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 0\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"hundred_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 100\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"points\",\n            \"docs\": [\n              \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n              \"linear curve.\",\n              \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n              \"point, and so forth.\",\n              \"* points where util = 0 are unused\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"RatePoint\"\n                  }\n                },\n                5\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InterestRateConfigOpt\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"insurance_fee_fixed_apr\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"insurance_ir_fee\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_fixed_fee_apr\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_ir_fee\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"protocol_origination_fee\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"zero_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 0\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"hundred_util_rate\",\n            \"docs\": [\n              \"The base rate at utilization = 100\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"points\",\n            \"docs\": [\n              \"The base rate at various points between 0 and 100%, exclusive. Essentially a piece-wise\",\n              \"linear curve.\",\n              \"* always in ascending order, e.g. points[0] = first kink point, points[1] = second kink\",\n              \"point, and so forth.\",\n              \"* points where util = 0 are unused\"\n            ],\n            \"type\": {\n              \"option\": {\n                \"array\": [\n                  {\n                    \"defined\": {\n                      \"name\": \"RatePoint\"\n                    }\n                  },\n                  5\n                ]\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"JuplendConfigCompact\",\n      \"docs\": [\n        \"Used to configure JupLend banks. A simplified version of `BankConfigCompact` which omits most\",\n        \"values related to interest since JupLend banks cannot earn interest or be borrowed from.\",\n        \"\",\n        \"Note: JupLend banks do not take an Operational State, they always start in `Uninitialized`\",\n        \"state and are set to `Operational` via `juplend_init_position` (seed deposit + protocol fToken\",\n        \"vault).\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"docs\": [\n              \"Cap in **fToken units**, not underlying. As `token_exchange_price` grows, the same\",\n              \"cap admits more underlying \\u2014 re-tune against the current rate.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"docs\": [\n              \"Either `JuplendPythPull` or `JuplendSwitchboardPull`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSetup\"\n              }\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"Isolated or Collateral\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Config flags for future-proofing, currently ignored\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"docs\": [\n              \"In $\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"docs\": [\n              \"In seconds\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"Oracle confidence threshold (0 = use default 10%)\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"KaminoConfigCompact\",\n      \"docs\": [\n        \"Used to configure Kamino banks. A simplified version of `BankConfigCompact` which omits most\",\n        \"values related to interest since Kamino banks cannot earn interest or be borrowed against.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"docs\": [\n              \"Cap in **Kamino collateral units**, not underlying. As the reserve collateral\",\n              \"exchange rate grows, the same cap admits more underlying \\u2014 re-tune against the\",\n              \"current rate.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"docs\": [\n              \"Either `KaminoPythPush` or `KaminoSwitchboardPull`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSetup\"\n              }\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"docs\": [\n              \"Bank operational state - allows starting banks in paused state\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankOperationalState\"\n              }\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"Risk tier - determines if assets can be borrowed in isolation\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Config flags for future-proofing\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"docs\": [\n              \"Currently unused: Kamino's oracle age applies to kamino banks.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"Oracle confidence threshold (0 = use default 10%)\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"KeeperCloseOrderEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"order\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Lending\",\n      \"docs\": [\n        \"Minimal representation of the on-chain JupLend `Lending` account.\",\n        \"\",\n        \"Notes:\",\n        \"- We intentionally use a **zero-copy** layout here to match how other integrations load large\",\n        \"external accounts (and to avoid paying Borsh (de)serialization cost on every access).\",\n        \"- `repr(C, packed)` keeps the byte layout identical to a field-by-field serialization\",\n        \"(i.e. no implicit padding). This is important because `Pubkey` has alignment=1 while `u64`\",\n        \"has alignment=8; using plain `repr(C)` would insert padding before the first `u64`.\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\",\n        \"packed\": true\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"f_token_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lending_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"decimals\",\n            \"docs\": [\n              \"number of decimals for the fToken, same as underlying mint\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"rewards_rate_model\",\n            \"docs\": [\n              \"PDA of rewards rate model (LRRM)\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_exchange_price\",\n            \"docs\": [\n              \"exchange price in the liquidity layer (no rewards)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"token_exchange_price\",\n            \"docs\": [\n              \"exchange price between fToken and underlying (with rewards)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_timestamp\",\n            \"docs\": [\n              \"unix timestamp when exchange prices were updated last\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"token_reserves_liquidity\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"supply_position_on_liquidity\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccount\",\n      \"docs\": [\n        \"The lending account holds up to 16 balance positions for a user.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"balances\",\n            \"docs\": [\n              \"Array of balance positions (max 16). Sorted in descending order by bank_pk.\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"Balance\"\n                  }\n                },\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"last_tag_used\",\n            \"docs\": [\n              \"Last allocated balance tag (u16), used to find the next unused tag.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"_pad1\",\n            \"docs\": [\n              \"Reserved for future use\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding\",\n            \"docs\": [\n              \"Reserved for future use\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                7\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccountBorrowEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"share_amount\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccountDepositEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"share_amount\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccountLiquidateEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidatee_marginfi_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidatee_marginfi_account_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liability_bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liability_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidatee_pre_health\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidatee_post_health\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"pre_balances\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidationBalances\"\n              }\n            }\n          },\n          {\n            \"name\": \"post_balances\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidationBalances\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccountRepayEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"close_balance\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"share_amount\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAccountWithdrawEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"close_balance\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"share_amount\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankAccrueInterestEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delta\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fees_collected\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"insurance_collected\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankCollectFeesEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"group_fees_collected\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"group_fees_outstanding\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"insurance_fees_collected\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"insurance_fees_outstanding\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"config\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankConfigOpt\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureFrozenEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_limit\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankConfigureOracleEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankCreateEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankHandleBankruptcyEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bad_debt\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"covered_amount\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"socialized_amount\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankSetOraclePriceEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"price\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolBankSetSameAssetEmodeEligibilityEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"enabled\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolSuperAdminDepositEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"transfer_amount\",\n            \"docs\": [\n              \"Amount requested in SPL transfer instruction.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"vault_inflow_amount\",\n            \"docs\": [\n              \"Assumed vault inflow. Token-2022 transfer fees are not handled by this instruction path.\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingPoolSuperAdminWithdrawEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_outflow_amount\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationBalances\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"liquidatee_asset_balance\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidatee_liability_balance\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidator_asset_balance\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidator_liability_balance\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidator_liability_bank_asset_balance\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationCache\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_value_maint\",\n            \"docs\": [\n              \"Internal risk engine asset value snapshot taken when liquidation begins, using maintenance\",\n              \"weight with all confidence adjustments.\",\n              \"* Uses SPOT price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_value_maint\",\n            \"docs\": [\n              \"Internal risk engine liability value snapshot taken when liquidation begins, using\",\n              \"maintenance weight with all confidence adjustments.\",\n              \"* Uses SPOT price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_value_equity\",\n            \"docs\": [\n              \"Actual cash value of assets pre-liquidation (inclusive of price adjustment for oracle\",\n              \"confidence, but without any weights)\",\n              \"* Liquidator is allowed to seize up to `liability_value_equity` - this amount\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"liability_value_equity\",\n            \"docs\": [\n              \"Actual cash value of liabilities pre-liquidation (inclusive of price adjustment for oracle\",\n              \"confidence, but without any weights)\",\n              \"* Liquidator is allowed to seize up to this amount - `asset_value_equity`\",\n              \"* Uses EMA price\",\n              \"* In dollars\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"_placeholder\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"_reserved0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationEntry\",\n      \"docs\": [\n        \"Used to record key details of the last few liquidation events on the account\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_amount_seized\",\n            \"docs\": [\n              \"Dollar amount seized\",\n              \"* An f64 stored as bytes\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"liab_amount_repaid\",\n            \"docs\": [\n              \"Dollar amount repaid\",\n              \"* An f64 stored as bytes\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"placeholder0\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"_reserved0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationReceiverEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"marginfi_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidation_receiver\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidatee_assets_seized\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"liquidatee_liability_repaid\",\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"lamps_fee_paid\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationRecord\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"key\",\n            \"docs\": [\n              \"This account's own key. A PDA derived from `marginfi_account`\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"marginfi_account\",\n            \"docs\": [\n              \"Account this record tracks\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"record_payer\",\n            \"docs\": [\n              \"The key that paid to create this account. At some point, we may allow this wallet to reclaim\",\n              \"the rent paid to open a record.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidation_receiver\",\n            \"docs\": [\n              \"The liquidator taking receivership of the `marginfi_account` to complete a liquidation. Pays\",\n              \"the liquidation fee.\",\n              \"* Always pubkey default unless actively within a liquidation event.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"entries\",\n            \"docs\": [\n              \"Basic historical data for the last few liquidation events on this account\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"LiquidationEntry\"\n                  }\n                },\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"cache\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidationCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"_reserved0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"_reserved2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"_reserved3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccount\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"group\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lending_account\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LendingAccount\"\n              }\n            }\n          },\n          {\n            \"name\": \"account_flags\",\n            \"docs\": [\n              \"The flags that indicate the state of the account. This is u64 bitfield, where each bit\",\n              \"represents a flag.\",\n              \"\",\n              \"Flags:MarginfiAccount\",\n              \"- 1: `ACCOUNT_DISABLED` - Indicates that the account is disabled and no further actions can\",\n              \"be taken on it.\",\n              \"- 2: `ACCOUNT_IN_FLASHLOAN` - Only set when an account is within a flash loan, e.g. when\",\n              \"start_flashloan is called, then unset when the flashloan ends.\",\n              \"- 4: `ACCOUNT_FLAG_DEPRECATED` - Deprecated, available for future use\",\n              \"- 8: `ACCOUNT_TRANSFER_AUTHORITY_DEPRECATED` - the admin has flagged with account to be\",\n              \"moved, original owner can now call `set_account_transfer_authority`\",\n              \"- 16: `ACCOUNT_IN_RECEIVERSHIP` - the account is eligible to be liquidated and has entered\",\n              \"receivership, a liquidator is able to control borrows and withdraws until the end of the\",\n              \"tx. This flag will only appear within a tx.\",\n              \"- 32: `ACCOUNT_IN_DELEVERAGE - the account is being deleveraged by the risk admin\",\n              \"- 64: `ACCOUNT_FROZEN` - the admin has frozen the account; only the group admin may perform\",\n              \"actions until unfrozen.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emissions_destination_account\",\n            \"docs\": [\n              \"Wallet whose canonical ATA receives off-chain emissions distributions.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"health_cache\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"HealthCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"migrated_from\",\n            \"docs\": [\n              \"If this account was migrated from another one, store the original account key\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"migrated_to\",\n            \"docs\": [\n              \"If this account has been migrated to another one, store the destination account key\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Unix timestamp (u64) of the last account interaction. Note: Bank.last_update uses i64.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"account_index\",\n            \"docs\": [\n              \"If a PDA-based account, the account index, a seed used to derive the PDA that can be chosen\",\n              \"arbitrarily (0.1.5 or later). Otherwise, does nothing.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"third_party_index\",\n            \"docs\": [\n              \"If a PDA-based account (0.1.5 or later), a \\\"vendor specific\\\" id. Values < PDA_FREE_THRESHOLD\",\n              \"can be used by anyone with no restrictions. Values >= PDA_FREE_THRESHOLD can only be used by\",\n              \"a particular program via CPI. These values require being added to a list, contact us for\",\n              \"more details. For legacy non-pda accounts, does nothing.\",\n              \"\",\n              \"Note: use a unique seed to tag accounts related to some particular program or campaign so\",\n              \"you can easily fetch them all later.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"This account's bump, if a PDA-based account (0.1.5 or later). Otherwise, does nothing.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"active_orders\",\n            \"docs\": [\n              \"Count of how many Orders this account has active. One is added when an Order is opened, and\",\n              \"subtracted when an Order is executed or cancelled.\",\n              \"* Accounts cannot open more than u8::MAX orders. Sorry power users: hopefully 256 stop\",\n              \"losses is enough for you.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"liquidation_record\",\n            \"docs\": [\n              \"Stores information related to liquidations made against this account. A pda of this\",\n              \"account's key, and \\\"liq_record\\\"\",\n              \"* Typically pubkey default if this account has never been liquidated or close to liquidation\",\n              \"* Opening this account is permissionless. Typically the liquidator pays, but e.g. we may\",\n              \"also charge the user if they are opening a risky position on the front end.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"indexer_flags\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"IndexerFlags\"\n              }\n            }\n          },\n          {\n            \"name\": \"_padding0\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                4\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccountCloseOrderEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"order\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccountCreateEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccountFreezeEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"frozen\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccountPlaceOrderEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"order\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"trigger\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderTriggerType\"\n              }\n            }\n          },\n          {\n            \"name\": \"stop_loss\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"take_profit\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"tags\",\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                2\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiAccountTransferToNewAccount\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"old_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_account_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"new_account_authority\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiGroup\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"admin\",\n            \"docs\": [\n              \"Broadly able to modify anything, and can set/remove other admins at will.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"group_flags\",\n            \"docs\": [\n              \"Bitmask for group settings flags.\",\n              \"* Bit 0 (1): `PROGRAM_FEES_ENABLED` \\u2014 If set, program-level fees are enabled.\",\n              \"* Bits 1-63: Reserved for future use.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_state_cache\",\n            \"docs\": [\n              \"Caches information from the global `FeeState` so the FeeState can be omitted on certain ixes\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"FeeStateCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"banks\",\n            \"docs\": [\n              \"For groups initialized in versions 0.1.2 or greater, this is an authoritative count\",\n              \"of the number of banks under this group. For groups initialized prior to 0.1.2,\",\n              \"a non-authoritative count of the number of banks initiated after 0.1.2 went live.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"emode_admin\",\n            \"docs\": [\n              \"This admin can configure collateral ratios above (but not below) the collateral ratio of\",\n              \"certain banks, e.g. allow SOL to count as 90% collateral when borrowing an LST instead of\",\n              \"the default rate.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delegate_curve_admin\",\n            \"docs\": [\n              \"Can modify the fields in `config.interest_rate_config` but nothing else, for every bank\",\n              \"under this group\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delegate_limit_admin\",\n            \"docs\": [\n              \"Can modify the `deposit_limit`, `borrow_limit`, `total_asset_value_init_limit` but nothing\",\n              \"else, for every bank under this group\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delegate_emissions_admin\",\n            \"docs\": [\n              \"DEPRECATED: currently has no on-chain authority.\",\n              \"Preserved in account layout for backward compatibility and historical metadata only.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"panic_state_cache\",\n            \"docs\": [\n              \"When program keeper temporarily puts the program into panic mode, information about the\",\n              \"duration of the lockup will be available here.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PanicStateCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"deleverage_withdraw_window_cache\",\n            \"docs\": [\n              \"Keeps track of the liquidity withdrawn from the group over the day as a result of\",\n              \"deleverages. Used as a protection mechanism against too big (and unwanted) withdrawals (e.g.\",\n              \"when the risk admin is compromised).\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WithdrawWindowCache\"\n              }\n            }\n          },\n          {\n            \"name\": \"risk_admin\",\n            \"docs\": [\n              \"Can run bankruptcy and forced deleverage ixes to e.g. sunset risky/illiquid assets\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"metadata_admin\",\n            \"docs\": [\n              \"Can modify a Bank's metadata, and nothing else.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"emode_max_init_leverage\",\n            \"docs\": [\n              \"Maximum leverage allowed for emode positions (initial margin), stored as u32 basis.\",\n              \"Use `u32_to_basis` to convert to I80F48. Range: 1-100.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"emode_max_maint_leverage\",\n            \"docs\": [\n              \"Maximum leverage allowed for emode positions (maintenance margin), stored as u32 basis.\",\n              \"Must be > emode_max_init_leverage. Range: 1-100.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"same_asset_emode_init_leverage\",\n            \"docs\": [\n              \"Encoded same-asset automatic emode leverage for initial margin.\",\n              \"Decode with `u32_to_basis`. Same-asset treatment is disabled when the decoded leverage is\",\n              \"less than or equal to 1 and also requires each participating bank to opt in.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"same_asset_emode_maint_leverage\",\n            \"docs\": [\n              \"Encoded same-asset automatic emode leverage for maintenance margin.\",\n              \"Decode with `u32_to_basis`. Ordering is validated in decoded space.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"rate_limiter\",\n            \"docs\": [\n              \"Rate limiter for controlling aggregate withdraw/borrow outflow across all banks.\",\n              \"Tracks net outflow in USD.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupRateLimiter\"\n              }\n            }\n          },\n          {\n            \"name\": \"rate_limiter_last_admin_update_slot\",\n            \"docs\": [\n              \"Last slot covered by an admin group rate limiter aggregation update.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"rate_limiter_last_admin_update_seq\",\n            \"docs\": [\n              \"Monotonic sequence number for admin group rate limiter updates.\",\n              \"This is used to enforce strict ordering and prevent duplicate/replayed batches\",\n              \"when slot ranges overlap or multiple updates happen in the same slot.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deleverage_withdraw_last_admin_update_slot\",\n            \"docs\": [\n              \"Last slot covered by an admin deleverage withdraw-limit aggregation update.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deleverage_withdraw_last_admin_update_seq\",\n            \"docs\": [\n              \"Monotonic sequence number for admin deleverage withdraw-limit updates.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"delegate_flow_admin\",\n            \"docs\": [\n              \"Can modify flow-control status for the group, i.e. update the withdraw caches with flow\",\n              \"information from banks. Typically this is a hot wallet that lives in e.g. some cron job. If\",\n              \"compromised, flow control can be effectively disabled until the admin is restored, which\",\n              \"does not itself compromise any funds, and is merely annoying.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"_padding_0\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u64\",\n                    2\n                  ]\n                },\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_1\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u64\",\n                    2\n                  ]\n                },\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_2\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u64\",\n                    32\n                  ]\n                },\n                32\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiGroupConfigureEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"admin\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"flags\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginfiGroupCreateEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"GroupEventHeader\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MinimalObligation\",\n      \"docs\": [\n        \"A minimal copy of Kamino's Obligation for zero-copy deserialization\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"tag\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_slot\",\n            \"docs\": [\n              \"Kamino obligations are only good for one slot, e.g. `refresh_obligation` must have run within the\",\n              \"same slot as any ix that needs a non-stale obligation e.g. withdraw.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_stale\",\n            \"docs\": [\n              \"True if the obligation is stale, which will cause various ixes like withdraw to fail. Typically\",\n              \"set to true in any tx that modifies obligation balance, and set to false at the end of a\",\n              \"successful `refresh_obligation`\",\n              \"* 0 = false, 1 = true\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"last_update_price_status\",\n            \"docs\": [\n              \"Each bit represents a passed check in price status.\",\n              \"* 63 = all checks passed\",\n              \"\",\n              \"Otherwise:\",\n              \"* PRICE_LOADED =        0b_0000_0001; // 1\",\n              \"* PRICE_AGE_CHECKED =   0b_0000_0010; // 2\",\n              \"* TWAP_CHECKED =        0b_0000_0100; // 4\",\n              \"* TWAP_AGE_CHECKED =    0b_0000_1000; // 8\",\n              \"* HEURISTIC_CHECKED =   0b_0001_0000; // 16\",\n              \"* PRICE_USAGE_ALLOWED = 0b_0010_0000; // 32\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"last_update_placeholder\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"lending_market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"docs\": [\n              \"For mrgn banks, the bank's Liquidity Vault Authority (a pda which can be derived if the bank\",\n              \"key is known)\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposits\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"MinimalObligationCollateral\"\n                  }\n                },\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"lowest_reserve_deposit_liquidation_ltv\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposited_value_sf\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part4\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part5a\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part5c\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                24\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MinimalObligationCollateral\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"deposit_reserve\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposited_amount\",\n            \"docs\": [\n              \"In collateral token (NOT liquidity token), use `collateral_to_liquidity` to convert back to\",\n              \"liquidity token!\",\n              \"* Always 6 decimals\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_value_sf\",\n            \"docs\": [\n              \"* In dollars, based on last oracle price update\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\",\n              \"* A float (arbitrary decimals)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"borrowed_amount_against_this_collateral_in_elevation_group\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                9\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MinimalReserve\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"version\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"slot\",\n            \"docs\": [\n              \"Kamino reserves are only good for one slot, e.g. `refresh_reserve` must have run within the\",\n              \"same slot as any ix that needs a non-stale reserve e.g. withdraw.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"stale\",\n            \"docs\": [\n              \"True if the reserve is stale, which will cause various ixes like withdraw to fail. Typically\",\n              \"set to true in any tx that modifies reserve balance, and set to false at the end of a\",\n              \"successful `refresh_reserve`\",\n              \"* 0 = false, 1 = true\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"price_status\",\n            \"docs\": [\n              \"Each bit represents a passed check in price status.\",\n              \"* 63 = all checks passed\",\n              \"\",\n              \"Otherwise:\",\n              \"* PRICE_LOADED =        0b_0000_0001; // 1\",\n              \"* PRICE_AGE_CHECKED =   0b_0000_0010; // 2\",\n              \"* TWAP_CHECKED =        0b_0000_0100; // 4\",\n              \"* TWAP_AGE_CHECKED =    0b_0000_1000; // 8\",\n              \"* HEURISTIC_CHECKED =   0b_0001_0000; // 16\",\n              \"* PRICE_USAGE_ALLOWED = 0b_0010_0000; // 32\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"placeholder\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"lending_market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_collateral\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_debt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"supply_vault\",\n            \"docs\": [\n              \"* A PDA\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_vault\",\n            \"docs\": [\n              \"* A PDA\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"available_amount\",\n            \"docs\": [\n              \"In simple terms: (amount in supply vault - outstanding borrows)\",\n              \"* In token, with `mint_decimals`\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrowed_amount_sf\",\n            \"docs\": [\n              \"* In token, with `mint_decimals`\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"market_price_sf\",\n            \"docs\": [\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"market_price_last_updated_ts\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"mint_decimals\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposit_limit_crossed_timestamp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_limit_crossed_timestamp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"cumulative_borrow_rate_bsf\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                48\n              ]\n            }\n          },\n          {\n            \"name\": \"accumulated_protocol_fees_sf\",\n            \"docs\": [\n              \"* In token, with `mint_decimals`\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"accumulated_referrer_fees_sf\",\n            \"docs\": [\n              \"* In token, with `mint_decimals`\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"pending_referrer_fees_sf\",\n            \"docs\": [\n              \"* In token, with `mint_decimals`\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"absolute_referral_rate_sf\",\n            \"docs\": [\n              \"* In token, with `mint_decimals`\",\n              \"* Actually an I68F60, stored as a u128 (i.e. BN) in Kamino.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"token_program\",\n            \"docs\": [\n              \"Token or Token22. If token22, note that Kamino does not support all Token22 extensions.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding2_part1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                256\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2_part2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2_part3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                24\n              ]\n            }\n          },\n          {\n            \"name\": \"padding3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"padding_part4\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                48\n              ]\n            }\n          },\n          {\n            \"name\": \"collateral_mint_pubkey\",\n            \"docs\": [\n              \"Mints collateral tokens\",\n              \"* A PDA\",\n              \"* technically 6 decimals, but uses `mint_decimals` regardless for all purposes\",\n              \"* authority = lending_market_authority\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_total_supply\",\n            \"docs\": [\n              \"Total number of collateral tokens\",\n              \"* uses `mint_decimals`, even though it's technically 6 decimals under the hood\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"collateral_supply_vault\",\n            \"docs\": [\n              \"* A PDA\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding1_reserve_collateral\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2_reserve_collateral\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4096\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                256\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part4\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part5\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"padding4_part6\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MinimalSpotMarket\",\n      \"docs\": [\n        \"Minimal representation of Drift's SpotMarket account\",\n        \"Only includes the fields we actually need for marginfi integration\",\n        \"https://github.com/drift-labs/protocol-v2/tree/master/programs/drift/src/state/spot_market.rs#L35\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"docs\": [\n              \"The address of the spot market. It is a pda of the market index\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"oracle\",\n            \"docs\": [\n              \"The oracle used to price the markets deposits/borrows\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"docs\": [\n              \"The token mint of the market\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"docs\": [\n              \"The vault used to store the market's deposits\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"_padding1\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u64\",\n                    4\n                  ]\n                },\n                9\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"deposit_balance\",\n            \"docs\": [\n              \"All the fields we need for testing (stored as raw bytes for simplicity)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"borrow_balance\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"cumulative_deposit_interest\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"cumulative_borrow_interest\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding3\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                9\n              ]\n            }\n          },\n          {\n            \"name\": \"last_interest_ts\",\n            \"docs\": [\n              \"Last time the cumulative deposit and borrow interest was updated\",\n              \"Offset: 568 bytes from start of struct (including discriminator)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"_padding4\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                13\n              ]\n            }\n          },\n          {\n            \"name\": \"decimals\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"_padding5\",\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                24\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding6\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"pool_id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_padding7\",\n            \"docs\": [\n              \"Padding to reach 776 bytes total (including discriminator)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                5\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MinimalUser\",\n      \"docs\": [\n        \"Minimal representation of Drift's User account\",\n        \"Only includes the fields we actually need\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"docs\": [\n              \"The owner/authority of the account\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delegate\",\n            \"docs\": [\n              \"An addresses that can control the account on the authority's behalf\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"name\",\n            \"docs\": [\n              \"Encoded display name for the account\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"spot_positions\",\n            \"docs\": [\n              \"The user's spot positions (8 positions)\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"SpotPosition\"\n                  }\n                },\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding1\",\n            \"docs\": [\n              \"Skip to the fields we need at the end\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                256\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding2\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding3\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding4\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding5\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding6\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding7\",\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"sub_account_id\",\n            \"docs\": [\n              \"Sub account id for this user account\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"status\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"UserStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"_padding8\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                27\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleSetup\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"None\"\n          },\n          {\n            \"name\": \"PythLegacy\"\n          },\n          {\n            \"name\": \"SwitchboardV2\"\n          },\n          {\n            \"name\": \"PythPushOracle\"\n          },\n          {\n            \"name\": \"SwitchboardPull\"\n          },\n          {\n            \"name\": \"StakedWithPythPush\"\n          },\n          {\n            \"name\": \"KaminoPythPush\"\n          },\n          {\n            \"name\": \"KaminoSwitchboardPull\"\n          },\n          {\n            \"name\": \"Fixed\"\n          },\n          {\n            \"name\": \"DriftPythPull\"\n          },\n          {\n            \"name\": \"DriftSwitchboardPull\"\n          },\n          {\n            \"name\": \"SolendPythPull\"\n          },\n          {\n            \"name\": \"SolendSwitchboardPull\"\n          },\n          {\n            \"name\": \"FixedKamino\"\n          },\n          {\n            \"name\": \"FixedDrift\"\n          },\n          {\n            \"name\": \"JuplendPythPull\"\n          },\n          {\n            \"name\": \"JuplendSwitchboardPull\"\n          },\n          {\n            \"name\": \"FixedJuplend\"\n          },\n          {\n            \"name\": \"Scope\"\n          },\n          {\n            \"name\": \"PythMSOL\"\n          },\n          {\n            \"name\": \"KaminoMSOL\"\n          },\n          {\n            \"name\": \"JuplendMSOL\"\n          },\n          {\n            \"name\": \"PythLST\"\n          },\n          {\n            \"name\": \"KaminoLST\"\n          },\n          {\n            \"name\": \"JuplendLST\"\n          },\n          {\n            \"name\": \"PTPyth\"\n          },\n          {\n            \"name\": \"PTFixed\"\n          },\n          {\n            \"name\": \"Reserved27\"\n          },\n          {\n            \"name\": \"Reserved28\"\n          },\n          {\n            \"name\": \"Reserved29\"\n          },\n          {\n            \"name\": \"Reserved30\"\n          },\n          {\n            \"name\": \"Reserved31\"\n          },\n          {\n            \"name\": \"Reserved32\"\n          },\n          {\n            \"name\": \"Reserved33\"\n          },\n          {\n            \"name\": \"Reserved34\"\n          },\n          {\n            \"name\": \"Reserved35\"\n          },\n          {\n            \"name\": \"Reserved36\"\n          },\n          {\n            \"name\": \"Reserved37\"\n          },\n          {\n            \"name\": \"Reserved38\"\n          },\n          {\n            \"name\": \"Reserved39\"\n          },\n          {\n            \"name\": \"Reserved40\"\n          },\n          {\n            \"name\": \"Reserved41\"\n          },\n          {\n            \"name\": \"Reserved42\"\n          },\n          {\n            \"name\": \"Reserved43\"\n          },\n          {\n            \"name\": \"Reserved44\"\n          },\n          {\n            \"name\": \"Reserved45\"\n          },\n          {\n            \"name\": \"Reserved46\"\n          },\n          {\n            \"name\": \"Reserved47\"\n          },\n          {\n            \"name\": \"Reserved48\"\n          },\n          {\n            \"name\": \"Reserved49\"\n          },\n          {\n            \"name\": \"Reserved50\"\n          },\n          {\n            \"name\": \"Reserved51\"\n          },\n          {\n            \"name\": \"Reserved52\"\n          },\n          {\n            \"name\": \"Reserved53\"\n          },\n          {\n            \"name\": \"Reserved54\"\n          },\n          {\n            \"name\": \"Reserved55\"\n          },\n          {\n            \"name\": \"Reserved56\"\n          },\n          {\n            \"name\": \"Reserved57\"\n          },\n          {\n            \"name\": \"Reserved58\"\n          },\n          {\n            \"name\": \"Reserved59\"\n          },\n          {\n            \"name\": \"Reserved60\"\n          },\n          {\n            \"name\": \"Reserved61\"\n          },\n          {\n            \"name\": \"Reserved62\"\n          },\n          {\n            \"name\": \"Reserved63\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Order\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"marginfi_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"stop_loss\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"take_profit\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"created_at\",\n            \"docs\": [\n              \"Unix timestamp (seconds) when the order was created. Reads 0 for orders created before this\",\n              \"field existed (it was previously a reserved placeholder; same 8 bytes, so layout-compatible).\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"max_slippage\",\n            \"docs\": [\n              \"* a %, as u32, out of 100%, e.g. 50% = .5 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"tags\",\n            \"docs\": [\n              \"Active tags (currently 2). Remaining capacity is stored in padding for layout compatibility.\",\n              \"Padding byte `ORDER_TAG_PADDING - 1` stores the tag count for forward compatibility. (u16 *\",\n              \"2 = 4 bytes)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"pad1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"_tags_padding\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"trigger\",\n            \"docs\": [\n              \"Stop Loss (0), Take Profit (1), or Both (2)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderTriggerType\"\n              }\n            }\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"Bump to derive this pda\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"pad2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"_reserved1\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"array\": [\n                    \"u8\",\n                    32\n                  ]\n                },\n                4\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderTrigger\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"StopLoss\",\n            \"fields\": [\n              {\n                \"name\": \"threshold\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"WrappedI80F48\"\n                  }\n                }\n              },\n              {\n                \"name\": \"max_slippage\",\n                \"type\": \"u32\"\n              }\n            ]\n          },\n          {\n            \"name\": \"TakeProfit\",\n            \"fields\": [\n              {\n                \"name\": \"threshold\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"WrappedI80F48\"\n                  }\n                }\n              },\n              {\n                \"name\": \"max_slippage\",\n                \"type\": \"u32\"\n              }\n            ]\n          },\n          {\n            \"name\": \"Both\",\n            \"fields\": [\n              {\n                \"name\": \"stop_loss\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"WrappedI80F48\"\n                  }\n                }\n              },\n              {\n                \"name\": \"take_profit\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"WrappedI80F48\"\n                  }\n                }\n              },\n              {\n                \"name\": \"max_slippage\",\n                \"type\": \"u32\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderTriggerType\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"StopLoss\"\n          },\n          {\n            \"name\": \"TakeProfit\"\n          },\n          {\n            \"name\": \"Both\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PanicState\",\n      \"docs\": [\n        \"Panic state for emergency protocol pausing\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pause_flags\",\n            \"docs\": [\n              \"Whether the protocol is currently paused (1 = paused, 0 = not paused)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"daily_pause_count\",\n            \"docs\": [\n              \"Number of times paused today (resets every 24 hours)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"consecutive_pause_count\",\n            \"docs\": [\n              \"Number of consecutive pauses (resets when unpause happens)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_reserved\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"pause_start_timestamp\",\n            \"docs\": [\n              \"Timestamp when the current pause started (0 if not paused)\",\n              \"* When a pause is extended before expiring, this could be in the future.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_daily_reset_timestamp\",\n            \"docs\": [\n              \"Timestamp of the last daily reset (for tracking daily pause count)\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"_reserved_space\",\n            \"docs\": [\n              \"Reserved for future use (making total struct 32 bytes)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PanicStateCache\",\n      \"docs\": [\n        \"Cached panic state information for fast checking during user operations\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pause_flags\",\n            \"docs\": [\n              \"Whether the protocol is currently paused (1 = paused, 0 = not paused)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_reserved\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"pause_start_timestamp\",\n            \"docs\": [\n              \"Timestamp when the current pause started (0 if not paused)\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_cache_update\",\n            \"docs\": [\n              \"Timestamp when this cache was last updated\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"RateLimitFlowEvent\",\n      \"docs\": [\n        \"Emitted when a bank-level inflow or outflow is recorded.\",\n        \"The delegate flow admin aggregates these off-chain and\",\n        \"updates the group rate limiter via `update_group_rate_limiter`.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"group\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"flow_direction\",\n            \"docs\": [\n              \"0 = outflow (withdraw/borrow), 1 = inflow (deposit/repay)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"native_amount\",\n            \"docs\": [\n              \"Amount in native tokens\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"mint_decimals\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"current_timestamp\",\n            \"docs\": [\n              \"Unix timestamp when the flow was recorded\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"RateLimitWindow\",\n      \"docs\": [\n        \"A sliding window rate limiter that tracks net outflow over a time window.\",\n        \"Uses weighted blend of previous and current windows for smooth transitions.\",\n        \"\",\n        \"Net outflow = (withdraws + borrows) - (deposits + repays).\",\n        \"A negative net outflow increases remaining capacity for subsequent outflows.\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"max_outflow\",\n            \"docs\": [\n              \"Maximum net outflow allowed per window (0 = disabled).\",\n              \"For bank-level: denominated in native tokens.\",\n              \"For group-level: denominated in USD.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"window_duration\",\n            \"docs\": [\n              \"Window duration in seconds (e.g., 3600 for hourly, 86400 for daily).\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"window_start\",\n            \"docs\": [\n              \"Unix timestamp when the current window started.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"prev_window_outflow\",\n            \"docs\": [\n              \"Net outflow accumulated in the previous window.\",\n              \"Signed to allow tracking when inflows exceed outflows.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cur_window_outflow\",\n            \"docs\": [\n              \"Net outflow accumulated in the current window.\",\n              \"Signed to allow tracking when inflows exceed outflows.\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"RatePoint\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"util\",\n            \"docs\": [\n              \"The utilization rate where `rate` applies\",\n              \"* a %, as u32, out of 100%, e.g. 50% = .5 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"rate\",\n            \"docs\": [\n              \"The base rate that applies\",\n              \"* a %, as u32, out of 1000%, e.g. 100% = 0.1 * u32::MAX\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"RiskTier\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Collateral\"\n          },\n          {\n            \"name\": \"Isolated\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SameAssetEmodeBank\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bank\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"group_index\",\n            \"docs\": [\n              \"Index into `SameAssetEmodeRegistry.groups`.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_padding\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SameAssetEmodeGroup\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"oracle_key\",\n            \"docs\": [\n              \"The canonical price source, matching `Bank.config.oracle_keys[0]`.\"\n            ],\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SameAssetEmodeRegistry\",\n      \"docs\": [\n        \"Read-only archive of same-asset-emode banks. Enables the emode admin to see, at a glance, which\",\n        \"banks are participating in same-asset-emode.\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"_padding_0\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"key\",\n            \"docs\": [\n              \"This registry's own key.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"group\",\n            \"docs\": [\n              \"Group for which this registry applies.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bank_count\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"group_count\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_padding_1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"groups\",\n            \"docs\": [\n              \"Describes the same-asset-emode groupings that exist\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"SameAssetEmodeGroup\"\n                  }\n                },\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"banks\",\n            \"docs\": [\n              \"Describes which bank belongs to which group\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"SameAssetEmodeBank\"\n                  }\n                },\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1024\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_3\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                512\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_4\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                256\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SetKeeperCloseFlagsEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"header\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AccountEventHeader\"\n              }\n            }\n          },\n          {\n            \"name\": \"bank_keys\",\n            \"type\": {\n              \"option\": {\n                \"vec\": \"pubkey\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SolendConfigCompact\",\n      \"docs\": [\n        \"Used to configure Solend banks. A simplified version of `BankConfigCompact` which omits most\",\n        \"values related to interest since Solend banks cannot earn interest or be borrowed against.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"docs\": [\n              \"Cap in **Solend collateral units**, not underlying. As the reserve collateral\",\n              \"exchange rate grows, the same cap admits more underlying \\u2014 re-tune against the\",\n              \"current rate.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_setup\",\n            \"docs\": [\n              \"Either `SolendPythPull` or `SolendSwitchboardPull`\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSetup\"\n              }\n            }\n          },\n          {\n            \"name\": \"operational_state\",\n            \"docs\": [\n              \"Bank operational state - allows starting banks in paused state\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BankOperationalState\"\n              }\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"Risk tier - determines if assets can be borrowed in isolation\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"config_flags\",\n            \"docs\": [\n              \"Config flags for future-proofing\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_max_confidence\",\n            \"docs\": [\n              \"Oracle confidence threshold (0 = use default 10%)\"\n            ],\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SolendMinimalReserve\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\",\n        \"packed\": true\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_update_slot\",\n            \"docs\": [\n              \"Last slot when supply and rates updated\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_stale\",\n            \"docs\": [\n              \"True when marked stale\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"lending_market\",\n            \"docs\": [\n              \"Lending market address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_mint_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_mint_decimals\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidity_supply_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_pyth_oracle_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_switchboard_oracle_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_available_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"liquidity_borrowed_amount_wads\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"liquidity_cumulative_borrow_rate_wads\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"liquidity_market_price\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"collateral_mint_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"collateral_mint_total_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"collateral_supply_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"config_optimal_utilization_rate\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"config_loan_to_value_ratio\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"config_liquidation_bonus\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"config_liquidation_threshold\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"_padding_to_fees_64\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_to_fees_6\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          },\n          {\n            \"name\": \"liquidity_accumulated_protocol_fees_wads\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_final_128\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                128\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_final_64\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_final_32\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"_padding_final_6\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotBalanceType\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Deposit\"\n          },\n          {\n            \"name\": \"Borrow\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotPosition\",\n      \"docs\": [\n        \"Minimal representation of a spot position within a User account\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"scaled_balance\",\n            \"docs\": [\n              \"The scaled balance of the position.\",\n              \"* Precision: SPOT_BALANCE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"open_bids\",\n            \"docs\": [\n              \"How many spot bids the user has open\",\n              \"* Precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"open_asks\",\n            \"docs\": [\n              \"How many spot asks the user has open\",\n              \"* Precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cumulative_deposits\",\n            \"docs\": [\n              \"The cumulative deposits/borrows a user has made\",\n              \"* Precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"docs\": [\n              \"The market index of the corresponding spot market\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"balance_type\",\n            \"docs\": [\n              \"Whether the position is deposit or borrow\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotBalanceType\"\n              }\n            }\n          },\n          {\n            \"name\": \"open_orders\",\n            \"docs\": [\n              \"Number of open orders\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"docs\": [\n              \"Padding\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StakedSettings\",\n      \"docs\": [\n        \"Unique per-group. Staked Collateral banks created under a group automatically use these\",\n        \"settings. Groups that have not created this struct cannot create staked collateral banks. When\",\n        \"this struct updates, changes must be permissionlessly propagated to staked collateral banks.\",\n        \"Administrators can also edit the bank manually, i.e. with configure_bank, to temporarily make\",\n        \"changes such as raising the deposit limit for a single bank.\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"key\",\n            \"docs\": [\n              \"This account's own key. A PDA derived from `marginfi_group` and `STAKED_SETTINGS_SEED`\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"marginfi_group\",\n            \"docs\": [\n              \"Group for which these settings apply\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"oracle\",\n            \"docs\": [\n              \"Generally, the Pyth push oracle for SOL\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"_pad0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"flags\",\n            \"docs\": [\n              \"Desired bitmask for staked-bank transition flags. These bits are copied to `Bank.flags`\",\n              \"when staked settings are propagated or when a new staked bank is created.\",\n              \"* Bit 9 (512): `STAKED_ORACLE_DISABLED` \\u2014 staked oracle pricing is temporarily disabled.\",\n              \"* Bit 10 (1024): `STAKED_ORACLE_PRICE_USES_ONRAMP` \\u2014 staked oracle pricing includes the SPL\",\n              \"single-pool on-ramp account in NAV.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"_reserved1\",\n            \"docs\": [\n              \"The following values are irrelevant because staked collateral positions do not support\",\n              \"borrowing.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"_reserved2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                64\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StakedSettingsConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WrappedI80F48\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"WARN: You almost certainly want \\\"Collateral\\\", using Isolated risk tier makes the asset\",\n              \"worthless as collateral, and is generally useful only when creating a staked collateral pool\",\n              \"for rewards purposes only.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"RiskTier\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StakedSettingsEditConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"asset_weight_init\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"asset_weight_maint\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"WrappedI80F48\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"total_asset_value_init_limit\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"oracle_max_age\",\n            \"type\": {\n              \"option\": \"u16\"\n            }\n          },\n          {\n            \"name\": \"risk_tier\",\n            \"docs\": [\n              \"WARN: You almost certainly want \\\"Collateral\\\", using Isolated risk tier makes the asset\",\n              \"worthless as collateral, making all outstanding accounts eligible to be liquidated, and is\",\n              \"generally useful only when creating a staked collateral pool for rewards purposes only.\"\n            ],\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"RiskTier\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserStatus\",\n      \"repr\": {\n        \"kind\": \"rust\"\n      },\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Active\"\n          },\n          {\n            \"name\": \"BeingLiquidated\"\n          },\n          {\n            \"name\": \"Bankrupt\"\n          },\n          {\n            \"name\": \"ReduceOnly\"\n          },\n          {\n            \"name\": \"AdvancedLp\"\n          },\n          {\n            \"name\": \"ProtectedMakerOrders\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawWindowCache\",\n      \"docs\": [\n        \"Tracks deleverage withdrawal limits to protect against compromised risk admin\"\n      ],\n      \"repr\": {\n        \"kind\": \"c\"\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"daily_limit\",\n            \"docs\": [\n              \"Maximum USD value that can be withdrawn per day via deleverage (0 = no limit)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"withdrawn_today\",\n            \"docs\": [\n              \"USD value withdrawn today via deleverage (approximate, rounded)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"last_daily_reset_timestamp\",\n            \"docs\": [\n              \"Unix timestamp of the last daily counter reset\"\n            ],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrappedI80F48\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\",\n        \"align\": 8\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"value\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                16\n              ]\n            }\n          }\n        ]\n      }\n    }\n  ]\n}\n","import { Marginfi as MarginfiIdlTypeV0_1_11 } from \"./marginfi-types_0.1.11\";\nimport MARGINFI_IDL_V0_1_11_JSON from \"./marginfi_0.1.11.json\";\n\n// The JSON IDL pads OracleSetup with Reserved27-63 so borsh decode never throws on a future\n// variant. The padding is deliberately not mirrored in the TS types file because it exceeds\n// TypeScript's type-instantiation depth on `program.account.*`.\n\nexport const MARGINFI_IDL = MARGINFI_IDL_V0_1_11_JSON as MarginfiIdlType;\nexport type MarginfiIdlType = MarginfiIdlTypeV0_1_11;\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport enum RiskTier {\n  Collateral = \"Collateral\",\n  Isolated = \"Isolated\",\n}\n\nexport enum OperationalState {\n  Paused = \"Paused\",\n  Operational = \"Operational\",\n  ReduceOnly = \"ReduceOnly\",\n  KilledByBankruptcy = \"KilledByBankruptcy\",\n  /** Awaiting a JupLend seed deposit; all operations blocked (0.1.9+) */\n  Uninitialized = \"Uninitialized\",\n  ReduceOnlyWithBorrowingPower = \"ReduceOnlyWithBorrowingPower\",\n  /** Halted by the per-bank oracle circuit breaker (0.1.10+) */\n  CircuitBroken = \"CircuitBroken\",\n}\n\nexport interface RatePoint {\n  util: number;\n  rate: number;\n}\n\nexport interface InterestRateConfig {\n  // DEPRECATED legacy 3-point curve params, dead on-chain since 0.1.9. Banks that never\n  // migrated to the 7-point curve (curveType 0) still hold their old values in these slots:\n  // placeholder0 = optimal utilization, placeholder1 = plateau rate, placeholder2 = max rate.\n  placeholder0: BigNumber;\n  placeholder1: BigNumber;\n  placeholder2: BigNumber;\n\n  // Fees\n  insuranceFeeFixedApr: BigNumber;\n  insuranceIrFee: BigNumber;\n  protocolFixedFeeApr: BigNumber;\n  protocolIrFee: BigNumber;\n  protocolOriginationFee: BigNumber;\n\n  zeroUtilRate: number;\n  hundredUtilRate: number;\n  points: RatePoint[];\n  curveType: number;\n}\n\nexport interface InterestRateConfigOpt extends Omit<\n  InterestRateConfig,\n  \"placeholder0\" | \"placeholder1\" | \"placeholder2\" | \"curveType\"\n> {}\n\nexport enum OracleSetup {\n  None = \"None\",\n  PythLegacy = \"PythLegacy\",\n  SwitchboardV2 = \"SwitchboardV2\",\n  PythPushOracle = \"PythPushOracle\",\n  SwitchboardPull = \"SwitchboardPull\",\n  StakedWithPythPush = \"StakedWithPythPush\",\n  KaminoPythPush = \"KaminoPythPush\",\n  KaminoSwitchboardPull = \"KaminoSwitchboardPull\",\n  Fixed = \"Fixed\",\n  DriftPythPull = \"DriftPythPull\",\n  DriftSwitchboardPull = \"DriftSwitchboardPull\",\n  SolendPythPull = \"SolendPythPull\",\n  SolendSwitchboardPull = \"SolendSwitchboardPull\",\n  FixedKamino = \"FixedKamino\",\n  FixedDrift = \"FixedDrift\",\n  JuplendPythPull = \"JuplendPythPull\",\n  JuplendSwitchboardPull = \"JuplendSwitchboardPull\",\n  FixedJuplend = \"FixedJuplend\",\n  Scope = \"Scope\",\n  PythMSOL = \"PythMSOL\",\n  KaminoMSOL = \"KaminoMSOL\",\n  JuplendMSOL = \"JuplendMSOL\",\n  PythLST = \"PythLST\",\n  KaminoLST = \"KaminoLST\",\n  JuplendLST = \"JuplendLST\",\n  PTPyth = \"PTPyth\",\n  PTFixed = \"PTFixed\",\n  Unknown = \"Unknown\",\n}\nexport enum AssetTag {\n  DEFAULT = 0,\n  SOL = 1,\n  STAKED = 2,\n  KAMINO = 3,\n  DRIFT = 4,\n  SOLEND = 5,\n  JUPLEND = 6,\n}\n\nexport enum BankConfigFlag {\n  PYTH_MIGRATED = 1 << 0, // 1\n}\n\n// BankConfigOpt Args\nexport interface BankConfigOpt {\n  assetWeightInit: BigNumber | null;\n  assetWeightMaint: BigNumber | null;\n\n  liabilityWeightInit: BigNumber | null;\n  liabilityWeightMaint: BigNumber | null;\n\n  depositLimit: BigNumber | null;\n  borrowLimit: BigNumber | null;\n  operationalState: OperationalState | null;\n  interestRateConfig: InterestRateConfigOpt | null;\n\n  riskTier: RiskTier | null;\n  assetTag: AssetTag | null;\n  totalAssetValueInitLimit: BigNumber | null;\n\n  oracleMaxConfidence: number | null;\n  oracleMaxAge: number | null;\n  permissionlessBadDebtSettlement: boolean | null;\n  freezeSettings: boolean | null;\n  tokenlessRepaymentsAllowed: boolean | null;\n}\n\nexport interface BankConfigType {\n  assetWeightInit: BigNumber;\n  assetWeightMaint: BigNumber;\n\n  liabilityWeightInit: BigNumber;\n  liabilityWeightMaint: BigNumber;\n\n  depositLimit: BigNumber;\n  borrowLimit: BigNumber;\n\n  riskTier: RiskTier;\n  totalAssetValueInitLimit: BigNumber;\n  assetTag: AssetTag;\n  configFlags?: BankConfigFlag;\n\n  interestRateConfig: InterestRateConfig;\n  operationalState: OperationalState;\n\n  oracleSetup: OracleSetup;\n  oracleKeys: PublicKey[];\n  oracleMaxAge: number;\n  oracleMaxConfidence: number;\n  fixedPrice: BigNumber;\n  scopeEntryIndex?: number;\n}\n\nexport interface BankType {\n  address: PublicKey;\n  tokenSymbol?: string;\n  group: PublicKey;\n  mint: PublicKey;\n  mintDecimals: number;\n\n  assetShareValue: BigNumber;\n  liabilityShareValue: BigNumber;\n\n  liquidityVault: PublicKey;\n  liquidityVaultBump: number;\n  liquidityVaultAuthorityBump: number;\n\n  insuranceVault: PublicKey;\n  insuranceVaultBump: number;\n  insuranceVaultAuthorityBump: number;\n  collectedInsuranceFeesOutstanding: BigNumber;\n\n  feeVault: PublicKey;\n  feeVaultBump: number;\n  feeVaultAuthorityBump: number;\n  collectedGroupFeesOutstanding: BigNumber;\n\n  lastUpdate: number;\n\n  config: BankConfigType;\n\n  totalAssetShares: BigNumber;\n  totalLiabilityShares: BigNumber;\n\n  emissionsActiveBorrowing: boolean;\n  emissionsActiveLending: boolean;\n  emissionsRate: number;\n  emissionsMint: PublicKey;\n  emissionsRemaining: BigNumber;\n  collectedProgramFeesOutstanding: BigNumber;\n\n  /** Flags bit 9: staked oracle pricing is temporarily disabled (SVSP transition) */\n  stakedOracleDisabled?: boolean;\n  /**\n   * Flags bit 10: staked oracle pricing includes the SPL single-pool on-ramp in NAV.\n   * When set, staked banks require the on-ramp as a 4th risk account.\n   */\n  stakedOracleUsesOnramp?: boolean;\n\n  oracleKey: PublicKey;\n  emode: EmodeSettingsType;\n  rateLimiter?: BankRateLimiterType;\n  feesDestinationAccount?: PublicKey;\n  lendingPositionCount?: BigNumber;\n  borrowingPositionCount?: BigNumber;\n\n  kaminoIntegrationAccounts?: {\n    kaminoReserve: PublicKey;\n    kaminoObligation: PublicKey;\n  };\n  driftIntegrationAccounts?: {\n    driftSpotMarket: PublicKey;\n    driftUser: PublicKey;\n    driftUserStats: PublicKey;\n  };\n  solendIntegrationAccounts?: {\n    solendReserve: PublicKey;\n    solendObligation: PublicKey;\n  };\n  jupLendIntegrationAccounts?: {\n    jupLendingState: PublicKey;\n    jupFTokenVault: PublicKey;\n    jupFTokenAta: PublicKey;\n  };\n  stakedIntegrationAccounts?: {\n    /** Default pubkey on banks created before the 0.1.9 backfill */\n    validatorVoteAccount: PublicKey;\n  };\n}\n\n/**\n * A sliding window rate limiter that tracks net outflow over a time window.\n * Net outflow = (withdraws + borrows) - (deposits + repays).\n */\nexport interface RateLimitWindowType {\n  /** Maximum net outflow allowed per window (0 = disabled), in native tokens */\n  maxOutflow: BigNumber;\n  /** Window duration in seconds (e.g., 3600 for hourly, 86400 for daily) */\n  windowDuration: number;\n  /** Unix timestamp when the current window started */\n  windowStart: number;\n  /** Net outflow accumulated in the previous window (signed) */\n  prevWindowOutflow: BigNumber;\n  /** Net outflow accumulated in the current window (signed) */\n  curWindowOutflow: BigNumber;\n}\n\nexport interface BankRateLimiterType {\n  hourly: RateLimitWindowType;\n  daily: RateLimitWindowType;\n}\n\n/**\n * Bitwise flags for EMode entry\n */\nexport enum EmodeEntryFlags {\n  /**\n   * If set, isolated banks with this tag also benefit.\n   * If not set, isolated banks continue to offer zero collateral, even if they use this tag.\n   * (NOT YET IMPLEMENTED)\n   */\n  APPLIES_TO_ISOLATED = 1 << 0, // 1\n  /** Reserved for future use */\n  RESERVED_1 = 1 << 1, // 2\n  RESERVED_2 = 1 << 2, // 4\n  RESERVED_3 = 1 << 3, // 8\n  RESERVED_4 = 1 << 4, // 16\n  RESERVED_5 = 1 << 5, // 32\n}\n\nexport interface EmodeEntry {\n  collateralBankEmodeTag: EmodeTag;\n  flags: EmodeEntryFlags[];\n  assetWeightInit: BigNumber;\n  assetWeightMaint: BigNumber;\n}\n\n/**\n * Bitwise flags for EMode settings\n */\nexport enum EmodeFlags {\n  /** If set, at least one entry is configured */\n  EMODE_ON = 1 << 0, // 1\n  /** Reserved for future use */\n  RESERVED_1 = 1 << 1, // 2\n  RESERVED_2 = 1 << 2, // 4\n  RESERVED_3 = 1 << 3, // 8\n}\n\nexport enum EmodeTag {\n  UNSET = 0,\n  SOL = 501,\n  SOL_T2 = 502,\n  LST_T1 = 1571,\n  LST_T2 = 1572,\n  LST_PT = 15787,\n  JLP = 619,\n  STABLE_T1 = 57481,\n  STABLE_T2 = 57482,\n  BTC_T1 = 871,\n  BTC_T2 = 872,\n  HYUSD = 47050,\n  PT_HYUSD = 8747,\n}\n\nexport interface EmodeSettingsType {\n  emodeTag: EmodeTag;\n  timestamp: number;\n  flags: EmodeFlags[];\n  emodeEntries: EmodeEntry[];\n}\n\nexport interface OracleConfigOpt {\n  setup: OracleSetup;\n  keys: PublicKey[];\n}\n\nexport type EmodePair = {\n  collateralBanks: PublicKey[];\n  collateralBankTag: EmodeTag;\n  liabilityBank: PublicKey;\n  liabilityBankTag: EmodeTag;\n  assetWeightMaint: BigNumber;\n  assetWeightInit: BigNumber;\n};\n\nexport type ActiveEmodePair = {\n  collateralBanks: PublicKey[];\n  collateralBankTags: EmodeTag[];\n  liabilityBanks: PublicKey[];\n  liabilityBankTags: EmodeTag[];\n  assetWeightMaint: BigNumber;\n  assetWeightInit: BigNumber;\n};\n\nexport enum EmodeImpactStatus {\n  ActivateEmode,\n  ExtendEmode,\n  IncreaseEmode,\n  ReduceEmode,\n  RemoveEmode,\n  InactiveEmode,\n}\n\nexport interface EmodeImpact {\n  status: EmodeImpactStatus;\n  resultingPairs: EmodePair[];\n  activePair?: ActiveEmodePair;\n}\n\nexport interface ActionEmodeImpact {\n  borrowImpact?: EmodeImpact;\n  supplyImpact?: EmodeImpact;\n  repayAllImpact?: EmodeImpact;\n  withdrawAllImpact?: EmodeImpact;\n}\n\n/**\n * Marginfi bank vault type\n */\nexport enum BankVaultType {\n  LiquidityVault,\n  InsuranceVault,\n  FeeVault,\n}\n","import {\n  PublicKey,\n  VersionedTransaction,\n  TransactionInstruction,\n  TransactionMessage,\n  AddressLookupTableAccount,\n  Transaction,\n  Blockhash,\n} from \"@solana/web3.js\";\n\nimport { ExtendedTransactionProperties, SolanaTransaction } from \"../types\";\n\nimport { decodeInstruction, decompileV0Transaction } from \"./decode\";\nimport { getTxSize } from \"./tx-size\";\n\nimport { MAX_TX_SIZE, ADDRESS_LOOKUP_TABLE_FOR_GROUP_NATIVE_STAKE } from \"~/constants\";\nimport { MARGINFI_IDL, MarginfiIdlType } from \"~/idl\";\nimport { AssetTag, BankType } from \"~/services/bank/types/bank.types\";\n\n/** Base58 keys of every native-stake LUT across all groups (group-agnostic membership test). */\nconst NATIVE_STAKE_LUT_KEYS = new Set(\n  Object.values(ADDRESS_LOOKUP_TABLE_FOR_GROUP_NATIVE_STAKE)\n    .flat()\n    .map((key) => key.toBase58())\n);\n\n/**\n * Picks the lean native-stake LUT subset when every involved bank is STAKED or SOL,\n * otherwise the general subset. Operates on a combined `luts` array (general +\n * native-stake) by partitioning it against the SDK's known native-stake LUT keys, so\n * callers only ever pass one array and the right subset is embedded per transaction.\n *\n * Native-stake accounts can only supply native-stake positions and borrow SOL, so such\n * transactions are fully served by the lean set; any non-(STAKED|SOL) bank falls back to\n * the general set. Degrades gracefully: if the array wasn't split (e.g. only the general\n * set was provided), it returns the input unchanged.\n *\n * @param luts - Combined LUT accounts available to the transaction\n * @param banks - Every bank the transaction touches (target bank + health-check banks)\n */\nexport function selectLutsForBanks(\n  luts: AddressLookupTableAccount[],\n  banks: BankType[]\n): AddressLookupTableAccount[] {\n  const nativeStakeLuts = luts.filter((lut) => NATIVE_STAKE_LUT_KEYS.has(lut.key.toBase58()));\n  const generalLuts = luts.filter((lut) => !NATIVE_STAKE_LUT_KEYS.has(lut.key.toBase58()));\n\n  const allStakedOrSol =\n    banks.length > 0 &&\n    banks.every(\n      (bank) => bank.config.assetTag === AssetTag.STAKED || bank.config.assetTag === AssetTag.SOL\n    );\n\n  if (allStakedOrSol && nativeStakeLuts.length > 0) {\n    return nativeStakeLuts;\n  }\n  return generalLuts.length > 0 ? generalLuts : luts;\n}\n\n/**\n * Convenience wrapper over {@link selectLutsForBanks} for account actions: collects the\n * banks a transaction touches (the target bank, the account's active-position banks, and\n * any extra health-check banks) and selects the matching LUT subset. Uses structural\n * typing for `balances` to avoid an import cycle with the account module.\n */\nexport function selectLutsForAccountAction(\n  luts: AddressLookupTableAccount[],\n  targetBank: BankType,\n  balances: { active: boolean; bankPk: PublicKey }[],\n  bankMap: Map<string, BankType>,\n  extraBankAddresses: PublicKey[] = []\n): AddressLookupTableAccount[] {\n  const banks: BankType[] = [targetBank];\n  for (const balance of balances) {\n    if (!balance.active) continue;\n    const bank = bankMap.get(balance.bankPk.toBase58());\n    if (bank) banks.push(bank);\n  }\n  for (const address of extraBankAddresses) {\n    const bank = bankMap.get(address.toBase58());\n    if (bank) banks.push(bank);\n  }\n  return selectLutsForBanks(luts, banks);\n}\n\n/**\n * Determines if a given transaction is a VersionedTransaction.\n * This function checks for the presence of a 'message' property to identify\n * if the transaction is of type VersionedTransaction.\n *\n * @param tx - The transaction object, which can be either a VersionedTransaction or a Transaction.\n * @returns A boolean indicating whether the transaction is a VersionedTransaction.\n */\nexport function isV0Tx(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n  return \"message\" in tx;\n}\n\nexport function isFlashloan(tx: SolanaTransaction): boolean {\n  if (isV0Tx(tx)) {\n    const addressLookupTableAccounts = tx.addressLookupTables ?? [];\n    const message = decompileV0Transaction(tx, addressLookupTableAccounts);\n    const idl = {\n      ...MARGINFI_IDL,\n      address: new PublicKey(0),\n    } as unknown as MarginfiIdlType;\n    const decoded = message.instructions.map((ix) => decodeInstruction(idl, ix.data));\n    return decoded.some((ix) => ix?.name.toLowerCase().includes(\"flashloan\"));\n  }\n  //TODO: add legacy tx check\n  return false;\n}\n\nexport async function makeVersionedTransaction(\n  blockhash: Blockhash,\n  transaction: Transaction,\n  payer: PublicKey,\n  addressLookupTables?: AddressLookupTableAccount[]\n): Promise<VersionedTransaction> {\n  const message = new TransactionMessage({\n    instructions: transaction.instructions,\n    payerKey: payer,\n    recentBlockhash: blockhash,\n  });\n\n  const versionedMessage = addressLookupTables\n    ? message.compileToV0Message(addressLookupTables)\n    : message.compileToLegacyMessage();\n\n  return new VersionedTransaction(versionedMessage);\n}\n\n/** Total account locks of a compiled v0 tx: static keys plus LUT-resolved keys. */\nfunction countTxAccountLocks(tx: VersionedTransaction): number {\n  const message = tx.message;\n  const lookupKeys = (message.addressTableLookups ?? []).reduce(\n    (count, lookup) => count + lookup.writableIndexes.length + lookup.readonlyIndexes.length,\n    0\n  );\n  return message.staticAccountKeys.length + lookupKeys;\n}\n\n/**\n * Splits your instructions into as many VersionedTransactions as needed\n * so that none exceed MAX_TX_SIZE (minus `sizeMargin`, if given) nor\n * `maxAccountLocks` account locks (if given).\n */\nexport function splitInstructionsToFitTransactions(\n  mandatoryIxs: TransactionInstruction[],\n  ixs: TransactionInstruction[],\n  opts: {\n    blockhash: string;\n    payerKey: PublicKey;\n    luts: AddressLookupTableAccount[];\n    /** Bytes reserved below MAX_TX_SIZE, e.g. for compute-budget ixs appended at send time. */\n    sizeMargin?: number;\n    /** Also cap the total account locks per transaction (e.g. MAX_ACCOUNT_LOCKS). */\n    maxAccountLocks?: number;\n  }\n): VersionedTransaction[] {\n  const result: VersionedTransaction[] = [];\n  let buffer: TransactionInstruction[] = [];\n  const maxSize = MAX_TX_SIZE - (opts.sizeMargin ?? 0);\n\n  function buildTx(extraIxs: TransactionInstruction[]): VersionedTransaction {\n    const messageV0 = new TransactionMessage({\n      payerKey: opts.payerKey,\n      recentBlockhash: opts.blockhash,\n      instructions: [...mandatoryIxs, ...extraIxs],\n    }).compileToV0Message(opts.luts);\n\n    return new VersionedTransaction(messageV0);\n  }\n\n  // Compiling a message that overflows the compact-array encoding throws a\n  // RangeError; treat that as \"does not fit\".\n  function fits(extraIxs: TransactionInstruction[]): boolean {\n    try {\n      const tx = buildTx(extraIxs);\n      if (getTxSize(tx) > maxSize) return false;\n      if (opts.maxAccountLocks !== undefined && countTxAccountLocks(tx) > opts.maxAccountLocks) {\n        return false;\n      }\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  for (const ix of ixs) {\n    if (fits([...buffer, ix])) {\n      buffer.push(ix);\n      continue;\n    }\n\n    // If buffer is empty, this single ix won't fit even alone\n    if (buffer.length === 0) {\n      throw new Error(\"Single instruction too large to fit in a transaction\");\n    }\n    // Flush current buffer as its own tx and start a new one with this ix\n    result.push(buildTx(buffer));\n    buffer = [ix];\n    if (!fits(buffer)) {\n      throw new Error(\"Single instruction too large to fit in a transaction\");\n    }\n  }\n\n  // Flush any remaining\n  if (buffer.length > 0) {\n    result.push(buildTx(buffer));\n  }\n\n  return result;\n}\n\n/**\n * Enhances a given transaction with additional metadata.\n *\n * @param transaction - The transaction to be enhanced, can be either VersionedTransaction or Transaction.\n * @param options - An object containing optional metadata:\n *   - signers: An array of Signer objects that are associated with the transaction.\n *   - addressLookupTables: An array of AddressLookupTableAccount objects for address resolution.\n *   - unitsConsumed: A number representing the compute units consumed by the transaction.\n *   - type: The type of the transaction, as defined by TransactionType.\n * @returns A SolanaTransaction object that includes the original transaction and the additional metadata.\n */\nexport function addTransactionMetadata<T extends Transaction | VersionedTransaction>(\n  transaction: T,\n  options: ExtendedTransactionProperties\n): T & ExtendedTransactionProperties {\n  return Object.assign(transaction, options);\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const MEMO_PROGRAM_ID: PublicKey = new PublicKey(\n  \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n);\n\n/** Address of the SPL Associated Token Account program */\nexport const ASSOCIATED_TOKEN_PROGRAM_ID: PublicKey = new PublicKey(\n  \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n);\n\nexport const TOKEN_PROGRAM_ID = new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\");\nexport const TOKEN_2022_PROGRAM_ID = new PublicKey(\"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\");\n","/** Base class for errors */\nexport abstract class TokenError extends Error {\n  constructor(message?: string) {\n    super(message);\n  }\n}\n\n/** Thrown if an account is not found at the expected address */\nexport class TokenAccountNotFoundError extends TokenError {\n  name = \"TokenAccountNotFoundError\";\n}\n\n/** Thrown if a program state account is not a valid Account */\nexport class TokenInvalidAccountError extends TokenError {\n  name = \"TokenInvalidAccountError\";\n}\n\n/** Thrown if a program state account is not owned by the expected token program */\nexport class TokenInvalidAccountOwnerError extends TokenError {\n  name = \"TokenInvalidAccountOwnerError\";\n}\n\n/** Thrown if the byte length of an program state account doesn't match the expected size */\nexport class TokenInvalidAccountSizeError extends TokenError {\n  name = \"TokenInvalidAccountSizeError\";\n}\n\n/** Thrown if the mint of a token account doesn't match the expected mint */\nexport class TokenInvalidMintError extends TokenError {\n  name = \"TokenInvalidMintError\";\n}\n\n/** Thrown if the owner of a token account doesn't match the expected owner */\nexport class TokenInvalidOwnerError extends TokenError {\n  name = \"TokenInvalidOwnerError\";\n}\n\n/** Thrown if the owner of a token account is a PDA (Program Derived Address) */\nexport class TokenOwnerOffCurveError extends TokenError {\n  name = \"TokenOwnerOffCurveError\";\n}\n\n/** Thrown if an instruction's program is invalid */\nexport class TokenInvalidInstructionProgramError extends TokenError {\n  name = \"TokenInvalidInstructionProgramError\";\n}\n\n/** Thrown if an instruction's keys are invalid */\nexport class TokenInvalidInstructionKeysError extends TokenError {\n  name = \"TokenInvalidInstructionKeysError\";\n}\n\n/** Thrown if an instruction's data is invalid */\nexport class TokenInvalidInstructionDataError extends TokenError {\n  name = \"TokenInvalidInstructionDataError\";\n}\n\n/** Thrown if an instruction's type is invalid */\nexport class TokenInvalidInstructionTypeError extends TokenError {\n  name = \"TokenInvalidInstructionTypeError\";\n}\n\n/** Thrown if the program does not support the desired instruction */\nexport class TokenUnsupportedInstructionError extends TokenError {\n  name = \"TokenUnsupportedInstructionError\";\n}\n","import { Buffer } from \"buffer\";\n\nimport { struct, u32, u8 } from \"@solana/buffer-layout\";\nimport { publicKey, u64 } from \"@solana/buffer-layout-utils\";\nimport { AccountInfo, Commitment, Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { TOKEN_PROGRAM_ID } from \"../constants\";\nimport {\n  TokenAccountNotFoundError,\n  TokenInvalidAccountError,\n  TokenInvalidAccountOwnerError,\n  TokenInvalidAccountSizeError,\n} from \"../errors\";\nimport { Account, AccountState, RawAccount } from \"../types\";\n\nimport { MULTISIG_SIZE } from \"./multisig.utils\";\n\nexport enum SplAccountType {\n  Uninitialized,\n  Mint,\n  Account,\n}\n\nexport const ACCOUNT_TYPE_SIZE = 1;\n\n/** Buffer layout for de/serializing a token account */\nexport const AccountLayout = struct<RawAccount>([\n  publicKey(\"mint\"),\n  publicKey(\"owner\"),\n  u64(\"amount\"),\n  u32(\"delegateOption\"),\n  publicKey(\"delegate\"),\n  u8(\"state\"),\n  u32(\"isNativeOption\"),\n  u64(\"isNative\"),\n  u64(\"delegatedAmount\"),\n  u32(\"closeAuthorityOption\"),\n  publicKey(\"closeAuthority\"),\n]);\n\n/** Byte length of a token account */\nexport const ACCOUNT_SIZE = AccountLayout.span;\n\nexport const NATIVE_MINT = new PublicKey(\"So11111111111111111111111111111111111111112\");\n\n/**\n * Retrieve information about a token account\n *\n * @param connection Connection to use\n * @param address    Token account\n * @param commitment Desired level of commitment for querying the state\n * @param programId  SPL Token program account\n *\n * @return Token account information\n */\nexport async function getAccount(\n  connection: Connection,\n  address: PublicKey,\n  commitment?: Commitment,\n  programId = TOKEN_PROGRAM_ID\n): Promise<Account> {\n  const info = await connection.getAccountInfo(address, commitment);\n  return unpackAccount(address, info, programId);\n}\n\n/**\n * Retrieve information about multiple token accounts in a single RPC call\n *\n * @param connection Connection to use\n * @param addresses  Token accounts\n * @param commitment Desired level of commitment for querying the state\n * @param programId  SPL Token program account\n *\n * @return Token account information\n */\nexport async function getMultipleAccounts(\n  connection: Connection,\n  addresses: PublicKey[],\n  commitment?: Commitment,\n  programId = TOKEN_PROGRAM_ID\n): Promise<Account[]> {\n  const infos = await connection.getMultipleAccountsInfo(addresses, commitment);\n  return addresses.map((address, i) => unpackAccount(address, infos[i], programId));\n}\n\n/** Get the minimum lamport balance for a base token account to be rent exempt\n *\n * @param connection Connection to use\n * @param commitment Desired level of commitment for querying the state\n *\n * @return Amount of lamports required\n */\nexport async function getMinimumBalanceForRentExemptAccount(\n  connection: Connection,\n  commitment?: Commitment\n): Promise<number> {\n  return await getMinimumBalanceForRentExemptAccountWithExtensions(connection, [], commitment);\n}\n\nexport enum ExtensionType {\n  Uninitialized,\n  TransferFeeConfig,\n  TransferFeeAmount,\n  MintCloseAuthority,\n  ConfidentialTransferMint,\n  ConfidentialTransferAccount,\n  DefaultAccountState,\n  ImmutableOwner,\n  MemoTransfer,\n  NonTransferable,\n  InterestBearingMint,\n}\n\nexport function getAccountLen(extensionTypes: ExtensionType[]): number {\n  return getLen(extensionTypes, ACCOUNT_SIZE);\n}\n\nexport const TYPE_SIZE = 2;\nexport const LENGTH_SIZE = 2;\n\nfunction getLen(extensionTypes: ExtensionType[], baseSize: number): number {\n  if (extensionTypes.length === 0) {\n    return baseSize;\n  } else {\n    const accountLength = ACCOUNT_SIZE + ACCOUNT_TYPE_SIZE;\n    if (accountLength === MULTISIG_SIZE) {\n      return accountLength + TYPE_SIZE;\n    } else {\n      return accountLength;\n    }\n  }\n}\n\n/** Get the minimum lamport balance for a rent-exempt token account with extensions\n *\n * @param connection Connection to use\n * @param extensions\n * @param commitment Desired level of commitment for querying the state\n *\n * @return Amount of lamports required\n */\nexport async function getMinimumBalanceForRentExemptAccountWithExtensions(\n  connection: Connection,\n  extensions: ExtensionType[],\n  commitment?: Commitment\n): Promise<number> {\n  const accountLen = getAccountLen(extensions);\n  return await connection.getMinimumBalanceForRentExemption(accountLen, commitment);\n}\n\n/**\n * Unpack a token account\n *\n * @param address   Token account\n * @param info      Token account data\n * @param programId SPL Token program account\n *\n * @return Unpacked token account\n */\nexport function unpackAccount(\n  address: PublicKey,\n  info: AccountInfo<Buffer> | null,\n  programId = TOKEN_PROGRAM_ID\n): Account {\n  if (!info) throw new TokenAccountNotFoundError();\n  if (!info.owner.equals(programId)) throw new TokenInvalidAccountOwnerError();\n  if (info.data.length < ACCOUNT_SIZE) throw new TokenInvalidAccountSizeError();\n\n  const rawAccount = AccountLayout.decode(info.data.slice(0, ACCOUNT_SIZE));\n  let tlvData = Buffer.alloc(0);\n  if (info.data.length > ACCOUNT_SIZE) {\n    if (info.data.length === MULTISIG_SIZE) throw new TokenInvalidAccountSizeError();\n    if (info.data[ACCOUNT_SIZE] != SplAccountType.Account) throw new TokenInvalidAccountError();\n    tlvData = info.data.slice(ACCOUNT_SIZE + ACCOUNT_TYPE_SIZE);\n  }\n\n  return {\n    address,\n    mint: rawAccount.mint,\n    owner: rawAccount.owner,\n    amount: rawAccount.amount,\n    delegate: rawAccount.delegateOption ? rawAccount.delegate : null,\n    delegatedAmount: rawAccount.delegatedAmount,\n    isInitialized: rawAccount.state !== AccountState.Uninitialized,\n    isFrozen: rawAccount.state === AccountState.Frozen,\n    isNative: !!rawAccount.isNativeOption,\n    rentExemptReserve: rawAccount.isNativeOption ? rawAccount.isNative : null,\n    closeAuthority: rawAccount.closeAuthorityOption ? rawAccount.closeAuthority : null,\n    tlvData,\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"../constants\";\nimport { TokenOwnerOffCurveError } from \"../errors\";\n\n/**\n * Get the address of the associated token account for a given mint and owner\n *\n * @param mint                     Token mint account\n * @param owner                    Owner of the new account\n * @param allowOwnerOffCurve       Allow the owner account to be a PDA (Program Derived Address)\n * @param programId                SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Address of the associated token account\n */\nexport function getAssociatedTokenAddressSync(\n  mint: PublicKey,\n  owner: PublicKey,\n  allowOwnerOffCurve = false,\n  programId = TOKEN_PROGRAM_ID,\n  associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): PublicKey {\n  if (!allowOwnerOffCurve && !PublicKey.isOnCurve(owner.toBuffer()))\n    throw new TokenOwnerOffCurveError();\n\n  const [address] = PublicKey.findProgramAddressSync(\n    [owner.toBuffer(), programId.toBuffer(), mint.toBuffer()],\n    associatedTokenProgramId\n  );\n\n  return address;\n}\n","import { AccountMeta, PublicKey, Signer } from \"@solana/web3.js\";\n\n/** @internal */\nexport function addSigners(\n  keys: AccountMeta[],\n  ownerOrAuthority: PublicKey,\n  multiSigners: Signer[]\n): AccountMeta[] {\n  if (multiSigners.length) {\n    keys.push({ pubkey: ownerOrAuthority, isSigner: false, isWritable: false });\n    for (const signer of multiSigners) {\n      keys.push({\n        pubkey: signer.publicKey,\n        isSigner: true,\n        isWritable: false,\n      });\n    }\n  } else {\n    keys.push({ pubkey: ownerOrAuthority, isSigner: true, isWritable: false });\n  }\n  return keys;\n}\n","import { struct, u32, u8 } from \"@solana/buffer-layout\";\nimport { bool, publicKey, u64 } from \"@solana/buffer-layout-utils\";\nimport { Commitment, Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { TOKEN_PROGRAM_ID } from \"../constants\";\nimport {\n  TokenAccountNotFoundError,\n  TokenInvalidAccountOwnerError,\n  TokenInvalidAccountSizeError,\n} from \"../errors\";\nimport { Mint, RawMint } from \"../types\";\n\n/** Buffer layout for de/serializing a mint */\nexport const MintLayout = struct<RawMint>([\n  u32(\"mintAuthorityOption\"),\n  publicKey(\"mintAuthority\"),\n  u64(\"supply\"),\n  u8(\"decimals\"),\n  bool(\"isInitialized\"),\n  u32(\"freezeAuthorityOption\"),\n  publicKey(\"freezeAuthority\"),\n]);\n\n/** Byte length of a mint */\nexport const MINT_SIZE = MintLayout.span;\n\n/**\n * Retrieve information about a mint\n *\n * @param connection Connection to use\n * @param address    Mint account\n * @param commitment Desired level of commitment for querying the state\n * @param programId  SPL Token program account\n *\n * @return Mint information\n */\nexport async function getMint(\n  connection: Connection,\n  address: PublicKey,\n  commitment?: Commitment,\n  programId = TOKEN_PROGRAM_ID\n): Promise<Mint> {\n  const info = await connection.getAccountInfo(address, commitment);\n  if (!info) throw new TokenAccountNotFoundError();\n  if (!info.owner.equals(programId)) throw new TokenInvalidAccountOwnerError();\n  if (info.data.length != MINT_SIZE) throw new TokenInvalidAccountSizeError();\n\n  const rawMint = MintLayout.decode(info.data);\n\n  return {\n    address,\n    mintAuthority: rawMint.mintAuthorityOption ? rawMint.mintAuthority : null,\n    supply: rawMint.supply,\n    decimals: rawMint.decimals,\n    isInitialized: rawMint.isInitialized,\n    freezeAuthority: rawMint.freezeAuthorityOption ? rawMint.freezeAuthority : null,\n  };\n}\n","import { Buffer } from \"buffer\";\n\nimport { struct, u8 } from \"@solana/buffer-layout\";\nimport { u64 } from \"@solana/buffer-layout-utils\";\nimport {\n  PublicKey,\n  Signer,\n  SystemProgram,\n  SYSVAR_RENT_PUBKEY,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\n\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, MEMO_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"./constants\";\nimport { addSigners } from \"./utils/instruction.utils\";\n\n/**\n * Creates and returns an instruction which validates a string of UTF-8\n * encoded characters and verifies that any accounts provided are signers of\n * the transaction.  The program also logs the memo, as well as any verified\n * signer addresses, to the transaction log, so that anyone can easily observe\n * memos and know they were approved by zero or more addresses by inspecting\n * the transaction log from a trusted provider.\n *\n * Public keys passed in via the signerPubkeys will identify Signers which\n * must subsequently sign the Transaction including the returned\n * TransactionInstruction in order for the transaction to be valid.\n *\n * @param memo The UTF-8 encoded memo string to validate\n * @param signerPubkeys An array of public keys which must sign the\n *        Transaction including the returned TransactionInstruction in order\n *        for the transaction to be valid and the memo verification to\n *        succeed.  null is allowed if there are no signers for the memo\n *        verification.\n **/\nexport function createMemoInstruction(\n  memo: string,\n  signerPubkeys?: Array<PublicKey>\n): TransactionInstruction {\n  const keys =\n    signerPubkeys == null\n      ? []\n      : signerPubkeys.map(function (key) {\n          return { pubkey: key, isSigner: true, isWritable: false };\n        });\n\n  return new TransactionInstruction({\n    keys: keys,\n    programId: MEMO_PROGRAM_ID,\n    data: Buffer.from(memo, \"utf8\"),\n  });\n}\n\n/** Instructions defined by the program */\nexport enum TokenInstruction {\n  Approve = 4,\n  InitializeAccount = 1,\n  TransferChecked = 12,\n  CloseAccount = 9,\n  SyncNative = 17,\n}\n\n/** TODO: docs */\nexport interface ApproveInstructionData {\n  instruction: TokenInstruction.Approve;\n  amount: bigint;\n}\n\nexport const approveInstructionData = struct<ApproveInstructionData>([\n  u8(\"instruction\"),\n  u64(\"amount\"),\n]);\n\n/**\n * Construct an Approve instruction\n *\n * @param account      Account to set the delegate for\n * @param delegate     Account authorized to transfer tokens from the account\n * @param owner        Owner of the account\n * @param amount       Maximum number of tokens the delegate may transfer\n * @param multiSigners Signing accounts if `owner` is a multisig\n * @param programId    SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createApproveInstruction(\n  account: PublicKey,\n  delegate: PublicKey,\n  owner: PublicKey,\n  amount: number | bigint,\n  multiSigners: Signer[] = [],\n  programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = addSigners(\n    [\n      { pubkey: account, isSigner: false, isWritable: true },\n      { pubkey: delegate, isSigner: false, isWritable: false },\n    ],\n    owner,\n    multiSigners\n  );\n\n  const data = Buffer.alloc(approveInstructionData.span);\n  approveInstructionData.encode(\n    {\n      instruction: TokenInstruction.Approve,\n      amount: BigInt(amount),\n    },\n    data\n  );\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\n/** TODO: docs */\nexport interface InitializeAccountInstructionData {\n  instruction: TokenInstruction.InitializeAccount;\n}\n\nexport const initializeAccountInstructionData = struct<InitializeAccountInstructionData>([\n  u8(\"instruction\"),\n]);\n\n/**\n * Construct an InitializeAccount instruction\n *\n * @param account   New token account\n * @param mint      Mint account\n * @param owner     Owner of the new account\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createInitializeAccountInstruction(\n  account: PublicKey,\n  mint: PublicKey,\n  owner: PublicKey,\n  programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = [\n    { pubkey: account, isSigner: false, isWritable: true },\n    { pubkey: mint, isSigner: false, isWritable: false },\n    { pubkey: owner, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n  ];\n\n  const data = Buffer.alloc(initializeAccountInstructionData.span);\n  initializeAccountInstructionData.encode(\n    { instruction: TokenInstruction.InitializeAccount },\n    data\n  );\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\n/**\n * Construct an AssociatedTokenAccount instruction\n *\n * @param payer                    Payer of the initialization fees\n * @param associatedToken          New associated token account\n * @param owner                    Owner of the new account\n * @param mint                     Token mint account\n * @param programId                SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createAssociatedTokenAccountInstruction(\n  payer: PublicKey,\n  associatedToken: PublicKey,\n  owner: PublicKey,\n  mint: PublicKey,\n  programId = TOKEN_PROGRAM_ID,\n  associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = [\n    { pubkey: payer, isSigner: true, isWritable: true },\n    { pubkey: associatedToken, isSigner: false, isWritable: true },\n    { pubkey: owner, isSigner: false, isWritable: false },\n    { pubkey: mint, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n    { pubkey: programId, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: associatedTokenProgramId,\n    data: Buffer.alloc(0),\n  });\n}\n\n/**\n * Construct a CreateAssociatedTokenAccountIdempotent instruction\n *\n * @param payer                    Payer of the initialization fees\n * @param associatedToken          New associated token account\n * @param owner                    Owner of the new account\n * @param mint                     Token mint account\n * @param programId                SPL Token program account\n * @param associatedTokenProgramId SPL Associated Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createAssociatedTokenAccountIdempotentInstruction(\n  payer: PublicKey,\n  associatedToken: PublicKey,\n  owner: PublicKey,\n  mint: PublicKey,\n  programId = TOKEN_PROGRAM_ID,\n  associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  return buildAssociatedTokenAccountInstruction(\n    payer,\n    associatedToken,\n    owner,\n    mint,\n    Buffer.from([1]),\n    programId,\n    associatedTokenProgramId\n  );\n}\n\n/** TODO: docs */\nexport interface SyncNativeInstructionData {\n  instruction: TokenInstruction.SyncNative;\n}\n\n/** TODO: docs */\nexport const syncNativeInstructionData = struct<SyncNativeInstructionData>([u8(\"instruction\")]);\n\n/**\n * Construct a SyncNative instruction\n *\n * @param account   Native account to sync lamports from\n * @param programId SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createSyncNativeInstruction(\n  account: PublicKey,\n  programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = [{ pubkey: account, isSigner: false, isWritable: true }];\n\n  const data = Buffer.alloc(syncNativeInstructionData.span);\n  syncNativeInstructionData.encode({ instruction: TokenInstruction.SyncNative }, data);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\n/** TODO: docs */\nexport interface CloseAccountInstructionData {\n  instruction: TokenInstruction.CloseAccount;\n}\n\n/** TODO: docs */\nexport const closeAccountInstructionData = struct<CloseAccountInstructionData>([u8(\"instruction\")]);\n\n/**\n * Construct a CloseAccount instruction\n *\n * @param account      Account to close\n * @param destination  Account to receive the remaining balance of the closed account\n * @param authority    Account close authority\n * @param multiSigners Signing accounts if `authority` is a multisig\n * @param programId    SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createCloseAccountInstruction(\n  account: PublicKey,\n  destination: PublicKey,\n  authority: PublicKey,\n  multiSigners: Signer[] = [],\n  programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = addSigners(\n    [\n      { pubkey: account, isSigner: false, isWritable: true },\n      { pubkey: destination, isSigner: false, isWritable: true },\n    ],\n    authority,\n    multiSigners\n  );\n\n  const data = Buffer.alloc(closeAccountInstructionData.span);\n  closeAccountInstructionData.encode({ instruction: TokenInstruction.CloseAccount }, data);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction buildAssociatedTokenAccountInstruction(\n  payer: PublicKey,\n  associatedToken: PublicKey,\n  owner: PublicKey,\n  mint: PublicKey,\n  instructionData: Buffer,\n  programId = TOKEN_PROGRAM_ID,\n  associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = [\n    { pubkey: payer, isSigner: true, isWritable: true },\n    { pubkey: associatedToken, isSigner: false, isWritable: true },\n    { pubkey: owner, isSigner: false, isWritable: false },\n    { pubkey: mint, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n    { pubkey: programId, isSigner: false, isWritable: false },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: associatedTokenProgramId,\n    data: instructionData,\n  });\n}\n\n/** TODO: docs */\nexport interface TransferCheckedInstructionData {\n  instruction: TokenInstruction.TransferChecked;\n  amount: bigint;\n  decimals: number;\n}\n\n/** TODO: docs */\nexport const transferCheckedInstructionData = struct<TransferCheckedInstructionData>([\n  u8(\"instruction\"),\n  u64(\"amount\"),\n  u8(\"decimals\"),\n]);\n\n/**\n * Construct a TransferChecked instruction\n *\n * @param source       Source account\n * @param mint         Mint account\n * @param destination  Destination account\n * @param owner        Owner of the source account\n * @param amount       Number of tokens to transfer\n * @param decimals     Number of decimals in transfer amount\n * @param multiSigners Signing accounts if `owner` is a multisig\n * @param programId    SPL Token program account\n *\n * @return Instruction to add to a transaction\n */\nexport function createTransferCheckedInstruction(\n  source: PublicKey,\n  mint: PublicKey,\n  destination: PublicKey,\n  owner: PublicKey,\n  amount: number | bigint,\n  decimals: number,\n  multiSigners: Signer[] = [],\n  programId = TOKEN_PROGRAM_ID\n): TransactionInstruction {\n  const keys = addSigners(\n    [\n      { pubkey: source, isSigner: false, isWritable: true },\n      { pubkey: mint, isSigner: false, isWritable: false },\n      { pubkey: destination, isSigner: false, isWritable: true },\n    ],\n    owner,\n    multiSigners\n  );\n\n  const data = Buffer.alloc(transferCheckedInstructionData.span);\n  transferCheckedInstructionData.encode(\n    {\n      instruction: TokenInstruction.TransferChecked,\n      amount: BigInt(amount),\n      decimals,\n    },\n    data\n  );\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n","import { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { uiToNative } from \"~/utils\";\nimport {\n  createAssociatedTokenAccountIdempotentInstruction,\n  createCloseAccountInstruction,\n  createSyncNativeInstruction,\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n} from \"~/vendor/spl\";\n\nexport function makeUnwrapSolIx(walletAddress: PublicKey): TransactionInstruction {\n  const address = getAssociatedTokenAddressSync(NATIVE_MINT, walletAddress, true); // We allow off curve addresses here to support Fuse.\n  return createCloseAccountInstruction(address, walletAddress, walletAddress);\n}\n\nexport function makeWrapSolIxs(\n  walletAddress: PublicKey,\n  amount: BigNumber\n): TransactionInstruction[] {\n  const address = getAssociatedTokenAddressSync(NATIVE_MINT, walletAddress, true);\n  const ixs = [\n    createAssociatedTokenAccountIdempotentInstruction(\n      walletAddress,\n      address,\n      walletAddress,\n      NATIVE_MINT\n    ),\n  ];\n\n  if (amount.gt(0)) {\n    const nativeAmount = uiToNative(amount, 9).toNumber() + 10000;\n    ixs.push(\n      SystemProgram.transfer({\n        fromPubkey: walletAddress,\n        toPubkey: address,\n        lamports: nativeAmount,\n      }),\n      createSyncNativeInstruction(address)\n    );\n  }\n\n  return ixs;\n}\n","import {\n  VersionedTransaction,\n  Transaction,\n  Signer,\n  AddressLookupTableAccount,\n  PublicKey,\n  TransactionInstruction,\n  Keypair,\n} from \"@solana/web3.js\";\n\nexport interface InstructionsWrapper {\n  instructions: TransactionInstruction[];\n  keys: Keypair[];\n}\n\nexport enum TransactionType {\n  // BASE LENDING ACTIONS\n  DEPOSIT = \"DEPOSIT\",\n  WITHDRAW = \"WITHDRAW\",\n  REPAY = \"REPAY\",\n  BORROW = \"BORROW\",\n\n  // FLASHLOANS\n  FLASHLOAN = \"FLASHLOAN\",\n  LOOP = \"LOOP\",\n  REPAY_COLLAT = \"REPAY_COLLAT\",\n  LONG = \"LONG\",\n  SHORT = \"SHORT\",\n\n  // SETUP\n  CREATE_ACCOUNT = \"CREATE_ACCOUNT\",\n  CREATE_ATA = \"CREATE_ATA\",\n\n  // ACCOUNT MANAGEMENT\n  CLOSE_ACCOUNT = \"CLOSE_ACCOUNT\",\n  CLOSE_POSITION = \"CLOSE_POSITION\",\n  MOVE_POSITION_WITHDRAW = \"MOVE_POSITION_WITHDRAW\",\n  MOVE_POSITION_DEPOSIT = \"MOVE_POSITION_DEPOSIT\",\n  WITHDRAW_ALL = \"WITHDRAW_ALL\",\n  TRANSFER_AUTH = \"TRANSFER_AUTH\",\n\n  // SWB\n  CRANK = \"CRANK\",\n\n  // NATIVE STAKE ACTIONS\n  DEPOSIT_STAKE = \"DEPOSIT_STAKE\",\n  WITHDRAW_STAKE = \"WITHDRAW_STAKE\",\n  INITIALIZE_STAKED_POOL = \"INITIALIZE_STAKED_POOL\",\n  ADD_STAKED_BANK = \"ADD_STAKED_BANK\",\n\n  MERGE_STAKE_ACCOUNTS = \"MERGE_STAKE_ACCOUNTS\",\n\n  // GAMMA VAULT ACTIONS\n  VAULT_DEPOSIT = \"VAULT_DEPOSIT\",\n  VAULT_WITHDRAW = \"VAULT_WITHDRAW\",\n  VAULT_COMPLETE_WITHDRAWAL = \"VAULT_COMPLETE_WITHDRAWAL\",\n\n  // LST\n  STAKE_TO_STAKE = \"STAKE_TO_STAKE\",\n  MINT_LST_NATIVE = \"MINT_LST_NATIVE\",\n  SWAP_TO_SOL = \"SWAP_TO_SOL\",\n  SOL_TO_LST = \"SOL_TO_LST\",\n  UNSTAKE_LST = \"UNSTAKE_LST\",\n\n  // EMISSIONS\n  WITHDRAW_EMISSIONS = \"WITHDRAW_EMISSIONS\",\n\n  // LIQUIDATE\n  LIQUIDATE_ACCOUNT = \"LIQUIDATE_ACCOUNT\",\n\n  // BANK and GROUPS\n  CREATE_PERM_BANK = \"CREATE_PERM_BANK\",\n  CREATE_GROUP = \"CREATE_GROUP\",\n  JUPITER_SWAP = \"JUPITER_SWAP\",\n}\ninterface TransactionConfig {\n  label: (infoProps?: Record<string, any>) => string; // Always a function\n  fallback?: string; // Only for dynamic messages\n}\n\nexport const TransactionConfigMap: Record<TransactionType, TransactionConfig> = {\n  // BASE LENDING ACTIONS\n  [TransactionType.DEPOSIT]: {\n    label: ({ amount, token } = {}) => (amount && token ? `Deposit ${amount} ${token}` : \"Deposit\"),\n  },\n  [TransactionType.WITHDRAW]: {\n    label: ({ amount, token } = {}) =>\n      amount && token ? `Withdraw ${amount} ${token}` : \"Withdraw\",\n  },\n  [TransactionType.REPAY]: {\n    label: ({ amount, token } = {}) => (amount && token ? `Repay ${amount} ${token}` : \"Repay\"),\n  },\n  [TransactionType.BORROW]: {\n    label: ({ amount, token } = {}) => (amount && token ? `Borrow ${amount} ${token}` : \"Borrow\"),\n  },\n\n  // FLASHLOANS\n  [TransactionType.FLASHLOAN]: { label: () => \"Executing Flashloan\" },\n  [TransactionType.LOOP]: {\n    label: ({ depositAmount, depositToken, borrowAmount, borrowToken } = {}) =>\n      depositAmount && depositToken && borrowAmount && borrowToken\n        ? `Loop ${depositAmount} ${depositToken} with ${borrowAmount} ${borrowToken}`\n        : \"Loop\",\n  },\n  [TransactionType.REPAY_COLLAT]: {\n    label: ({ repayAmount, repayToken, amount, token } = {}) =>\n      repayAmount && repayToken && amount && token\n        ? `Repay ${repayAmount} ${token} with   ${amount} ${repayToken}`\n        : \"Repay with collateral\",\n  },\n  [TransactionType.LONG]: {\n    label: ({ depositToken, depositAmount, borrowToken } = {}) =>\n      depositToken && depositAmount && borrowToken\n        ? `Long ${depositToken} with ${depositAmount} ${borrowToken}`\n        : \"Open long position\",\n  },\n  [TransactionType.SHORT]: {\n    label: ({ borrowToken, depositAmount, depositToken } = {}) =>\n      borrowToken && depositAmount && depositToken\n        ? `Short ${borrowToken} with ${depositAmount} ${depositToken}`\n        : \"Open short position\",\n  },\n\n  // SWB\n  [TransactionType.CRANK]: { label: () => \"Updating latest prices\" },\n  [TransactionType.JUPITER_SWAP]: {\n    label: ({ originAmount, originToken, destinationAmount, destinationToken } = {}) =>\n      originAmount && originToken && destinationAmount && destinationToken\n        ? `Swap ${originAmount} ${originToken} for ${destinationAmount} ${destinationToken}`\n        : \"Swap tokens\",\n  },\n\n  // SETUP\n  [TransactionType.CREATE_ACCOUNT]: { label: () => \"Create marginfi account\" },\n  [TransactionType.CREATE_ATA]: { label: () => \"Configure token account\" },\n\n  // ACCOUNT MANAGEMENT\n  [TransactionType.CLOSE_ACCOUNT]: { label: () => \"Close marginfi account\" },\n  [TransactionType.CLOSE_POSITION]: { label: () => \"Close position\" },\n  [TransactionType.MOVE_POSITION_WITHDRAW]: {\n    label: ({ originAccountAddress } = {}) => `Move position from ${originAccountAddress}`,\n  },\n  [TransactionType.MOVE_POSITION_DEPOSIT]: {\n    label: ({ destinationAccountAddress } = {}) => `Move position to ${destinationAccountAddress}`,\n  },\n  [TransactionType.TRANSFER_AUTH]: { label: () => \"Authorize account transfer\" },\n\n  // NATIVE STAKE ACTIONS\n  [TransactionType.DEPOSIT_STAKE]: {\n    label: ({ amount, token } = {}) =>\n      amount && token\n        ? `Authorize stake account and deposit ${amount} ${token}`\n        : \"Authorize stake and deposit\",\n  },\n  [TransactionType.WITHDRAW_STAKE]: {\n    label: () => \"Authorize stake account\",\n  },\n  [TransactionType.INITIALIZE_STAKED_POOL]: { label: () => \"Initialize stake pool\" },\n  [TransactionType.ADD_STAKED_BANK]: { label: () => \"Create staked asset bank\" },\n  [TransactionType.MERGE_STAKE_ACCOUNTS]: { label: () => \"Merge stake accounts\" },\n\n  // GAMMA VAULT ACTIONS\n  [TransactionType.VAULT_DEPOSIT]: {\n    label: ({ amount, token } = {}) =>\n      amount && token ? `Deposit ${amount} ${token} into vault` : \"Deposit into vault\",\n  },\n  [TransactionType.VAULT_WITHDRAW]: {\n    label: ({ amount, token } = {}) =>\n      amount && token ? `Withdraw ${amount} ${token} from vault` : \"Withdraw from vault\",\n  },\n  [TransactionType.VAULT_COMPLETE_WITHDRAWAL]: {\n    label: () => \"Claim vault withdrawal\",\n  },\n\n  // LST (Liquid Staking Tokens)\n  [TransactionType.STAKE_TO_STAKE]: { label: () => \"Convert stake\" },\n  [TransactionType.MINT_LST_NATIVE]: { label: () => \"Mint LST\" },\n  [TransactionType.SWAP_TO_SOL]: {\n    label: ({ swapAmount, token } = {}) =>\n      swapAmount && token ? `Swap ${swapAmount} ${token} to SOL` : \"Swap to SOL\",\n  },\n  [TransactionType.SOL_TO_LST]: {\n    label: ({ amount } = {}) => (amount ? `Mint LST with ${amount} SOL` : \"Mint LST with SOL\"),\n  },\n  [TransactionType.UNSTAKE_LST]: {\n    label: ({ amount } = {}) => (amount ? `Unstake ${amount} LST` : \"Unstake LST\"),\n  },\n  // EMISSIONS\n  [TransactionType.WITHDRAW_EMISSIONS]: { label: () => \"Withdraw emissions\" },\n\n  // LIQUIDATE\n  [TransactionType.LIQUIDATE_ACCOUNT]: { label: () => \"Liquidate account\" },\n\n  // BANK and GROUPS\n  [TransactionType.CREATE_PERM_BANK]: { label: () => \"Create permissionless bank\" },\n  [TransactionType.CREATE_GROUP]: { label: () => \"Create marginfi group\" },\n  [TransactionType.WITHDRAW_ALL]: {\n    label: ({ amount, token } = {}) =>\n      amount && token ? `Withdraw ${amount} ${token}` : \"Withdraw all\",\n  },\n};\n\nexport const TransactionArenaKeyMap: Partial<Record<TransactionType, PublicKey>> = {\n  [TransactionType.DEPOSIT]: new PublicKey(\"ArenaDeposit1111111111111111111111111111111\"),\n  [TransactionType.WITHDRAW]: new PublicKey(\"ArenaWithdraw111111111111111111111111111111\"),\n  [TransactionType.BORROW]: new PublicKey(\"ArenaBorrow11111111111111111111111111111111\"),\n  [TransactionType.REPAY]: new PublicKey(\"ArenaRepay111111111111111111111111111111111\"),\n  [TransactionType.REPAY_COLLAT]: new PublicKey(\"ArenaRepayCo11at111111111111111111111111111\"),\n  [TransactionType.LONG]: new PublicKey(\"ArenaLong1111111111111111111111111111111111\"),\n  [TransactionType.SHORT]: new PublicKey(\"ArenaShort111111111111111111111111111111111\"),\n  [TransactionType.CLOSE_POSITION]: new PublicKey(\"ArenaC1ose111111111111111111111111111111111\"),\n  // Add more mappings if needed\n};\n\nexport type ExtendedTransactionProperties = {\n  type: TransactionType;\n  signers?: Array<Signer>;\n  addressLookupTables?: AddressLookupTableAccount[];\n  unitsConsumed?: number;\n};\n\nexport type ExtendedTransaction = Transaction & ExtendedTransactionProperties;\n\nexport type ExtendedV0Transaction = VersionedTransaction & ExtendedTransactionProperties;\n\nexport type SolanaTransaction = ExtendedTransaction | ExtendedV0Transaction;\n","import BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport {\n  BankConfigOptRaw,\n  RiskTierRaw,\n  BankConfigOpt,\n  RiskTier,\n  OperationalState,\n  OracleSetup,\n  OracleSetupRaw,\n  BankTypeDto,\n  BankType,\n  EmodeSettingsDto,\n  EmodeSettingsType,\n  BankConfigType,\n  BankConfigDto,\n  InterestRateConfigDto,\n  InterestRateConfig,\n  BankRaw,\n  BankRawDto,\n  BankConfigRaw,\n  BankConfigRawDto,\n  EmodeSettingsRaw,\n  EmodeSettingsRawDto,\n  InterestRateConfigOptRaw,\n  InterestRateConfigRaw,\n  BankRateLimiterType,\n  RateLimitWindowType,\n  BankRateLimiterDto,\n  RateLimitWindowDto,\n  BankRateLimiterRaw,\n  RateLimitWindowRaw,\n  BankRateLimiterRawDto,\n  RateLimitWindowRawDto,\n} from \"../types\";\n\nimport { bigNumberToWrappedI80F48 } from \"~/utils\";\n\nfunction serializeBankConfigOpt(bankConfigOpt: BankConfigOpt): BankConfigOptRaw {\n  const toWrappedI80F48 = (value: BigNumber | null) => value && bigNumberToWrappedI80F48(value);\n  const toBN = (value: BigNumber | null) => value && new BN(value.toString());\n\n  return {\n    assetWeightInit: toWrappedI80F48(bankConfigOpt.assetWeightInit),\n    assetWeightMaint: toWrappedI80F48(bankConfigOpt.assetWeightMaint),\n    liabilityWeightInit: toWrappedI80F48(bankConfigOpt.liabilityWeightInit),\n    liabilityWeightMaint: toWrappedI80F48(bankConfigOpt.liabilityWeightMaint),\n    depositLimit: toBN(bankConfigOpt.depositLimit),\n    borrowLimit: toBN(bankConfigOpt.borrowLimit),\n    riskTier: bankConfigOpt.riskTier && serializeRiskTier(bankConfigOpt.riskTier),\n    totalAssetValueInitLimit: toBN(bankConfigOpt.totalAssetValueInitLimit),\n    assetTag: bankConfigOpt.assetTag !== null ? Number(bankConfigOpt.assetTag) : 0,\n    interestRateConfig:\n      bankConfigOpt.interestRateConfig &&\n      ({\n        insuranceFeeFixedApr: toWrappedI80F48(\n          bankConfigOpt.interestRateConfig.insuranceFeeFixedApr\n        ),\n        insuranceIrFee: toWrappedI80F48(bankConfigOpt.interestRateConfig.insuranceIrFee),\n        protocolFixedFeeApr: toWrappedI80F48(bankConfigOpt.interestRateConfig.protocolFixedFeeApr),\n        protocolIrFee: toWrappedI80F48(bankConfigOpt.interestRateConfig.protocolIrFee),\n        protocolOriginationFee: toWrappedI80F48(\n          bankConfigOpt.interestRateConfig.protocolOriginationFee\n        ),\n        zeroUtilRate: bankConfigOpt.interestRateConfig.zeroUtilRate,\n        hundredUtilRate: bankConfigOpt.interestRateConfig.hundredUtilRate,\n        points: bankConfigOpt.interestRateConfig.points,\n      } as InterestRateConfigOptRaw),\n    operationalState:\n      bankConfigOpt.operationalState && serializeOperationalState(bankConfigOpt.operationalState),\n    oracleMaxAge: bankConfigOpt.oracleMaxAge,\n    permissionlessBadDebtSettlement: bankConfigOpt.permissionlessBadDebtSettlement,\n    freezeSettings: bankConfigOpt.freezeSettings,\n    tokenlessRepaymentsAllowed: bankConfigOpt.tokenlessRepaymentsAllowed,\n    oracleMaxConfidence: bankConfigOpt.oracleMaxConfidence,\n    liquidationLiquidatorFee: null,\n    liquidationInsuranceFee: null,\n    circuitBreakerEnabled: null,\n    cbDeviationBpsTiers: null,\n    cbTierDurationsSeconds: null,\n    cbEscalationWindowMult: null,\n    cbEmaAlphaBps: null,\n    cbWindowSeconds: null,\n    cbWindowMaxUpBps: null,\n    cbWindowMaxDownBps: null,\n  };\n}\n\nfunction serializeInterestRateConfig(\n  interestRateConfig: InterestRateConfig\n): InterestRateConfigRaw {\n  return {\n    placeholder0: bigNumberToWrappedI80F48(interestRateConfig.placeholder0),\n    placeholder1: bigNumberToWrappedI80F48(interestRateConfig.placeholder1),\n    placeholder2: bigNumberToWrappedI80F48(interestRateConfig.placeholder2),\n\n    insuranceFeeFixedApr: bigNumberToWrappedI80F48(interestRateConfig.insuranceFeeFixedApr),\n    insuranceIrFee: bigNumberToWrappedI80F48(interestRateConfig.insuranceIrFee),\n    protocolFixedFeeApr: bigNumberToWrappedI80F48(interestRateConfig.protocolFixedFeeApr),\n    protocolIrFee: bigNumberToWrappedI80F48(interestRateConfig.protocolIrFee),\n    protocolOriginationFee: bigNumberToWrappedI80F48(interestRateConfig.protocolOriginationFee),\n    zeroUtilRate: interestRateConfig.zeroUtilRate,\n    hundredUtilRate: interestRateConfig.hundredUtilRate,\n    points: interestRateConfig.points,\n    curveType: interestRateConfig.curveType,\n  };\n}\n\nfunction serializeRiskTier(riskTier: RiskTier): RiskTierRaw {\n  switch (riskTier) {\n    case RiskTier.Collateral:\n      return { collateral: {} };\n    case RiskTier.Isolated:\n      return { isolated: {} };\n    default:\n      throw new Error(`Invalid risk tier \"${riskTier}\"`);\n  }\n}\n\nfunction serializeOperationalState(\n  operationalState: OperationalState\n):\n  | { paused: Record<string, never> }\n  | { operational: Record<string, never> }\n  | { reduceOnly: Record<string, never> } {\n  switch (operationalState) {\n    case OperationalState.Paused:\n      return { paused: {} };\n    case OperationalState.Operational:\n      return { operational: {} };\n    case OperationalState.ReduceOnly:\n      return { reduceOnly: {} };\n    default:\n      throw new Error(`Invalid operational state \"${operationalState}\"`);\n  }\n}\n\nfunction serializeOracleSetupToIndex(oracleSetup: OracleSetup): number {\n  switch (oracleSetup) {\n    case OracleSetup.None:\n      return 0;\n    case OracleSetup.PythLegacy:\n      return 1;\n    case OracleSetup.SwitchboardV2:\n      return 2;\n    case OracleSetup.PythPushOracle:\n      return 3;\n    case OracleSetup.SwitchboardPull:\n      return 4;\n    case OracleSetup.StakedWithPythPush:\n      return 5;\n    case OracleSetup.KaminoPythPush:\n      return 6;\n    case OracleSetup.KaminoSwitchboardPull:\n      return 7;\n    case OracleSetup.Fixed:\n      return 8;\n    case OracleSetup.DriftPythPull:\n      return 9;\n    case OracleSetup.DriftSwitchboardPull:\n      return 10;\n    case OracleSetup.SolendPythPull:\n      return 11;\n    case OracleSetup.SolendSwitchboardPull:\n      return 12;\n    case OracleSetup.FixedKamino:\n      return 13;\n    case OracleSetup.FixedDrift:\n      return 14;\n    case OracleSetup.JuplendPythPull:\n      return 15;\n    case OracleSetup.JuplendSwitchboardPull:\n      return 16;\n    case OracleSetup.FixedJuplend:\n      return 17;\n    case OracleSetup.Scope:\n      return 18;\n    case OracleSetup.PythMSOL:\n      return 19;\n    case OracleSetup.KaminoMSOL:\n      return 20;\n    case OracleSetup.JuplendMSOL:\n      return 21;\n    case OracleSetup.PythLST:\n      return 22;\n    case OracleSetup.KaminoLST:\n      return 23;\n    case OracleSetup.JuplendLST:\n      return 24;\n    case OracleSetup.PTPyth:\n      return 25;\n    case OracleSetup.PTFixed:\n      return 26;\n    default:\n      throw new Error(`Cannot serialize oracle setup \"${oracleSetup}\"`);\n  }\n}\n\nfunction serializeOracleSetup(oracleSetup: OracleSetup): OracleSetupRaw {\n  switch (oracleSetup) {\n    case OracleSetup.None:\n      return { none: {} };\n    case OracleSetup.PythLegacy:\n      return { pythLegacy: {} };\n    case OracleSetup.SwitchboardV2:\n      return { switchboardV2: {} };\n    case OracleSetup.PythPushOracle:\n      return { pythPushOracle: {} };\n    case OracleSetup.SwitchboardPull:\n      return { switchboardPull: {} };\n    case OracleSetup.StakedWithPythPush:\n      return { stakedWithPythPush: {} };\n    case OracleSetup.KaminoPythPush:\n      return { kaminoPythPush: {} };\n    case OracleSetup.KaminoSwitchboardPull:\n      return { kaminoSwitchboardPull: {} };\n    case OracleSetup.Fixed:\n      return { fixed: {} };\n    case OracleSetup.DriftPythPull:\n      return { driftPythPull: {} };\n    case OracleSetup.DriftSwitchboardPull:\n      return { driftSwitchboardPull: {} };\n    case OracleSetup.SolendPythPull:\n      return { solendPythPull: {} };\n    case OracleSetup.SolendSwitchboardPull:\n      return { solendSwitchboardPull: {} };\n    case OracleSetup.FixedKamino:\n      return { fixedKamino: {} };\n    case OracleSetup.FixedDrift:\n      return { fixedDrift: {} };\n    case OracleSetup.JuplendPythPull:\n      return { juplendPythPull: {} };\n    case OracleSetup.JuplendSwitchboardPull:\n      return { juplendSwitchboardPull: {} };\n    case OracleSetup.FixedJuplend:\n      return { fixedJuplend: {} };\n    case OracleSetup.Scope:\n      return { scope: {} };\n    case OracleSetup.PythMSOL:\n      return { pythMsol: {} };\n    case OracleSetup.KaminoMSOL:\n      return { kaminoMsol: {} };\n    case OracleSetup.JuplendMSOL:\n      return { juplendMsol: {} };\n    case OracleSetup.PythLST:\n      return { pythLst: {} };\n    case OracleSetup.KaminoLST:\n      return { kaminoLst: {} };\n    case OracleSetup.JuplendLST:\n      return { juplendLst: {} };\n    case OracleSetup.PTPyth:\n      return { ptPyth: {} };\n    case OracleSetup.PTFixed:\n      return { ptFixed: {} };\n    default:\n      throw new Error(`Invalid oracle setup \"${oracleSetup}\"`);\n  }\n}\n\nfunction toBankDto(bank: BankType): BankTypeDto {\n  return {\n    address: bank.address.toBase58(),\n    group: bank.group.toBase58(),\n    mint: bank.mint.toBase58(),\n    mintDecimals: bank.mintDecimals,\n    assetShareValue: bank.assetShareValue.toString(),\n    liabilityShareValue: bank.liabilityShareValue.toString(),\n    liquidityVault: bank.liquidityVault.toBase58(),\n    liquidityVaultBump: bank.liquidityVaultBump,\n    liquidityVaultAuthorityBump: bank.liquidityVaultAuthorityBump,\n    insuranceVault: bank.insuranceVault.toBase58(),\n    insuranceVaultBump: bank.insuranceVaultBump,\n    insuranceVaultAuthorityBump: bank.insuranceVaultAuthorityBump,\n    collectedInsuranceFeesOutstanding: bank.collectedInsuranceFeesOutstanding.toString(),\n    feeVault: bank.feeVault.toBase58(),\n    feeVaultBump: bank.feeVaultBump,\n    feeVaultAuthorityBump: bank.feeVaultAuthorityBump,\n    collectedGroupFeesOutstanding: bank.collectedGroupFeesOutstanding.toString(),\n    lastUpdate: bank.lastUpdate,\n    config: toBankConfigDto(bank.config),\n    totalAssetShares: bank.totalAssetShares.toString(),\n    totalLiabilityShares: bank.totalLiabilityShares.toString(),\n    emissionsActiveBorrowing: bank.emissionsActiveBorrowing,\n    emissionsActiveLending: bank.emissionsActiveLending,\n    stakedOracleDisabled: bank.stakedOracleDisabled,\n    stakedOracleUsesOnramp: bank.stakedOracleUsesOnramp,\n    emissionsRate: bank.emissionsRate,\n    emissionsMint: bank.emissionsMint.toBase58(),\n    emissionsRemaining: bank.emissionsRemaining.toString(),\n    collectedProgramFeesOutstanding: bank.collectedProgramFeesOutstanding.toString(),\n    oracleKey: bank.oracleKey.toBase58(),\n    emode: toEmodeSettingsDto(bank.emode),\n    rateLimiter: bank.rateLimiter ? toBankRateLimiterDto(bank.rateLimiter) : undefined,\n    tokenSymbol: bank.tokenSymbol,\n    feesDestinationAccount: bank.feesDestinationAccount?.toBase58(),\n    lendingPositionCount: bank.lendingPositionCount?.toString(),\n    borrowingPositionCount: bank.borrowingPositionCount?.toString(),\n    kaminoIntegrationAccounts: bank.kaminoIntegrationAccounts\n      ? {\n          kaminoReserve: bank.kaminoIntegrationAccounts.kaminoReserve.toBase58(),\n          kaminoObligation: bank.kaminoIntegrationAccounts.kaminoObligation.toBase58(),\n        }\n      : undefined,\n    driftIntegrationAccounts: bank.driftIntegrationAccounts\n      ? {\n          driftSpotMarket: bank.driftIntegrationAccounts.driftSpotMarket.toBase58(),\n          driftUser: bank.driftIntegrationAccounts.driftUser.toBase58(),\n          driftUserStats: bank.driftIntegrationAccounts.driftUserStats.toBase58(),\n        }\n      : undefined,\n    solendIntegrationAccounts: bank.solendIntegrationAccounts\n      ? {\n          solendReserve: bank.solendIntegrationAccounts.solendReserve.toBase58(),\n          solendObligation: bank.solendIntegrationAccounts.solendObligation.toBase58(),\n        }\n      : undefined,\n    jupLendIntegrationAccounts: bank.jupLendIntegrationAccounts\n      ? {\n          jupLendingState: bank.jupLendIntegrationAccounts.jupLendingState.toBase58(),\n          jupFTokenVault: bank.jupLendIntegrationAccounts.jupFTokenVault.toBase58(),\n          jupFTokenAta: bank.jupLendIntegrationAccounts.jupFTokenAta.toBase58(),\n        }\n      : undefined,\n    stakedIntegrationAccounts: bank.stakedIntegrationAccounts\n      ? {\n          validatorVoteAccount: bank.stakedIntegrationAccounts.validatorVoteAccount.toBase58(),\n        }\n      : undefined,\n  };\n}\n\nfunction toRateLimitWindowDto(window: RateLimitWindowType): RateLimitWindowDto {\n  return {\n    maxOutflow: window.maxOutflow.toString(),\n    windowDuration: window.windowDuration,\n    windowStart: window.windowStart,\n    prevWindowOutflow: window.prevWindowOutflow.toString(),\n    curWindowOutflow: window.curWindowOutflow.toString(),\n  };\n}\n\nexport function toBankRateLimiterDto(rateLimiter: BankRateLimiterType): BankRateLimiterDto {\n  return {\n    hourly: toRateLimitWindowDto(rateLimiter.hourly),\n    daily: toRateLimitWindowDto(rateLimiter.daily),\n  };\n}\n\nfunction toEmodeSettingsDto(emodeSettings: EmodeSettingsType): EmodeSettingsDto {\n  return {\n    emodeTag: emodeSettings.emodeTag,\n    timestamp: emodeSettings.timestamp,\n    flags: emodeSettings.flags,\n    emodeEntries: emodeSettings.emodeEntries.map((entry) => {\n      return {\n        collateralBankEmodeTag: entry.collateralBankEmodeTag,\n        flags: entry.flags,\n        assetWeightInit: entry.assetWeightInit.toString(),\n        assetWeightMaint: entry.assetWeightMaint.toString(),\n      };\n    }),\n  };\n}\n\nfunction toBankConfigDto(bankConfig: BankConfigType): BankConfigDto {\n  return {\n    assetWeightInit: bankConfig.assetWeightInit.toString(),\n    assetWeightMaint: bankConfig.assetWeightMaint.toString(),\n    liabilityWeightInit: bankConfig.liabilityWeightInit.toString(),\n    liabilityWeightMaint: bankConfig.liabilityWeightMaint.toString(),\n    depositLimit: bankConfig.depositLimit.toString(),\n    borrowLimit: bankConfig.borrowLimit.toString(),\n    riskTier: bankConfig.riskTier,\n    operationalState: bankConfig.operationalState,\n    totalAssetValueInitLimit: bankConfig.totalAssetValueInitLimit.toString(),\n    assetTag: bankConfig.assetTag,\n    oracleSetup: bankConfig.oracleSetup,\n    oracleKeys: bankConfig.oracleKeys.map((key) => key.toBase58()),\n    oracleMaxAge: bankConfig.oracleMaxAge,\n    interestRateConfig: toInterestRateConfigDto(bankConfig.interestRateConfig),\n    configFlags: bankConfig.configFlags,\n    oracleMaxConfidence: bankConfig.oracleMaxConfidence,\n    fixedPrice: bankConfig.fixedPrice.toString(),\n    scopeEntryIndex: bankConfig.scopeEntryIndex,\n  };\n}\n\nfunction toInterestRateConfigDto(interestRateConfig: InterestRateConfig): InterestRateConfigDto {\n  return {\n    placeholder0: interestRateConfig.placeholder0.toString(),\n    placeholder1: interestRateConfig.placeholder1.toString(),\n    placeholder2: interestRateConfig.placeholder2.toString(),\n    insuranceFeeFixedApr: interestRateConfig.insuranceFeeFixedApr.toString(),\n    insuranceIrFee: interestRateConfig.insuranceIrFee.toString(),\n    protocolFixedFeeApr: interestRateConfig.protocolFixedFeeApr.toString(),\n    protocolIrFee: interestRateConfig.protocolIrFee.toString(),\n    protocolOriginationFee: interestRateConfig.protocolOriginationFee.toString(),\n    zeroUtilRate: interestRateConfig.zeroUtilRate,\n    hundredUtilRate: interestRateConfig.hundredUtilRate,\n    points: interestRateConfig.points,\n    curveType: interestRateConfig.curveType,\n  };\n}\n\nexport function bankRawToDto(bankRaw: BankRaw): BankRawDto {\n  return {\n    group: bankRaw.group.toBase58(),\n    mint: bankRaw.mint.toBase58(),\n    mintDecimals: bankRaw.mintDecimals,\n\n    assetShareValue: bankRaw.assetShareValue,\n    liabilityShareValue: bankRaw.liabilityShareValue,\n\n    liquidityVault: bankRaw.liquidityVault.toBase58(),\n    liquidityVaultBump: bankRaw.liquidityVaultBump,\n    liquidityVaultAuthorityBump: bankRaw.liquidityVaultAuthorityBump,\n\n    insuranceVault: bankRaw.insuranceVault.toBase58(),\n    insuranceVaultBump: bankRaw.insuranceVaultBump,\n    insuranceVaultAuthorityBump: bankRaw.insuranceVaultAuthorityBump,\n    collectedInsuranceFeesOutstanding: bankRaw.collectedInsuranceFeesOutstanding,\n\n    feeVault: bankRaw.feeVault.toBase58(),\n    feeVaultBump: bankRaw.feeVaultBump,\n    feeVaultAuthorityBump: bankRaw.feeVaultAuthorityBump,\n    collectedGroupFeesOutstanding: bankRaw.collectedGroupFeesOutstanding,\n\n    lastUpdate: bankRaw.lastUpdate.toString(),\n\n    config: bankConfigRawToDto(bankRaw.config),\n\n    totalAssetShares: bankRaw.totalAssetShares,\n    totalLiabilityShares: bankRaw.totalLiabilityShares,\n\n    flags: bankRaw.flags.toString(),\n    emissionsRate: bankRaw.emissionsRate.toString(),\n    emissionsRemaining: bankRaw.emissionsRemaining,\n    emissionsMint: bankRaw.emissionsMint.toBase58(),\n    collectedProgramFeesOutstanding: bankRaw.collectedProgramFeesOutstanding,\n    rateLimiter: bankRaw.rateLimiter ? bankRateLimiterRawToDto(bankRaw.rateLimiter) : undefined,\n    feesDestinationAccount: bankRaw?.feesDestinationAccount?.toBase58(),\n    lendingPositionCount: bankRaw?.lendingPositionCount?.toString(),\n    borrowingPositionCount: bankRaw?.borrowingPositionCount?.toString(),\n\n    emode: emodeSettingsRawToDto(bankRaw.emode),\n    integrationAcc1: bankRaw.integrationAcc1.toBase58(),\n    integrationAcc2: bankRaw.integrationAcc2.toBase58(),\n    integrationAcc3: bankRaw.integrationAcc3.toBase58(),\n  };\n}\n\nfunction rateLimitWindowRawToDto(window: RateLimitWindowRaw): RateLimitWindowRawDto {\n  return {\n    maxOutflow: window.maxOutflow.toString(),\n    windowDuration: window.windowDuration.toString(),\n    windowStart: window.windowStart.toString(),\n    prevWindowOutflow: window.prevWindowOutflow.toString(),\n    curWindowOutflow: window.curWindowOutflow.toString(),\n  };\n}\n\nexport function bankRateLimiterRawToDto(rateLimiter: BankRateLimiterRaw): BankRateLimiterRawDto {\n  return {\n    hourly: rateLimitWindowRawToDto(rateLimiter.hourly),\n    daily: rateLimitWindowRawToDto(rateLimiter.daily),\n  };\n}\n\nexport function emodeSettingsRawToDto(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettingsRawDto {\n  return {\n    emodeTag: emodeSettingsRaw.emodeTag,\n    timestamp: emodeSettingsRaw.timestamp.toString(),\n    flags: emodeSettingsRaw.flags.toString(),\n    emodeConfig: {\n      entries: emodeSettingsRaw.emodeConfig.entries.map((entry) => {\n        return {\n          collateralBankEmodeTag: entry.collateralBankEmodeTag,\n          flags: entry.flags,\n          assetWeightInit: entry.assetWeightInit,\n          assetWeightMaint: entry.assetWeightMaint,\n        };\n      }),\n    },\n  };\n}\n\nfunction bankConfigToBankConfigRaw(config: BankConfigType): BankConfigRaw {\n  return {\n    assetWeightInit: bigNumberToWrappedI80F48(config.assetWeightInit),\n    assetWeightMaint: bigNumberToWrappedI80F48(config.assetWeightMaint),\n    liabilityWeightInit: bigNumberToWrappedI80F48(config.liabilityWeightInit),\n    liabilityWeightMaint: bigNumberToWrappedI80F48(config.liabilityWeightMaint),\n    depositLimit: new BN(config.depositLimit.toString()),\n    interestRateConfig: serializeInterestRateConfig(config.interestRateConfig),\n    operationalState: serializeOperationalState(config.operationalState),\n    oracleSetup: serializeOracleSetup(config.oracleSetup),\n    oracleKeys: config.oracleKeys,\n    configFlags: config.configFlags,\n    borrowLimit: new BN(config.borrowLimit.toString()),\n    riskTier: serializeRiskTier(config.riskTier),\n    assetTag: config.assetTag,\n    totalAssetValueInitLimit: new BN(config.totalAssetValueInitLimit.toString()),\n    oracleMaxAge: config.oracleMaxAge,\n    oracleMaxConfidence: config.oracleMaxConfidence,\n    fixedPrice: bigNumberToWrappedI80F48(config.fixedPrice),\n    scopeEntryIndex: config.scopeEntryIndex,\n  };\n}\n\nexport function bankConfigRawToDto(bankConfigRaw: BankConfigRaw): BankConfigRawDto {\n  return {\n    assetWeightInit: bankConfigRaw.assetWeightInit,\n    assetWeightMaint: bankConfigRaw.assetWeightMaint,\n    liabilityWeightInit: bankConfigRaw.liabilityWeightInit,\n    liabilityWeightMaint: bankConfigRaw.liabilityWeightMaint,\n    depositLimit: bankConfigRaw.depositLimit.toString(),\n    borrowLimit: bankConfigRaw.borrowLimit.toString(),\n    riskTier: bankConfigRaw.riskTier,\n    operationalState: bankConfigRaw.operationalState,\n    totalAssetValueInitLimit: bankConfigRaw.totalAssetValueInitLimit.toString(),\n    assetTag: bankConfigRaw.assetTag,\n    oracleSetup: bankConfigRaw.oracleSetup,\n    oracleKeys: bankConfigRaw.oracleKeys.map((key) => key.toBase58()),\n    oracleMaxAge: bankConfigRaw.oracleMaxAge,\n    interestRateConfig: bankConfigRaw.interestRateConfig,\n    configFlags: bankConfigRaw.configFlags,\n    oracleMaxConfidence: bankConfigRaw.oracleMaxConfidence,\n    fixedPrice: bankConfigRaw.fixedPrice,\n    scopeEntryIndex: bankConfigRaw.scopeEntryIndex,\n  };\n}\n\nexport {\n  serializeInterestRateConfig,\n  serializeOracleSetupToIndex,\n  bankConfigToBankConfigRaw,\n  serializeBankConfigOpt,\n  serializeRiskTier,\n  serializeOperationalState,\n  serializeOracleSetup,\n  toBankDto,\n  toEmodeSettingsDto,\n  toBankConfigDto,\n  toInterestRateConfigDto,\n};\n","import { Program as AnchorProgram, AnchorProvider, Idl } from \"@coral-xyz/anchor\";\nimport { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { MarginfiIdlType } from \"./idl\";\nimport { Bank } from \"./models/bank\";\nimport { OraclePrice } from \"./services\";\nimport {\n  DriftRewards,\n  DriftRewardsJSON,\n  DriftSpotMarket,\n  DriftSpotMarketJSON,\n  DriftUser,\n  DriftUserJSON,\n  DriftUserStats,\n  DriftUserStatsJSON,\n  KaminoFarmState,\n  KaminoFarmStateJSON,\n  KaminoObligation,\n  KaminoObligationJSON,\n  KaminoReserve,\n  KaminoReserveJSON,\n  JupLendingRewardsRateModel,\n  JupLendingRewardsRateModelJSON,\n  JupLendingState,\n  JupLendingStateJSON,\n  JupRateModel,\n  JupRateModelJSON,\n  JupTokenReserve,\n  JupTokenReserveJSON,\n} from \"./vendor\";\n\n// Define MintData here to break circular dependencies\nexport type MintData = {\n  mint: PublicKey;\n  tokenProgram: PublicKey;\n  // deprecated\n  emissionTokenProgram?: PublicKey | null;\n};\n\nexport type Program<T extends Idl> = Omit<AnchorProgram<T>, \"provider\"> & {\n  provider: AnchorProvider;\n};\n\nexport type MarginfiProgram = Program<MarginfiIdlType>;\n\nexport type Wallet = {\n  publicKey: PublicKey;\n  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;\n  signAllTransactions<T extends Transaction | VersionedTransaction>(\n    transactions: T[]\n  ): Promise<T[]>;\n  signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n};\n\nexport interface BankMetadata {\n  validatorVoteAccount?: string;\n  tokenAddress: string;\n  tokenName: string;\n  tokenSymbol: string;\n}\n\n/**\n * Supported config environments.\n */\nexport type Environment = \"production\" | \"staging\" | \"staging-mainnet-clone\" | \"staging-alt\";\n\nexport interface Project0Config {\n  environment: Environment;\n  programId: PublicKey;\n  groupPk: PublicKey;\n}\n\nexport interface BankAddress {\n  label: string;\n  address: PublicKey;\n}\n\n// --- On-chain account structs\n\nexport enum AccountType {\n  MarginfiGroup = \"marginfiGroup\",\n  MarginfiAccount = \"marginfiAccount\",\n  Bank = \"bank\",\n}\n\nexport type KaminoStates = {\n  reserveState: KaminoReserve;\n  obligationState: KaminoObligation;\n  farmState?: KaminoFarmState;\n};\n\nexport type BankIntegrationMetadata = {\n  kaminoStates?: {\n    reserveState: KaminoReserve;\n    obligationState: KaminoObligation;\n    farmState?: KaminoFarmState;\n  };\n  driftStates?: {\n    spotMarketState: DriftSpotMarket;\n    userState: DriftUser;\n    userRewards: DriftRewards[];\n    userStatsState?: DriftUserStats;\n  };\n  jupLendStates?: {\n    jupLendingState: JupLendingState;\n    jupTokenReserveState: JupTokenReserve;\n    jupRewardsRateModel: JupLendingRewardsRateModel | null;\n    jupRateModel: JupRateModel | null;\n    fTokenTotalSupply: BN;\n  };\n};\n\nexport type BankIntegrationMetadataDto = {\n  kaminoStates?: {\n    reserveState: KaminoReserveJSON;\n    obligationState: KaminoObligationJSON;\n    farmState?: KaminoFarmStateJSON;\n  };\n  driftStates?: {\n    spotMarketState: DriftSpotMarketJSON;\n    userState: DriftUserJSON;\n    userRewards: DriftRewardsJSON[];\n    userStatsState?: DriftUserStatsJSON;\n  };\n  jupLendStates?: {\n    jupLendingState: JupLendingStateJSON;\n    jupTokenReserveState: JupTokenReserveJSON;\n    jupRewardsRateModel: JupLendingRewardsRateModelJSON | null;\n    jupRateModel: JupRateModelJSON | null;\n    fTokenTotalSupply: string;\n  };\n};\n\nexport type BankIntegrationMetadataMap = {\n  [address: string]: BankIntegrationMetadata;\n};\nexport type BankIntegrationMetadataMapDto = {\n  [address: string]: BankIntegrationMetadataDto;\n};\nexport type BankMap = Map<string, Bank>;\nexport type OraclePriceMap = Map<string, OraclePrice>;\nexport type MintDataMap = Map<string, MintData>;\n\nexport interface WrappedI80F48 {\n  value: number[];\n}\n\nexport type Amount = BigNumber | number | string;\n\nexport type AmountType = \"uiToken\" | \"cToken\";\n\nexport type TypedAmount = {\n  value: Amount;\n  type: AmountType;\n};\n\nexport function resolveAmount(amount: Amount | TypedAmount): { value: Amount; type: AmountType } {\n  if (typeof amount === \"object\" && amount !== null && \"type\" in amount && \"value\" in amount) {\n    return amount;\n  }\n  return { value: amount as Amount, type: \"uiToken\" };\n}\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport {\n  AssetTag,\n  BankConfigRaw,\n  BankConfigType,\n  BankRaw,\n  BankType,\n  EmodeEntryFlags,\n  EmodeFlags,\n  EmodeSettingsType,\n  EmodeTag,\n  InterestRateConfig,\n  OperationalState,\n  OperationalStateRaw,\n  OracleSetup,\n  OracleSetupRaw,\n  RiskTier,\n  RiskTierRaw,\n  BankConfigDto,\n  BankTypeDto,\n  EmodeSettingsDto,\n  InterestRateConfigDto,\n  BankRawDto,\n  EmodeSettingsRaw,\n  EmodeSettingsRawDto,\n  BankConfigRawDto,\n  BankRateLimiterRaw,\n  RateLimitWindowRaw,\n  BankRateLimiterType,\n  RateLimitWindowType,\n  BankRateLimiterDto,\n  RateLimitWindowDto,\n  BankRateLimiterRawDto,\n  RateLimitWindowRawDto,\n} from \"../types\";\n\nimport {\n  DEFAULT_ORACLE_MAX_AGE,\n  STAKED_ORACLE_DISABLED_FLAG,\n  STAKED_ORACLE_USES_ONRAMP_FLAG,\n} from \"~/constants\";\nimport { MarginfiIdlType } from \"~/idl\";\nimport { AccountType } from \"~/types\";\nimport { wrappedI80F48toBigNumber } from \"~/utils\";\n\n/*\n * Bank deserialization\n */\n\nexport function decodeBankRaw(encoded: Buffer, idl: MarginfiIdlType): BankRaw {\n  const coder = new BorshCoder(idl);\n  return coder.accounts.decode(AccountType.Bank, encoded);\n}\n\nexport function parseEmodeSettingsRaw(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettingsType {\n  const emodeTag = parseEmodeTag(emodeSettingsRaw.emodeTag);\n  const timestamp = emodeSettingsRaw.timestamp.toNumber();\n  const flags = getActiveEmodeFlags(emodeSettingsRaw.flags);\n  const emodeEntries = emodeSettingsRaw.emodeConfig.entries\n    .filter((entry) => entry.collateralBankEmodeTag !== 0)\n    .map((entry) => {\n      return {\n        collateralBankEmodeTag: parseEmodeTag(entry.collateralBankEmodeTag),\n        flags: getActiveEmodeEntryFlags(entry.flags),\n        assetWeightInit: wrappedI80F48toBigNumber(entry.assetWeightInit),\n        assetWeightMaint: wrappedI80F48toBigNumber(entry.assetWeightMaint),\n      };\n    });\n\n  const emodeSettings: EmodeSettingsType = {\n    emodeTag,\n    timestamp,\n    flags,\n    emodeEntries,\n  };\n\n  return emodeSettings;\n}\n\nfunction parseRateLimitWindowRaw(window: RateLimitWindowRaw): RateLimitWindowType {\n  return {\n    maxOutflow: new BigNumber(window.maxOutflow.toString()),\n    windowDuration: window.windowDuration.toNumber(),\n    windowStart: window.windowStart.toNumber(),\n    prevWindowOutflow: new BigNumber(window.prevWindowOutflow.toString()),\n    curWindowOutflow: new BigNumber(window.curWindowOutflow.toString()),\n  };\n}\n\nexport function parseBankRateLimiterRaw(rateLimiter: BankRateLimiterRaw): BankRateLimiterType {\n  return {\n    hourly: parseRateLimitWindowRaw(rateLimiter.hourly),\n    daily: parseRateLimitWindowRaw(rateLimiter.daily),\n  };\n}\n\ninterface BankMetadata {\n  tokenAddress: string;\n  tokenName: string;\n  tokenSymbol: string;\n}\n\nexport function parseBankRaw(\n  address: PublicKey,\n  accountParsed: BankRaw,\n  bankMetadata?: BankMetadata\n): BankType {\n  const flags = accountParsed.flags.toNumber();\n\n  const mint = accountParsed.mint;\n  const mintDecimals = accountParsed.mintDecimals;\n  const group = accountParsed.group;\n\n  const assetShareValue = wrappedI80F48toBigNumber(accountParsed.assetShareValue);\n  const liabilityShareValue = wrappedI80F48toBigNumber(accountParsed.liabilityShareValue);\n\n  const liquidityVault = accountParsed.liquidityVault;\n  const liquidityVaultBump = accountParsed.liquidityVaultBump;\n  const liquidityVaultAuthorityBump = accountParsed.liquidityVaultAuthorityBump;\n\n  const insuranceVault = accountParsed.insuranceVault;\n  const insuranceVaultBump = accountParsed.insuranceVaultBump;\n  const insuranceVaultAuthorityBump = accountParsed.insuranceVaultAuthorityBump;\n\n  const collectedInsuranceFeesOutstanding = wrappedI80F48toBigNumber(\n    accountParsed.collectedInsuranceFeesOutstanding\n  );\n\n  const feeVault = accountParsed.feeVault;\n  const feeVaultBump = accountParsed.feeVaultBump;\n  const feeVaultAuthorityBump = accountParsed.feeVaultAuthorityBump;\n\n  const collectedGroupFeesOutstanding = wrappedI80F48toBigNumber(\n    accountParsed.collectedGroupFeesOutstanding\n  );\n\n  const config = parseBankConfigRaw(accountParsed.config);\n\n  const lastUpdate = accountParsed.lastUpdate.toNumber();\n\n  const totalAssetShares = wrappedI80F48toBigNumber(accountParsed.totalAssetShares);\n  const totalLiabilityShares = wrappedI80F48toBigNumber(accountParsed.totalLiabilityShares);\n\n  const emissionsActiveBorrowing = (flags & 1) > 0;\n  const emissionsActiveLending = (flags & 2) > 0;\n  const stakedOracleDisabled = (flags & STAKED_ORACLE_DISABLED_FLAG) > 0;\n  const stakedOracleUsesOnramp = (flags & STAKED_ORACLE_USES_ONRAMP_FLAG) > 0;\n\n  // @todo existence checks here should be temporary - remove once all banks have emission configs\n  const emissionsRate = accountParsed.emissionsRate.toNumber();\n  const emissionsMint = accountParsed.emissionsMint;\n  const emissionsRemaining = accountParsed.emissionsRemaining\n    ? wrappedI80F48toBigNumber(accountParsed.emissionsRemaining)\n    : new BigNumber(0);\n\n  const collectedProgramFeesOutstanding = accountParsed.collectedProgramFeesOutstanding\n    ? wrappedI80F48toBigNumber(accountParsed.collectedProgramFeesOutstanding)\n    : new BigNumber(0);\n\n  const { oracleKey } = { oracleKey: config.oracleKeys[0] };\n  const emode = parseEmodeSettingsRaw(accountParsed.emode);\n  const rateLimiter = accountParsed.rateLimiter\n    ? parseBankRateLimiterRaw(accountParsed.rateLimiter)\n    : undefined;\n\n  const tokenSymbol = bankMetadata?.tokenSymbol;\n\n  const feesDestinationAccount = accountParsed.feesDestinationAccount;\n  const lendingPositionCount = accountParsed.lendingPositionCount\n    ? new BigNumber(accountParsed.lendingPositionCount.toString())\n    : new BigNumber(0);\n  const borrowingPositionCount = accountParsed.borrowingPositionCount\n    ? new BigNumber(accountParsed.borrowingPositionCount.toString())\n    : new BigNumber(0);\n\n  let kaminoIntegrationAccounts,\n    driftIntegrationAccounts,\n    solendIntegrationAccounts,\n    jupLendIntegrationAccounts,\n    stakedIntegrationAccounts = undefined;\n\n  switch (config.assetTag) {\n    case AssetTag.KAMINO:\n      kaminoIntegrationAccounts = {\n        kaminoReserve: accountParsed.integrationAcc1,\n        kaminoObligation: accountParsed.integrationAcc2,\n      };\n      break;\n    case AssetTag.DRIFT:\n      driftIntegrationAccounts = {\n        driftSpotMarket: accountParsed.integrationAcc1,\n        driftUser: accountParsed.integrationAcc2,\n        driftUserStats: accountParsed.integrationAcc3,\n      };\n      break;\n    case AssetTag.SOLEND:\n      solendIntegrationAccounts = {\n        solendReserve: accountParsed.integrationAcc1,\n        solendObligation: accountParsed.integrationAcc2,\n      };\n      break;\n    case AssetTag.JUPLEND:\n      jupLendIntegrationAccounts = {\n        jupLendingState: accountParsed.integrationAcc1,\n        jupFTokenVault: accountParsed.integrationAcc2,\n        jupFTokenAta: accountParsed.integrationAcc3,\n      };\n      break;\n    case AssetTag.STAKED:\n      stakedIntegrationAccounts = {\n        validatorVoteAccount: accountParsed.integrationAcc1,\n      };\n      break;\n    default:\n      break;\n  }\n\n  return {\n    address,\n    group,\n    mint,\n    mintDecimals,\n    assetShareValue,\n    liabilityShareValue,\n    liquidityVault,\n    liquidityVaultBump,\n    liquidityVaultAuthorityBump,\n    insuranceVault,\n    insuranceVaultBump,\n    insuranceVaultAuthorityBump,\n    collectedInsuranceFeesOutstanding,\n    feeVault,\n    feeVaultBump,\n    feeVaultAuthorityBump,\n    collectedGroupFeesOutstanding,\n    lastUpdate,\n    config,\n    totalAssetShares,\n    totalLiabilityShares,\n    emissionsActiveBorrowing,\n    emissionsActiveLending,\n    stakedOracleDisabled,\n    stakedOracleUsesOnramp,\n    emissionsRate,\n    emissionsMint,\n    emissionsRemaining,\n    collectedProgramFeesOutstanding,\n    oracleKey,\n    feesDestinationAccount,\n    lendingPositionCount,\n    borrowingPositionCount,\n    emode,\n    rateLimiter,\n    tokenSymbol,\n    kaminoIntegrationAccounts,\n    driftIntegrationAccounts,\n    solendIntegrationAccounts,\n    jupLendIntegrationAccounts,\n    stakedIntegrationAccounts,\n  };\n}\n\n/*\n * DTO Bank deserialization\n */\n\nexport function dtoToBank(bankDto: BankTypeDto): BankType {\n  return {\n    address: new PublicKey(bankDto.address),\n    group: new PublicKey(bankDto.group),\n    mint: new PublicKey(bankDto.mint),\n    mintDecimals: bankDto.mintDecimals,\n    assetShareValue: new BigNumber(bankDto.assetShareValue),\n    liabilityShareValue: new BigNumber(bankDto.liabilityShareValue),\n    liquidityVault: new PublicKey(bankDto.liquidityVault),\n    liquidityVaultBump: bankDto.liquidityVaultBump,\n    liquidityVaultAuthorityBump: bankDto.liquidityVaultAuthorityBump,\n    insuranceVault: new PublicKey(bankDto.insuranceVault),\n    insuranceVaultBump: bankDto.insuranceVaultBump,\n    insuranceVaultAuthorityBump: bankDto.insuranceVaultAuthorityBump,\n    collectedInsuranceFeesOutstanding: new BigNumber(bankDto.collectedInsuranceFeesOutstanding),\n    feeVault: new PublicKey(bankDto.feeVault),\n    feeVaultBump: bankDto.feeVaultBump,\n    feeVaultAuthorityBump: bankDto.feeVaultAuthorityBump,\n    collectedGroupFeesOutstanding: new BigNumber(bankDto.collectedGroupFeesOutstanding),\n    lastUpdate: bankDto.lastUpdate,\n    config: dtoToBankConfig(bankDto.config),\n    totalAssetShares: new BigNumber(bankDto.totalAssetShares),\n    totalLiabilityShares: new BigNumber(bankDto.totalLiabilityShares),\n    emissionsActiveBorrowing: bankDto.emissionsActiveBorrowing,\n    emissionsActiveLending: bankDto.emissionsActiveLending,\n    stakedOracleDisabled: bankDto.stakedOracleDisabled,\n    stakedOracleUsesOnramp: bankDto.stakedOracleUsesOnramp,\n    emissionsRate: bankDto.emissionsRate,\n    emissionsMint: new PublicKey(bankDto.emissionsMint),\n    emissionsRemaining: new BigNumber(bankDto.emissionsRemaining),\n    collectedProgramFeesOutstanding: new BigNumber(bankDto.collectedProgramFeesOutstanding ?? \"0\"),\n    oracleKey: new PublicKey(bankDto.oracleKey),\n    emode: dtoToEmodeSettings(bankDto.emode),\n    rateLimiter: bankDto.rateLimiter ? dtoToBankRateLimiter(bankDto.rateLimiter) : undefined,\n    tokenSymbol: bankDto.tokenSymbol,\n    feesDestinationAccount: bankDto.feesDestinationAccount\n      ? new PublicKey(bankDto.feesDestinationAccount)\n      : undefined,\n    lendingPositionCount: bankDto.lendingPositionCount\n      ? new BigNumber(bankDto.lendingPositionCount)\n      : undefined,\n    borrowingPositionCount: bankDto.borrowingPositionCount\n      ? new BigNumber(bankDto.borrowingPositionCount)\n      : undefined,\n    kaminoIntegrationAccounts: bankDto.kaminoIntegrationAccounts\n      ? {\n          kaminoReserve: new PublicKey(bankDto.kaminoIntegrationAccounts.kaminoReserve),\n          kaminoObligation: new PublicKey(bankDto.kaminoIntegrationAccounts.kaminoObligation),\n        }\n      : undefined,\n    driftIntegrationAccounts: bankDto.driftIntegrationAccounts\n      ? {\n          driftSpotMarket: new PublicKey(bankDto.driftIntegrationAccounts.driftSpotMarket),\n          driftUser: new PublicKey(bankDto.driftIntegrationAccounts.driftUser),\n          driftUserStats: new PublicKey(bankDto.driftIntegrationAccounts.driftUserStats),\n        }\n      : undefined,\n    solendIntegrationAccounts: bankDto.solendIntegrationAccounts\n      ? {\n          solendReserve: new PublicKey(bankDto.solendIntegrationAccounts.solendReserve),\n          solendObligation: new PublicKey(bankDto.solendIntegrationAccounts.solendObligation),\n        }\n      : undefined,\n    jupLendIntegrationAccounts: bankDto.jupLendIntegrationAccounts\n      ? {\n          jupLendingState: new PublicKey(bankDto.jupLendIntegrationAccounts.jupLendingState),\n          jupFTokenVault: new PublicKey(bankDto.jupLendIntegrationAccounts.jupFTokenVault),\n          jupFTokenAta: new PublicKey(bankDto.jupLendIntegrationAccounts.jupFTokenAta),\n        }\n      : undefined,\n    stakedIntegrationAccounts: bankDto.stakedIntegrationAccounts\n      ? {\n          validatorVoteAccount: new PublicKey(\n            bankDto.stakedIntegrationAccounts.validatorVoteAccount\n          ),\n        }\n      : undefined,\n  };\n}\n\nfunction dtoToRateLimitWindow(window: RateLimitWindowDto): RateLimitWindowType {\n  return {\n    maxOutflow: new BigNumber(window.maxOutflow),\n    windowDuration: window.windowDuration,\n    windowStart: window.windowStart,\n    prevWindowOutflow: new BigNumber(window.prevWindowOutflow),\n    curWindowOutflow: new BigNumber(window.curWindowOutflow),\n  };\n}\n\nexport function dtoToBankRateLimiter(rateLimiter: BankRateLimiterDto): BankRateLimiterType {\n  return {\n    hourly: dtoToRateLimitWindow(rateLimiter.hourly),\n    daily: dtoToRateLimitWindow(rateLimiter.daily),\n  };\n}\n\nexport function dtoToEmodeSettings(emodeSettingsDto: EmodeSettingsDto): EmodeSettingsType {\n  return {\n    emodeTag: emodeSettingsDto.emodeTag,\n    timestamp: emodeSettingsDto.timestamp,\n    flags: emodeSettingsDto.flags,\n    emodeEntries: emodeSettingsDto.emodeEntries.map((entry) => {\n      return {\n        collateralBankEmodeTag: entry.collateralBankEmodeTag,\n        flags: entry.flags,\n        assetWeightInit: new BigNumber(entry.assetWeightInit),\n        assetWeightMaint: new BigNumber(entry.assetWeightMaint),\n      };\n    }),\n  };\n}\n\nexport function dtoToBankConfig(bankConfigDto: BankConfigDto): BankConfigType {\n  return {\n    assetWeightInit: new BigNumber(bankConfigDto.assetWeightInit),\n    assetWeightMaint: new BigNumber(bankConfigDto.assetWeightMaint),\n    liabilityWeightInit: new BigNumber(bankConfigDto.liabilityWeightInit),\n    liabilityWeightMaint: new BigNumber(bankConfigDto.liabilityWeightMaint),\n    depositLimit: new BigNumber(bankConfigDto.depositLimit),\n    borrowLimit: new BigNumber(bankConfigDto.borrowLimit),\n    riskTier: bankConfigDto.riskTier,\n    operationalState: bankConfigDto.operationalState,\n    totalAssetValueInitLimit: new BigNumber(bankConfigDto.totalAssetValueInitLimit),\n    assetTag: bankConfigDto.assetTag,\n    configFlags: bankConfigDto.configFlags,\n    oracleSetup: bankConfigDto.oracleSetup,\n    oracleKeys: bankConfigDto.oracleKeys.map((key) => new PublicKey(key)),\n    oracleMaxAge: bankConfigDto.oracleMaxAge,\n    interestRateConfig: dtoToInterestRateConfig(bankConfigDto.interestRateConfig),\n    oracleMaxConfidence: bankConfigDto.oracleMaxConfidence,\n    fixedPrice: new BigNumber(bankConfigDto.fixedPrice),\n    scopeEntryIndex: bankConfigDto.scopeEntryIndex,\n  };\n}\n\nexport function dtoToInterestRateConfig(\n  interestRateConfigDto: InterestRateConfigDto\n): InterestRateConfig {\n  return {\n    // fall back to the pre-0.1.9 field names so old serialized DTOs still convert\n    placeholder0: new BigNumber(\n      interestRateConfigDto.placeholder0 ?? interestRateConfigDto.optimalUtilizationRate ?? 0\n    ),\n    placeholder1: new BigNumber(\n      interestRateConfigDto.placeholder1 ?? interestRateConfigDto.plateauInterestRate ?? 0\n    ),\n    placeholder2: new BigNumber(\n      interestRateConfigDto.placeholder2 ?? interestRateConfigDto.maxInterestRate ?? 0\n    ),\n    insuranceFeeFixedApr: new BigNumber(interestRateConfigDto.insuranceFeeFixedApr),\n    insuranceIrFee: new BigNumber(interestRateConfigDto.insuranceIrFee),\n    protocolFixedFeeApr: new BigNumber(interestRateConfigDto.protocolFixedFeeApr),\n    protocolIrFee: new BigNumber(interestRateConfigDto.protocolIrFee),\n    protocolOriginationFee: new BigNumber(interestRateConfigDto.protocolOriginationFee),\n    zeroUtilRate: interestRateConfigDto.zeroUtilRate,\n    hundredUtilRate: interestRateConfigDto.hundredUtilRate,\n    points: interestRateConfigDto.points,\n    curveType: interestRateConfigDto.curveType,\n  };\n}\n\nexport function dtoToBankRaw(bankDto: BankRawDto): BankRaw {\n  return {\n    group: new PublicKey(bankDto.group),\n    mint: new PublicKey(bankDto.mint),\n    mintDecimals: bankDto.mintDecimals,\n\n    assetShareValue: bankDto.assetShareValue,\n    liabilityShareValue: bankDto.liabilityShareValue,\n\n    liquidityVault: new PublicKey(bankDto.liquidityVault),\n    liquidityVaultBump: bankDto.liquidityVaultBump,\n    liquidityVaultAuthorityBump: bankDto.liquidityVaultAuthorityBump,\n\n    insuranceVault: new PublicKey(bankDto.insuranceVault),\n    insuranceVaultBump: bankDto.insuranceVaultBump,\n    insuranceVaultAuthorityBump: bankDto.insuranceVaultAuthorityBump,\n    collectedInsuranceFeesOutstanding: bankDto.collectedInsuranceFeesOutstanding,\n\n    feeVault: new PublicKey(bankDto.feeVault),\n    feeVaultBump: bankDto.feeVaultBump,\n    feeVaultAuthorityBump: bankDto.feeVaultAuthorityBump,\n    collectedGroupFeesOutstanding: bankDto.collectedGroupFeesOutstanding,\n\n    lastUpdate: new BN(bankDto.lastUpdate),\n\n    config: dtoToBankConfigRaw(bankDto.config),\n\n    totalAssetShares: bankDto.totalAssetShares,\n    totalLiabilityShares: bankDto.totalLiabilityShares,\n\n    flags: new BN(bankDto.flags),\n    emissionsRate: new BN(bankDto.emissionsRate),\n    emissionsRemaining: bankDto.emissionsRemaining,\n    emissionsMint: new PublicKey(bankDto.emissionsMint),\n    collectedProgramFeesOutstanding: bankDto.collectedProgramFeesOutstanding,\n    rateLimiter: bankDto.rateLimiter ? dtoToBankRateLimiterRaw(bankDto.rateLimiter) : undefined,\n    feesDestinationAccount: bankDto.feesDestinationAccount\n      ? new PublicKey(bankDto.feesDestinationAccount)\n      : undefined,\n    lendingPositionCount: bankDto.lendingPositionCount\n      ? Number(bankDto.lendingPositionCount)\n      : undefined,\n    borrowingPositionCount: bankDto.borrowingPositionCount\n      ? Number(bankDto.borrowingPositionCount)\n      : undefined,\n\n    emode: dtoToEmodeSettingsRaw(bankDto.emode),\n    integrationAcc1: new PublicKey(bankDto.integrationAcc1),\n    integrationAcc2: new PublicKey(bankDto.integrationAcc2),\n    integrationAcc3: new PublicKey(bankDto.integrationAcc3),\n  };\n}\n\nfunction dtoToRateLimitWindowRaw(window: RateLimitWindowRawDto): RateLimitWindowRaw {\n  return {\n    maxOutflow: new BN(window.maxOutflow),\n    windowDuration: new BN(window.windowDuration),\n    windowStart: new BN(window.windowStart),\n    prevWindowOutflow: new BN(window.prevWindowOutflow),\n    curWindowOutflow: new BN(window.curWindowOutflow),\n  };\n}\n\nexport function dtoToBankRateLimiterRaw(rateLimiter: BankRateLimiterRawDto): BankRateLimiterRaw {\n  return {\n    hourly: dtoToRateLimitWindowRaw(rateLimiter.hourly),\n    daily: dtoToRateLimitWindowRaw(rateLimiter.daily),\n  };\n}\n\nexport function dtoToEmodeSettingsRaw(emodeSettingsDto: EmodeSettingsRawDto): EmodeSettingsRaw {\n  return {\n    emodeTag: emodeSettingsDto.emodeTag,\n    timestamp: new BN(emodeSettingsDto.timestamp),\n    flags: new BN(emodeSettingsDto.flags),\n    emodeConfig: {\n      entries: emodeSettingsDto.emodeConfig.entries.map((entry) => {\n        return {\n          collateralBankEmodeTag: entry.collateralBankEmodeTag,\n          flags: entry.flags,\n          assetWeightInit: entry.assetWeightInit,\n          assetWeightMaint: entry.assetWeightMaint,\n        };\n      }),\n    },\n  };\n}\n\nexport function dtoToBankConfigRaw(bankConfigDto: BankConfigRawDto): BankConfigRaw {\n  return {\n    assetWeightInit: bankConfigDto.assetWeightInit,\n    assetWeightMaint: bankConfigDto.assetWeightMaint,\n    liabilityWeightInit: bankConfigDto.liabilityWeightInit,\n    liabilityWeightMaint: bankConfigDto.liabilityWeightMaint,\n    depositLimit: new BN(bankConfigDto.depositLimit),\n    borrowLimit: new BN(bankConfigDto.borrowLimit),\n    riskTier: bankConfigDto.riskTier,\n    operationalState: bankConfigDto.operationalState,\n    totalAssetValueInitLimit: new BN(bankConfigDto.totalAssetValueInitLimit),\n    assetTag: bankConfigDto.assetTag,\n    configFlags: bankConfigDto.configFlags,\n    oracleSetup: bankConfigDto.oracleSetup,\n    oracleKeys: bankConfigDto.oracleKeys.map((key: string) => new PublicKey(key)),\n    oracleMaxAge: bankConfigDto.oracleMaxAge,\n    interestRateConfig: bankConfigDto.interestRateConfig,\n    oracleMaxConfidence: bankConfigDto.oracleMaxConfidence,\n    fixedPrice: bankConfigDto.fixedPrice,\n    scopeEntryIndex: bankConfigDto.scopeEntryIndex,\n  };\n}\n\n/*\n * Bank config deserialization\n */\n\nexport function parseBankConfigRaw(bankConfigRaw: BankConfigRaw): BankConfigType {\n  const assetWeightInit = wrappedI80F48toBigNumber(bankConfigRaw.assetWeightInit);\n  const assetWeightMaint = wrappedI80F48toBigNumber(bankConfigRaw.assetWeightMaint);\n  const liabilityWeightInit = wrappedI80F48toBigNumber(bankConfigRaw.liabilityWeightInit);\n  const liabilityWeightMaint = wrappedI80F48toBigNumber(bankConfigRaw.liabilityWeightMaint);\n  const depositLimit = BigNumber(bankConfigRaw.depositLimit.toString());\n  const borrowLimit = BigNumber(bankConfigRaw.borrowLimit.toString());\n  const riskTier = parseRiskTier(bankConfigRaw.riskTier);\n  const operationalState = parseOperationalState(bankConfigRaw.operationalState);\n  const totalAssetValueInitLimit = BigNumber(bankConfigRaw.totalAssetValueInitLimit.toString());\n  const assetTag = bankConfigRaw.assetTag as AssetTag;\n  const configFlags = bankConfigRaw.configFlags;\n  const oracleSetup = parseOracleSetup(bankConfigRaw.oracleSetup);\n  const oracleKeys = bankConfigRaw.oracleKeys;\n  const oracleMaxAge =\n    bankConfigRaw.oracleMaxAge === 0 && oracleSetup !== OracleSetup.Scope\n      ? DEFAULT_ORACLE_MAX_AGE\n      : bankConfigRaw.oracleMaxAge;\n  const interestRateConfig = {\n    insuranceFeeFixedApr: wrappedI80F48toBigNumber(\n      bankConfigRaw.interestRateConfig.insuranceFeeFixedApr\n    ),\n    placeholder2: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.placeholder2),\n    insuranceIrFee: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.insuranceIrFee),\n    placeholder0: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.placeholder0),\n    placeholder1: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.placeholder1),\n    protocolFixedFeeApr: wrappedI80F48toBigNumber(\n      bankConfigRaw.interestRateConfig.protocolFixedFeeApr\n    ),\n    protocolIrFee: wrappedI80F48toBigNumber(bankConfigRaw.interestRateConfig.protocolIrFee),\n    protocolOriginationFee: wrappedI80F48toBigNumber(\n      bankConfigRaw.interestRateConfig.protocolOriginationFee\n    ),\n    zeroUtilRate: bankConfigRaw.interestRateConfig.zeroUtilRate,\n    hundredUtilRate: bankConfigRaw.interestRateConfig.hundredUtilRate,\n    points: bankConfigRaw.interestRateConfig.points,\n    curveType: bankConfigRaw.interestRateConfig.curveType,\n  };\n  const oracleMaxConfidence = bankConfigRaw.oracleMaxConfidence;\n  const fixedPrice = wrappedI80F48toBigNumber(bankConfigRaw.fixedPrice);\n  const scopeEntryIndex = bankConfigRaw.scopeEntryIndex;\n\n  return {\n    assetWeightInit,\n    assetWeightMaint,\n    liabilityWeightInit,\n    liabilityWeightMaint,\n    depositLimit,\n    borrowLimit,\n    riskTier,\n    operationalState,\n    totalAssetValueInitLimit,\n    assetTag,\n    configFlags,\n    oracleSetup,\n    oracleKeys,\n    oracleMaxAge,\n    interestRateConfig,\n    oracleMaxConfidence,\n    fixedPrice,\n    scopeEntryIndex,\n  };\n}\n\nexport function parseRiskTier(riskTierRaw: RiskTierRaw): RiskTier {\n  switch (Object.keys(riskTierRaw)[0].toLowerCase()) {\n    case \"collateral\":\n      return RiskTier.Collateral;\n    case \"isolated\":\n      return RiskTier.Isolated;\n    default:\n      throw new Error(`Invalid risk tier \"${riskTierRaw}\"`);\n  }\n}\n\nexport function parseOperationalState(operationalStateRaw: OperationalStateRaw): OperationalState {\n  switch (Object.keys(operationalStateRaw)[0].toLowerCase()) {\n    case \"paused\":\n      return OperationalState.Paused;\n    case \"operational\":\n      return OperationalState.Operational;\n    case \"reduceonly\":\n      return OperationalState.ReduceOnly;\n    case \"killedbybankruptcy\":\n      return OperationalState.KilledByBankruptcy;\n    case \"uninitialized\":\n      return OperationalState.Uninitialized;\n    case \"reduceonlywithborrowingpower\":\n      return OperationalState.ReduceOnlyWithBorrowingPower;\n    case \"circuitbroken\":\n      return OperationalState.CircuitBroken;\n    default:\n      throw new Error(`Invalid operational state \"${operationalStateRaw}\"`);\n  }\n}\n\nexport function parseOracleSetup(oracleSetupRaw: OracleSetupRaw): OracleSetup {\n  const oracleKey = Object.keys(oracleSetupRaw)[0].toLowerCase();\n  switch (oracleKey) {\n    case \"none\":\n      return OracleSetup.None;\n    case \"pythlegacy\":\n      return OracleSetup.PythLegacy;\n    case \"switchboardv2\":\n      return OracleSetup.SwitchboardV2;\n    case \"pythpushoracle\":\n      return OracleSetup.PythPushOracle;\n    case \"switchboardpull\":\n      return OracleSetup.SwitchboardPull;\n    case \"stakedwithpythpush\":\n      return OracleSetup.StakedWithPythPush;\n    case \"kaminopythpush\":\n      return OracleSetup.KaminoPythPush;\n    case \"kaminoswitchboardpull\":\n      return OracleSetup.KaminoSwitchboardPull;\n    case \"fixed\":\n      return OracleSetup.Fixed;\n    case \"driftpythpull\":\n      return OracleSetup.DriftPythPull;\n    case \"driftswitchboardpull\":\n      return OracleSetup.DriftSwitchboardPull;\n    case \"solendpythpull\":\n      return OracleSetup.SolendPythPull;\n    case \"solendswitchboardpull\":\n      return OracleSetup.SolendSwitchboardPull;\n    case \"fixedkamino\":\n      return OracleSetup.FixedKamino;\n    case \"fixeddrift\":\n      return OracleSetup.FixedDrift;\n    case \"juplendpythpull\":\n      return OracleSetup.JuplendPythPull;\n    case \"juplendswitchboardpull\":\n      return OracleSetup.JuplendSwitchboardPull;\n    case \"fixedjuplend\":\n      return OracleSetup.FixedJuplend;\n    case \"scope\":\n      return OracleSetup.Scope;\n    case \"pythmsol\":\n      return OracleSetup.PythMSOL;\n    case \"kaminomsol\":\n      return OracleSetup.KaminoMSOL;\n    case \"juplendmsol\":\n      return OracleSetup.JuplendMSOL;\n    case \"pythlst\":\n      return OracleSetup.PythLST;\n    case \"kaminolst\":\n      return OracleSetup.KaminoLST;\n    case \"juplendlst\":\n      return OracleSetup.JuplendLST;\n    case \"ptpyth\":\n      return OracleSetup.PTPyth;\n    case \"ptfixed\":\n      return OracleSetup.PTFixed;\n    default:\n      return OracleSetup.Unknown;\n  }\n}\n\n/**\n * Get all active EMode flags as an array of flag names\n */\nexport function getActiveEmodeFlags(flags: BN): EmodeFlags[] {\n  const activeFlags: EmodeFlags[] = [];\n\n  for (const flagName in EmodeFlags) {\n    const flag = EmodeFlags[flagName];\n\n    if (typeof flag === \"number\" && hasEmodeFlag(flags, flag)) {\n      activeFlags.push(flag);\n    }\n  }\n\n  return activeFlags;\n}\n\n/**\n * Check if a specific EMode flag is set\n */\nexport function hasEmodeFlag(flags: BN, flag: number): boolean {\n  return !flags.and(new BN(flag)).isZero();\n}\n\n/**\n * Get all active EMode entry flags as an array of flag names\n */\nexport function getActiveEmodeEntryFlags(flags: number): EmodeEntryFlags[] {\n  const activeFlags: EmodeEntryFlags[] = [];\n\n  for (const flagName in EmodeEntryFlags) {\n    const flag = EmodeEntryFlags[flagName];\n\n    if (typeof flag === \"number\" && hasEmodeEntryFlag(flags, flag)) {\n      activeFlags.push(flag);\n    }\n  }\n\n  return activeFlags;\n}\n\n/**\n * Check if a specific EMode entry flag is set\n */\nexport function hasEmodeEntryFlag(flags: number, flag: number): boolean {\n  return (flags & flag) === flag;\n}\n\n/**\n * Parse a raw EMode tag number into the corresponding EmodeTag enum value\n */\nexport function parseEmodeTag(emodeTagRaw: number): EmodeTag {\n  switch (emodeTagRaw) {\n    case 501:\n      return EmodeTag.SOL;\n    case 502:\n      return EmodeTag.SOL_T2;\n    case 1571:\n      return EmodeTag.LST_T1;\n    case 1572:\n      return EmodeTag.LST_T2;\n    case 15787:\n      return EmodeTag.LST_PT;\n    case 619:\n      return EmodeTag.JLP;\n    case 57481:\n      return EmodeTag.STABLE_T1;\n    case 57482:\n      return EmodeTag.STABLE_T2;\n    case 871:\n      return EmodeTag.BTC_T1;\n    case 872:\n      return EmodeTag.BTC_T2;\n    case 47050:\n      return EmodeTag.HYUSD;\n    case 8747:\n      return EmodeTag.PT_HYUSD;\n    case 0:\n    default:\n      return EmodeTag.UNSET;\n  }\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { BankType } from \"../../types\";\n\n/**\n * Share ↔ Quantity Conversion Utilities\n * =====================================\n */\n\n/**\n * Computes the total asset quantity for a bank (all deposits).\n *\n * @param bank - The bank to compute total assets for\n * @returns Total asset quantity across all positions\n */\nexport function getTotalAssetQuantity(bank: BankType): BigNumber {\n  return bank.totalAssetShares.times(bank.assetShareValue);\n}\n\n/**\n * Computes the total liability quantity for a bank (all borrows).\n *\n * @param bank - The bank to compute total liabilities for\n * @returns Total liability quantity across all positions\n */\nexport function getTotalLiabilityQuantity(bank: BankType): BigNumber {\n  return bank.totalLiabilityShares.times(bank.liabilityShareValue);\n}\n\n/**\n * Converts asset shares to asset quantity.\n *\n * @param bank - The bank containing the share value\n * @param assetShares - The number of asset shares to convert\n * @returns Asset quantity represented by the shares\n *\n * @example\n * ```typescript\n * const quantity = getAssetQuantity(bank, new BigNumber(100));\n * ```\n */\nexport function getAssetQuantity(bank: BankType, assetShares: BigNumber): BigNumber {\n  return assetShares.times(bank.assetShareValue);\n}\n\n/**\n * Converts liability shares to token quantity.\n *\n * @param bank - The bank containing the share value\n * @param liabilityShares - The number of liability shares to convert\n * @returns Token quantity represented by the shares\n */\nexport function getLiabilityQuantity(bank: BankType, liabilityShares: BigNumber): BigNumber {\n  return liabilityShares.times(bank.liabilityShareValue);\n}\n\n/**\n * Converts token quantity to asset shares.\n *\n * @param bank - The bank containing the share value\n * @param assetQuantity - The token quantity to convert (for integrations, this is the collateral token amount)\n * @returns Number of asset shares representing the quantity (0 if share value is zero)\n */\nexport function getAssetShares(bank: BankType, assetQuantity: BigNumber): BigNumber {\n  if (bank.assetShareValue.isZero()) {\n    return new BigNumber(0);\n  }\n  return assetQuantity.div(bank.assetShareValue);\n}\n\n/**\n * Converts token quantity to liability shares.\n *\n * @param bank - The bank containing the share value\n * @param liabilityQuantity - The token quantity to convert\n * @returns Number of liability shares representing the quantity (0 if share value is zero)\n */\nexport function getLiabilityShares(bank: BankType, liabilityQuantity: BigNumber): BigNumber {\n  if (bank.liabilityShareValue.isZero()) {\n    return new BigNumber(0);\n  }\n  return liabilityQuantity.div(bank.liabilityShareValue);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport interface BalanceType {\n  active: boolean;\n  bankPk: PublicKey;\n  assetShares: BigNumber;\n  liabilityShares: BigNumber;\n  emissionsOutstanding: BigNumber;\n  lastUpdate: number;\n}\n\nexport enum HealthCacheFlags {\n  /**\n   * If set (1), the account is considered healthy and cannot be liquidated.\n   * If not set (0), the account is unhealthy and can be liquidated.\n   */\n  HEALTHY = 1 << 0, // 1\n  /**\n   * If set (1), the engine did not error during the last health pulse.\n   * If not set (0), the engine would have errored and this cache is likely invalid.\n   * `RiskEngineInitRejected` is ignored and will allow the flag to be set anyways.\n   */\n  ENGINE_STATUS_OK = 1 << 1, // 2\n  /**\n   * If set (1), the engine did not error due to an oracle issue.\n   * If not set (0), engine was passed a bad bank or oracle account, or an oracle was stale.\n   * Check the order in which accounts were passed and ensure each balance has the correct banks/oracles,\n   * and that oracle cranks ran recently enough. Check `internal_err` and `err_index` for more details\n   * in some circumstances. Invalid if generated after borrow/withdraw (these instructions will\n   * ignore oracle issues if health is still satisfactory with some balance zeroed out).\n   */\n  ORACLE_OK = 1 << 2, // 4\n}\n\nexport enum HealthCacheStatus {\n  UNSET,\n  ONCHAIN,\n  COMPUTED,\n}\n\nexport interface HealthCacheType {\n  assetValue: BigNumber;\n  liabilityValue: BigNumber;\n  assetValueMaint: BigNumber;\n  liabilityValueMaint: BigNumber;\n  assetValueEquity: BigNumber;\n  liabilityValueEquity: BigNumber;\n  timestamp: BigNumber;\n  flags: HealthCacheFlags[];\n  prices: number[][];\n  simulationStatus: HealthCacheStatus;\n}\n\nexport interface MarginfiAccountType {\n  address: PublicKey;\n  group: PublicKey;\n  authority: PublicKey;\n  balances: BalanceType[];\n  accountFlags: AccountFlags[];\n  emissionsDestinationAccount: PublicKey;\n  healthCache: HealthCacheType;\n}\n\nexport enum AccountFlags {\n  ACCOUNT_DISABLED = 1 << 0, // 1\n  ACCOUNT_IN_FLASHLOAN = 1 << 1, // 2\n  ACCOUNT_FLAG_DEPRECATED = 1 << 2, // 4\n  ACCOUNT_TRANSFER_AUTHORITY_ALLOWED = 1 << 3, // 8\n}\n\nexport enum MarginRequirementType {\n  Initial = 0,\n  Maintenance = 1,\n  Equity = 2,\n}\n","import { MarginfiAccountType } from \"./account.types\";\n\nimport { BankType } from \"~/services/bank\";\n\nexport interface SimulationResultRaw {\n  marginfiAccount: MarginfiAccountType;\n  banks: BankType[];\n}\n\n/**\n * Custom error class for health cache simulation failures\n */\nexport class HealthCacheSimulationError extends Error {\n  mrgnErr: number | null;\n  internalErr: number | null;\n\n  constructor(message: string, mrgnErr: number | null, internalErr: number | null) {\n    super(message);\n    this.name = \"HealthCacheSimulationError\";\n    this.mrgnErr = mrgnErr;\n    this.internalErr = internalErr;\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, HealthCacheSimulationError);\n    }\n  }\n}\n","import {\n  AddressLookupTableAccount,\n  Connection,\n  Keypair,\n  PublicKey,\n  Signer,\n  TransactionInstruction,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport type { SwapEngineRunner } from \"../services/swap-engine/types\";\n\nimport { MarginfiAccountType } from \"./account.types\";\n\nimport { BankType } from \"~/services/bank\";\nimport { OraclePrice } from \"~/services/price\";\nimport { ExtendedV0Transaction, SolanaTransaction } from \"~/services/transaction\";\nimport { Amount, TypedAmount, BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\nimport { DriftRewards, DriftSpotMarket } from \"~/vendor/drift\";\nimport { JupLendingState } from \"~/vendor/jup-lend\";\nimport { KaminoReserve } from \"~/vendor/klend\";\n\nexport enum SwapProvider {\n  JUPITER = \"JUPITER\",\n  TITAN = \"TITAN\",\n  DFLOW = \"DFLOW\",\n}\n\nexport interface SwapApiConfig {\n  basePath?: string;\n  /** WebSocket endpoint (e.g. `wss://<host>/api/v1/ws`). Used by the Titan V3\n   *  adapter, which sends the full footprint template inline over the socket to\n   *  avoid the gateway GET's URL-length limit. */\n  wsUrl?: string;\n  apiKey?: string;\n  headers?: Record<string, string>;\n}\n\nexport interface SwapProviderEntry {\n  provider: SwapProvider;\n  apiConfig?: SwapApiConfig;\n}\n\nexport interface SwapProviderConfig {\n  provider: SwapProvider;\n  slippageMode: \"DYNAMIC\" | \"FIXED\";\n  slippageBps: number;\n  platformFeeBps: number;\n  directRoutesOnly?: boolean;\n  apiConfig?: SwapApiConfig;\n  fallbackProviders?: SwapProviderEntry[];\n}\n\nexport interface SwapOpts {\n  swapConfig?: SwapProviderConfig;\n  /**\n   * Pin an exact, caller-reviewed swap route instead of running the swap engine.\n   *\n   * The caller owns ATA setup for the route, the route's input amount MUST equal the flow's swap\n   * input (e.g. the loop's borrow amount), and the route MUST pay out to the flow's destination\n   * token account. `quoteResponse.otherAmountThreshold` (guaranteed min-out, native units) sizes\n   * the follow-up amount — e.g. the loop's deposit byte-patch — exactly like an engine-selected\n   * route would. For dynamic caller-controlled routing (inspect/veto routes at build time),\n   * prefer `swapEngineRunner`.\n   *\n   * Note: the bridged `makeBridged*Tx` fallbacks are disabled when a pinned route is supplied —\n   * a pinned route belongs to the direct pair and cannot be spliced into SDK-composed legs.\n   */\n  swapIxs?: {\n    instructions: TransactionInstruction[];\n    lookupTables: AddressLookupTableAccount[];\n    /** The pinned route's quote; `otherAmountThreshold` must be the route's min-out (native). */\n    quoteResponse: SwapQuoteResult;\n  };\n}\n\nexport interface SwapQuoteResult {\n  inAmount: string;\n  outAmount: string;\n  otherAmountThreshold: string;\n  slippageBps: number;\n  platformFee?: {\n    amount: string;\n    feeBps: number;\n  };\n  priceImpactPct?: string;\n  contextSlot?: number;\n  timeTaken?: number;\n  provider?: SwapProvider;\n}\n\nexport interface SwapIxsResult {\n  swapInstructions: TransactionInstruction[];\n  setupInstructions: TransactionInstruction[];\n  addressLookupTableAddresses: AddressLookupTableAccount[];\n  quoteResponse: SwapQuoteResult;\n}\n\nexport interface MakeDepositIxOpts {\n  wrapAndUnwrapSol?: boolean;\n  wSolBalanceUi?: number;\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n  };\n}\n\nexport interface MakeDepositIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  group: PublicKey;\n  isSync?: boolean;\n  opts?: MakeDepositIxOpts;\n}\n\nexport interface MakeJuplendDepositIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  group: PublicKey;\n  isSync?: boolean;\n  opts?: MakeDepositIxOpts;\n}\n\nexport interface MakeDriftDepositIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  group: PublicKey;\n  driftOracle: PublicKey;\n  driftMarketIndex: number;\n  isSync?: boolean;\n  opts?: MakeDepositIxOpts;\n}\n\nexport interface MakeKaminoDepositIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  group: PublicKey;\n  reserve: KaminoReserve;\n  isSync?: boolean;\n  opts?: MakeDepositIxOpts;\n}\n\nexport interface MakeDepositTxParams extends MakeDepositIxParams {\n  luts: AddressLookupTableAccount[];\n  blockhash?: string;\n}\n\nexport interface MakeJuplendDepositTxParams extends MakeJuplendDepositIxParams {\n  luts: AddressLookupTableAccount[];\n  connection: Connection;\n  blockhash?: string;\n}\n\nexport interface MakeDriftDepositTxParams extends MakeDriftDepositIxParams {\n  luts: AddressLookupTableAccount[];\n  connection: Connection;\n  blockhash?: string;\n}\n\nexport interface MakeKaminoDepositTxParams extends MakeKaminoDepositIxParams {\n  luts: AddressLookupTableAccount[];\n  connection: Connection;\n  blockhash?: string;\n}\n\nexport interface MakeRepayIxOpts {\n  wrapAndUnwrapSol?: boolean;\n  wSolBalanceUi?: number;\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n  };\n}\n\nexport interface MakeRepayIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  repayAll?: boolean;\n  isSync?: boolean;\n  opts?: MakeRepayIxOpts;\n}\n\nexport interface MakeRepayTxParams extends MakeRepayIxParams {\n  luts: AddressLookupTableAccount[];\n}\n\nexport interface MakeWithdrawIxOpts {\n  observationBanksOverride?: PublicKey[];\n  wrapAndUnwrapSol?: boolean;\n  createAtas?: boolean;\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n}\n\nexport interface MakeDriftWithdrawIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  bankMap: Map<string, BankType>;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n  driftSpotMarket: DriftSpotMarket;\n  userRewards: DriftRewards[];\n  bankMetadataMap: BankIntegrationMetadataMap;\n  isSync?: boolean;\n  withdrawAll?: boolean;\n  opts?: MakeWithdrawIxOpts;\n}\n\nexport interface MakeKaminoWithdrawIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  bankMap: Map<string, BankType>;\n  tokenProgram: PublicKey;\n  cTokenAmount: Amount;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n  reserve: KaminoReserve;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  isSync?: boolean;\n  withdrawAll?: boolean;\n  opts?: MakeWithdrawIxOpts;\n}\n\nexport interface MakeJuplendWithdrawIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  bankMap: Map<string, BankType>;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n  jupLendingState: JupLendingState;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  isSync?: boolean;\n  withdrawAll?: boolean;\n  opts?: MakeWithdrawIxOpts;\n}\n\nexport interface MakeWithdrawIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  bankMap: Map<string, BankType>;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  isSync?: boolean;\n  withdrawAll?: boolean;\n  opts?: MakeWithdrawIxOpts;\n}\n\nexport interface MakeWithdrawTxParams extends MakeWithdrawIxParams {\n  connection: Connection;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n}\n\nexport interface MakeKaminoWithdrawTxParams extends Omit<\n  MakeKaminoWithdrawIxParams,\n  \"cTokenAmount\"\n> {\n  amount: Amount | TypedAmount;\n  connection: Connection;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n}\n\nexport interface MakeBorrowIxOpts {\n  observationBanksOverride?: PublicKey[];\n  wrapAndUnwrapSol?: boolean;\n  createAtas?: boolean;\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  /**\n   * Additional banks to include in the health check calculation.\n   * Useful for combined operations where a deposit precedes the borrow\n   * and the deposited bank needs to be considered for health calculation.\n   */\n  additionalHealthCheckBanks?: PublicKey[];\n}\n\nexport interface MakeBorrowIxParams {\n  program: MarginfiProgram;\n  bank: BankType;\n  bankMap: Map<string, BankType>;\n  tokenProgram: PublicKey;\n  amount: Amount;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n  isSync?: boolean;\n  opts?: MakeBorrowIxOpts;\n}\n\nexport interface MakeBorrowTxParams extends MakeBorrowIxParams {\n  connection: Connection;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n}\n\nexport interface MakeJuplendWithdrawTxParams extends MakeJuplendWithdrawIxParams {\n  connection: Connection;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n}\n\nexport interface MakeDriftWithdrawTxParams extends MakeDriftWithdrawIxParams {\n  connection: Connection;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n}\n\nexport interface MakeCloseAccountIxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  authority: PublicKey;\n}\n\nexport interface MakeCloseAccountTxParams extends MakeCloseAccountIxParams {\n  connection: Connection;\n}\n\nexport interface MakeAccountTransferToNewAccountTxParams {\n  connection: Connection;\n  program: MarginfiProgram;\n  /** The account being transferred (its current authority is the signer). */\n  marginfiAccount: MarginfiAccountType;\n  /** Freshly generated keypair for the destination account; must sign. */\n  newMarginfiAccount: Signer;\n  /** The wallet that will own the new account. */\n  newAuthority: PublicKey;\n  /** Optional. Pays rent/fees. A `PublicKey` signs via the wallet adapter; a\n   *  `Keypair` is a separate fee payer that signs directly. Defaults to the\n   *  account's current authority. */\n  feePayer?: PublicKey | Keypair;\n}\n\nexport interface TransactionBuilderResult {\n  transactions: SolanaTransaction[];\n  actionTxIndex: number;\n}\n\nexport interface FlashloanActionResult extends TransactionBuilderResult {\n  /** Whether transaction size exceeds limits */\n  txOverflown: boolean;\n}\n\nexport interface MakeFlashLoanTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  bankMap: Map<string, BankType>;\n  ixs: TransactionInstruction[];\n  blockhash: string;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  isSync?: boolean;\n  signers?: Signer[];\n}\n\nexport type TransferPositionSide = \"collateral\" | \"debt\";\n\nexport interface MakeTransferPositionsTxParams {\n  program: MarginfiProgram;\n  connection: Connection;\n  /** Source account A (positions move out of this account). */\n  marginfiAccount: MarginfiAccountType;\n  /** Banks whose A-positions to move; the side is inferred from A's balance. */\n  bankAddresses: PublicKey[];\n  /** Destination account B. Omit to create a fresh account inside the flashloan tx. */\n  destinationAccount?: MarginfiAccountType;\n  /** Only used when `destinationAccount` is omitted. */\n  createDestinationOpts?: { accountIndex?: number; thirdPartyId?: number };\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  /** Token program per transferred bank (base58 bank address → token program id). */\n  tokenProgramsByBank: Map<string, PublicKey>;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  /** Head-room added to each borrow over the estimated debt for interest accrual. Default 10 bps. */\n  borrowPaddingBps?: number;\n  /** Max positions per transfer; a larger selection is rejected. Default 5. */\n  maxPositions?: number;\n  /** Whether the group USD rate limiter is enabled (adds an oracle to each withdraw). Default false. */\n  groupRateLimiterEnabled?: boolean;\n  crossbarUrl?: string;\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey };\n}\n\nexport interface TransferPositionsResult {\n  /** Ordered for execution: [setup/crank txs…, flashloan tx]. */\n  transactions: ExtendedV0Transaction[];\n  /** Index of the flashloan tx in `transactions`. */\n  actionTxIndex: number;\n  /** The destination account (passed-in, or the projected account created in the tx). */\n  destinationAccount: MarginfiAccountType;\n  /** Whether all transactions must land atomically in one bundle. */\n  mustBeAtomicBundle: boolean;\n}\n\nexport interface MakeBulkWithdrawTxParams {\n  program: MarginfiProgram;\n  connection: Connection;\n  marginfiAccount: MarginfiAccountType;\n  /** Banks whose FULL positions to withdraw, in execution order. */\n  bankAddresses: PublicKey[];\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  /** Token program per withdrawn bank (base58 bank address → token program id). */\n  tokenProgramsByBank: Map<string, PublicKey>;\n  /** Whether the group USD rate limiter is enabled (adds an oracle to each withdraw). Default false. */\n  groupRateLimiterEnabled?: boolean;\n  luts: AddressLookupTableAccount[];\n  crossbarUrl?: string;\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey };\n}\n\nexport interface MakeBulkRepayTxParams {\n  program: MarginfiProgram;\n  connection: Connection;\n  marginfiAccount: MarginfiAccountType;\n  /** Banks whose FULL debts to repay from the wallet. */\n  bankAddresses: PublicKey[];\n  bankMap: Map<string, BankType>;\n  /** Token program per repaid bank (base58 bank address → token program id). */\n  tokenProgramsByBank: Map<string, PublicKey>;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey };\n}\n\nexport interface BulkLendTxsResult {\n  /** Ordered for execution: [setup/crank txs…, action txs…]. */\n  transactions: ExtendedV0Transaction[];\n  /** Index of the first action tx in `transactions`. */\n  actionTxIndex: number;\n  /** Whether all transactions must land atomically in one bundle. */\n  mustBeAtomicBundle: boolean;\n}\n\nexport interface MakeLoopTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  connection: Connection;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  depositOpts: {\n    // if deposit looping, this principal amount will be added\n    inputDepositAmount: number;\n    depositBank: BankType;\n    tokenProgram: PublicKey;\n    loopMode: \"DEPOSIT\" | \"BORROW\";\n    // market price (USD per token, UI units) used for the no-slippage deposit estimate\n    marketPrice: number;\n  };\n  borrowOpts: {\n    borrowAmount: number;\n    borrowBank: BankType;\n    tokenProgram: PublicKey;\n    // market price (USD per token, UI units) used for the no-slippage deposit estimate\n    marketPrice: number;\n  };\n  swapOpts: SwapOpts;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  additionalIxs?: TransactionInstruction[];\n  crossbarUrl?: string;\n  /**\n   * Optional override for how the swap engine runs. Defaults to the in-process\n   * `runSwapEngine`; the app injects a runner that forwards to `/api/tx/swap-engine`\n   * so the multi-provider fan-out happens server-side.\n   *\n   * Also the seam for caller-controlled routing: wrap the default runner to inspect, veto, or\n   * replace the selected route before it's spliced into the flashloan (see\n   * `examples/16c-loop-pinned-route.ts`). For a fully static, pre-reviewed route use\n   * `swapOpts.swapIxs` instead.\n   */\n  swapEngineRunner?: SwapEngineRunner;\n}\n\n/**\n * Describes a loop flashloan that has been built up to — but not including — the swap.\n * Handed off to the swap engine, which selects a route against the remaining tx budget\n * and returns the swap instruction(s) to splice into `innerIxs` at `swapSlotIndex`.\n *\n * The flashloan wrapper (begin/end-FL) is intentionally NOT part of `innerIxs`; its size\n * and account cost are already accounted for in `sizeConstraint` / `maxSwapTotalAccounts`.\n */\nexport interface LoopFlashloanDescriptor {\n  // Inner instructions in final order: [cuRequest..., borrow..., <swap slot>, deposit...]\n  innerIxs: TransactionInstruction[];\n  // Array index in `innerIxs` where the swap instruction(s) should be inserted\n  swapSlotIndex: number;\n  // Index of the deposit instruction in `innerIxs` (for the post-swap amount byte-patch)\n  depositIxIndex: number;\n  inputMint: string;\n  outputMint: string;\n  inputDecimals: number;\n  outputDecimals: number;\n  // Borrow amount in native (base) units — the swap input amount (ExactIn)\n  inAmountNative: number;\n  destinationTokenAccount: PublicKey;\n  // Remaining tx budget for the swap, already net of the flashloan wrapper cost\n  sizeConstraint: number;\n  maxSwapTotalAccounts: number;\n  luts: AddressLookupTableAccount[];\n}\n\nexport interface MakeRepayWithCollatTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  connection: Connection;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  withdrawOpts: {\n    // Amount of the total position\n    totalPositionAmount: number;\n    // Amount to withdraw to pay for debt\n    withdrawAmount: number;\n    withdrawBank: BankType;\n    tokenProgram: PublicKey;\n  };\n  repayOpts: {\n    repayBank: BankType;\n    tokenProgram: PublicKey;\n    // Amount of the total position use to determine max repay amount\n    totalPositionAmount: number;\n    // if repayAmount is provided, it will be used instead of jupiter swap output\n    repayAmount?: number;\n  };\n  swapOpts: SwapOpts;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  additionalIxs?: TransactionInstruction[];\n  crossbarUrl?: string;\n  /** See `MakeLoopTxParams.swapEngineRunner`. */\n  swapEngineRunner?: SwapEngineRunner;\n}\n\nexport interface MakeSwapCollateralTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  connection: Connection;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  withdrawOpts: {\n    // Amount of the total position (used for withdrawAll case)\n    totalPositionAmount: number;\n    // Amount to withdraw (optional, defaults to totalPositionAmount for full swap)\n    withdrawAmount?: number;\n    withdrawBank: BankType;\n    tokenProgram: PublicKey;\n  };\n  depositOpts: {\n    depositBank: BankType;\n    tokenProgram: PublicKey;\n  };\n  swapOpts: SwapOpts;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  additionalIxs?: TransactionInstruction[];\n  crossbarUrl?: string;\n  /** See `MakeLoopTxParams.swapEngineRunner`. */\n  swapEngineRunner?: SwapEngineRunner;\n}\n\n/**\n * Params for {@link makeRollPtTx} — rolling a matured Exponent PT collateral position into\n * its next-maturity PT, so the **full deposit ends up as new PT** (no leftover), in one\n * flash-loan-wrapped bundle:\n *   1. withdraw the old PT, then Exponent `merge` (redeem PT → SY, post-maturity, 1:1)\n *   2. buy the new PT with that SY directly on the successor's **CLMM** (`MarketThree`) PT/SY\n *      pool via `trade_pt` — no base-token round-trip, no external aggregator\n *   3. deposit the new PT.\n *\n * The buy is liquidity-bounded by the successor pool's depth. The redeem is sized by the\n * vault's `pt_redemption_rate`; the SY → PT price is quoted by simulating a standalone\n * `trade_pt`, so the deposit is sized to the guaranteed minimum out.\n */\nexport interface MakeRollPtTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  connection: Connection;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  withdrawOpts: {\n    totalPositionAmount: number;\n    withdrawAmount?: number;\n    /** The expiring (matured) PT bank. */\n    withdrawBank: BankType;\n    tokenProgram: PublicKey;\n  };\n  depositOpts: {\n    /** The successor (next-maturity) PT bank. */\n    depositBank: BankType;\n    tokenProgram: PublicKey;\n  };\n  /** Exponent redeem (`merge`) + successor-CLMM buy config for the matured PT. */\n  rollOpts: RollPtOpts;\n  /** See {@link RollQuoteSimulator}. Defaults to `connection.simulateTransaction`. */\n  simulateTx?: RollQuoteSimulator;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  crossbarUrl?: string;\n}\n\n/** One token-account balance snapshot from a {@link makeRollPtTx} quote simulation. */\nexport interface RollQuoteTokenBalance {\n  mint: string;\n  owner: string;\n  /** Raw native token amount (integer string). */\n  amount: string;\n}\n\n/**\n * Result of one {@link makeRollPtTx} quote simulation. The roll builder prefers the\n * pre/post token-balance delta (ground truth, reported by bundle-sim transports) and\n * falls back to `returnData` for plain `simulateTransaction` transports — so pass\n * through whichever of these the backend provides.\n */\nexport interface RollQuoteSimResult {\n  err: unknown;\n  logs: string[] | null;\n  returnData?: { programId: string; data: [string, string] } | null;\n  preTokenBalances?: RollQuoteTokenBalance[] | null;\n  postTokenBalances?: RollQuoteTokenBalance[] | null;\n}\n\n/**\n * Transport for {@link makeRollPtTx}'s quote simulations (standalone, expected-to-succeed\n * transactions). The transaction is unsigned, so implementations must simulate with\n * `sigVerify: false` and `replaceRecentBlockhash: true`. Defaults to\n * `connection.simulateTransaction`; browsers whose RPC proxy disallows\n * `simulateTransaction` inject one that routes through an app-side endpoint instead.\n */\nexport type RollQuoteSimulator = (tx: VersionedTransaction) => Promise<RollQuoteSimResult>;\n\n/**\n * Exponent roll config for {@link makeRollPtTx}. `makeRollPtTx` resolves the matured vault's\n * `merge` accounts and the successor pool's CLMM `trade_pt` accounts internally from these\n * addresses — the caller never assembles Exponent accounts/ixs.\n */\nexport interface RollPtOpts {\n  /** The matured PT's Exponent `MarketTwo` — its `vault` is read (one of market/vault required). */\n  maturedMarket?: PublicKey;\n  /** …or the matured vault directly. */\n  maturedVault?: PublicKey;\n  /** The successor maturity's **CLMM** (`MarketThree`) pool — where the new PT trades (SY → PT). */\n  successorMarket: PublicKey;\n  /** Slippage tolerance (bps) for the SY → PT CLMM swap. Defaults to 50. */\n  slippageBps?: number;\n  /** Token program for the shared SY mint (defaults to the classic Token program). */\n  syTokenProgram?: PublicKey;\n  /**\n   * Optional dedicated PT-roll address lookup table (fetched internally) that compresses the\n   * merge + CLMM-swap flashloan bytes (see `examples/create-pt-roll-lut.ts`). Account *locks*\n   * are already bounded by the compact, fixed CLMM footprint.\n   */\n  lookupTable?: PublicKey;\n}\n\nexport interface MakeSwapDebtTxParams {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  connection: Connection;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  // Source debt (what we're repaying)\n  repayOpts: {\n    // Amount of the total debt position (used for repayAll case)\n    totalPositionAmount: number;\n    // Amount to repay (optional, defaults to totalPositionAmount for full swap)\n    repayAmount?: number;\n    repayBank: BankType;\n    tokenProgram: PublicKey;\n    // Market price (USD per token, UI units) used to size the borrow amount.\n    marketPrice: number;\n  };\n  // Destination debt (what we're borrowing)\n  borrowOpts: {\n    borrowBank: BankType;\n    tokenProgram: PublicKey;\n    // Market price (USD per token, UI units) used to size the borrow amount.\n    marketPrice: number;\n  };\n  swapOpts: SwapOpts;\n  addressLookupTableAccounts?: AddressLookupTableAccount[];\n  overrideInferAccounts?: {\n    group?: PublicKey;\n    authority?: PublicKey;\n  };\n  additionalIxs?: TransactionInstruction[];\n  crossbarUrl?: string;\n  /** See `MakeLoopTxParams.swapEngineRunner`. */\n  swapEngineRunner?: SwapEngineRunner;\n}\n\nexport interface MakeSetupIxParams {\n  connection: Connection;\n  authority: PublicKey;\n  tokens: {\n    mint: PublicKey;\n    tokenProgram: PublicKey;\n  }[];\n}\n","import BigNumber from \"bignumber.js\";\n\nexport interface PriceWithConfidence {\n  price: BigNumber;\n  confidence: BigNumber;\n  lowestPrice: BigNumber;\n  highestPrice: BigNumber;\n}\n\nexport interface OraclePrice {\n  priceRealtime: PriceWithConfidence;\n  priceWeighted: PriceWithConfidence;\n  timestamp: BigNumber;\n  switchboardData?: {\n    queue: string;\n    feedHash: string;\n    maxVariance: string;\n    minResponses: number;\n    rawPrice: string;\n    stdev: string;\n  };\n}\n\nexport enum PriceBias {\n  Lowest = 0,\n  None = 1,\n  Highest = 2,\n}\n\nexport interface PriceWithConfidenceDto {\n  price: string;\n  confidence: string;\n  lowestPrice: string;\n  highestPrice: string;\n}\n\nexport interface OraclePriceDto {\n  priceRealtime: PriceWithConfidenceDto;\n  priceWeighted: PriceWithConfidenceDto;\n  timestamp: string;\n  switchboardData?: {\n    queue: string;\n    feedHash: string;\n    maxVariance: string;\n    minResponses: number;\n    rawPrice: string;\n    stdev: string;\n  };\n}\n","import { BankType, OracleSetup } from \"~/services/bank\";\n\nconst ORACLE_SOURCES = {\n  switchboard: \"Switchboard\",\n  pyth: \"Pyth\",\n  fixed: \"Fixed\",\n  scope: \"Scope\",\n  unknown: \"Unknown\",\n} as const;\n\nexport type OracleSourceKey = keyof typeof ORACLE_SOURCES;\n\n/**\n * Gets the oracle source from a oracle source key\n * @param oracleSourceKey - The oracle source key\n * @returns The oracle source name\n */\nexport function getOracleSourceNameFromKey(oracleSourceKey: string): string {\n  return ORACLE_SOURCES[oracleSourceKey as OracleSourceKey] || oracleSourceKey;\n}\n\n/**\n * Gets the venue from a bank\n * @param bank - The bank to get the venue from\n * @returns The venue\n */\nexport function getOracleSourceFromBank(bank: BankType): {\n  key: OracleSourceKey;\n  name: string;\n} {\n  return getOracleSourceFromOracleSetup(bank.config.oracleSetup);\n}\n\nexport function getOracleSourceFromOracleSetup(oracleSetup: OracleSetup) {\n  let oracleSourceKey: OracleSourceKey;\n\n  switch (oracleSetup) {\n    case OracleSetup.SwitchboardPull:\n    case OracleSetup.SwitchboardV2:\n    case OracleSetup.DriftSwitchboardPull:\n    case OracleSetup.KaminoSwitchboardPull:\n    case OracleSetup.JuplendSwitchboardPull:\n    case OracleSetup.SolendSwitchboardPull:\n      oracleSourceKey = \"switchboard\";\n      break;\n    case OracleSetup.PythPushOracle:\n    case OracleSetup.PythLegacy:\n    case OracleSetup.StakedWithPythPush:\n    case OracleSetup.KaminoPythPush:\n    case OracleSetup.DriftPythPull:\n    case OracleSetup.SolendPythPull:\n    case OracleSetup.JuplendPythPull:\n    case OracleSetup.PythMSOL:\n    case OracleSetup.KaminoMSOL:\n    case OracleSetup.JuplendMSOL:\n    case OracleSetup.PythLST:\n    case OracleSetup.KaminoLST:\n    case OracleSetup.JuplendLST:\n    case OracleSetup.PTPyth:\n      oracleSourceKey = \"pyth\";\n      break;\n    case OracleSetup.Fixed:\n    case OracleSetup.FixedKamino:\n    case OracleSetup.FixedDrift:\n    case OracleSetup.FixedJuplend:\n    case OracleSetup.PTFixed:\n      oracleSourceKey = \"fixed\";\n      break;\n    case OracleSetup.Scope:\n      oracleSourceKey = \"scope\";\n      break;\n    default:\n      oracleSourceKey = \"unknown\";\n      break;\n  }\n\n  return {\n    key: oracleSourceKey,\n    name: ORACLE_SOURCES[oracleSourceKey],\n  };\n}\n","import { deserialize } from \"borsh\";\n\ntype PriceUpdateV2 = {\n  writeAuthority: Buffer;\n  verificationLevel: number;\n  priceMessage: {\n    feedId: Buffer;\n    price: bigint;\n    conf: bigint;\n    exponent: number;\n    publishTime: bigint;\n    prevPublishTime: bigint;\n    emaPrice: bigint;\n    emaConf: bigint;\n  };\n};\n\nconst priceUpdateV2Schema = {\n  struct: {\n    writeAuthority: {\n      array: { type: \"u8\", len: 32 },\n    },\n    verificationLevel: \"u8\",\n    priceMessage: {\n      struct: {\n        feedId: { array: { type: \"u8\", len: 32 } },\n        price: \"i64\",\n        conf: \"u64\",\n        exponent: \"i32\",\n        publishTime: \"i64\",\n        prevPublishTime: \"i64\",\n        emaPrice: \"i64\",\n        emaConf: \"u64\",\n      },\n    },\n    postedSlot: \"u64\",\n  },\n};\n\nexport const parsePriceInfo = (data: Buffer): PriceUpdateV2 => {\n  const decoded: PriceUpdateV2 = deserialize(priceUpdateV2Schema, data) as any;\n  return decoded;\n};\n","import BigNumber from \"bignumber.js\";\n\nimport { OraclePrice, PriceWithConfidence } from \"../types\";\n\nimport { PYTH_PRICE_CONF_INTERVALS, MAX_CONFIDENCE_INTERVAL_RATIO } from \"~/constants\";\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { parsePriceInfo } from \"~/vendor/pyth_push_oracle\";\n\n/**\n * Categorizes banks by their oracle setup type into legacy, push, and staked collateral banks\n * @param banks - Array of bank objects\n * @returns Object containing categorized banks by oracle type\n *   - pythLegacyBanks: Banks using deprecated Pyth legacy oracles\n *   - pythPushBanks: Banks using Pyth push oracles\n *   - pythStakedCollateralBanks: Banks using staked collateral with Pyth push oracles\n *   - pythPushKaminosBanks: Banks using Kamino with Pyth push oracles\n *   - driftPythPullBanks: Banks using Drift with Pyth pull oracles\n *   - solendPythPullBanks: Banks using Solend with Pyth pull oracles\n */\nexport const categorizePythBanks = (banks: BankType[]) => {\n  // Depracated\n  const pythLegacyBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.PythLegacy\n  );\n\n  // Pyth push oracle banks\n  const pythPushBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.PythPushOracle\n  );\n\n  // Staked collateral pyth banks (all have sol oracle)\n  const pythStakedCollateralBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.StakedWithPythPush\n  );\n\n  // Pyth push kaminos banks\n  const pythPushKaminosBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.KaminoPythPush\n  );\n\n  // Drift pyth pull banks\n  const driftPythPullBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.DriftPythPull\n  );\n\n  // Solend pyth pull banks\n  const solendPythPullBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.SolendPythPull\n  );\n\n  const juplendPythPullBanks = banks.filter(\n    (bank) => bank.config.oracleSetup === OracleSetup.JuplendPythPull\n  );\n\n  // Banks priced as a pyth base feed multiplied by an on-chain exchange rate\n  const pythMultipliedBanks = banks.filter((bank) =>\n    [\n      OracleSetup.PythMSOL,\n      OracleSetup.KaminoMSOL,\n      OracleSetup.JuplendMSOL,\n      OracleSetup.PythLST,\n      OracleSetup.KaminoLST,\n      OracleSetup.JuplendLST,\n      OracleSetup.PTPyth,\n    ].includes(bank.config.oracleSetup)\n  );\n\n  return {\n    pythLegacyBanks,\n    pythPushBanks,\n    pythStakedCollateralBanks,\n    pythPushKaminosBanks,\n    driftPythPullBanks,\n    solendPythPullBanks,\n    juplendPythPullBanks,\n    pythMultipliedBanks,\n  };\n};\n\n/**\n * Converts vote account coefficients to bank address coefficients for staked collateral pricing\n * @param pythStakedCollateralBanks - Array of staked collateral banks\n * @param validatorVoteAccountByBank - Mapping of bank addresses to validator vote accounts\n * @param voteAccCoeffs - Price coefficients indexed by vote account addresses\n * @returns Record mapping bank addresses to their corresponding price coefficients\n */\nexport const convertVoteAccCoeffsToBankCoeffs = (\n  pythStakedCollateralBanks: BankType[],\n  validatorVoteAccountByBank: {\n    [address: string]: string;\n  },\n  voteAccCoeffs: Record<string, number>\n): Record<string, number> => {\n  const priceCoeffByBank: Record<string, number> = {};\n\n  pythStakedCollateralBanks.forEach((bank) => {\n    const voteAccount = validatorVoteAccountByBank[bank.address.toBase58()];\n    if (voteAccount && voteAccCoeffs[voteAccount] !== undefined) {\n      priceCoeffByBank[bank.address.toBase58()] = voteAccCoeffs[voteAccount];\n    }\n  });\n\n  return priceCoeffByBank;\n};\n\n/**\n * Extracts oracle keys from Pyth banks for price data fetching\n * @param pythBanks - Array of Pyth bank objects\n * @returns Array of oracle key strings in base58 format\n */\nexport const extractPythOracleKeys = (pythBanks: BankType[]): string[] => {\n  const keys = pythBanks.map((bank) => bank.config.oracleKeys[0].toBase58());\n\n  return [...keys];\n};\n\n/**\n * Maps banks to their corresponding oracle prices with optional price coefficient adjustments\n * @param pythPushBanks - Array of Pyth push oracle banks\n * @param pythStakedCollateralBanks - Array of staked collateral banks requiring price adjustments\n * @param oraclePrices - Record of oracle prices indexed by oracle key\n * @param priceCoeffByBank - Price coefficients for staked collateral banks\n * @returns Map of bank addresses to their corresponding oracle prices\n */\nexport const mapPythBanksToOraclePrices = (\n  pythPushBanks: BankType[],\n  multipliedBanks: BankType[],\n  oraclePrices: Record<string, OraclePrice>,\n  priceCoeffByBank: Record<string, number>\n): Map<string, OraclePrice> => {\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n  // Map banks\n  pythPushBanks.forEach((bank) => {\n    const oracleKey = bank.config.oracleKeys[0].toBase58();\n    const oraclePrice = oraclePrices[oracleKey];\n    if (oraclePrice) {\n      bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n    }\n  });\n\n  // Map multiplied banks with price coefficient adjustment\n  multipliedBanks.forEach((bank) => {\n    const priceCoeff = priceCoeffByBank[bank.address.toBase58()];\n    const oracleKey = bank.config.oracleKeys[0]?.toBase58();\n\n    if (oracleKey && priceCoeff !== undefined && Number.isFinite(priceCoeff)) {\n      const oraclePrice = oraclePrices[oracleKey];\n      if (oraclePrice) {\n        bankOraclePriceMap.set(bank.address.toBase58(), {\n          timestamp: oraclePrice.timestamp,\n          priceRealtime: adjustPriceComponent(oraclePrice.priceRealtime, priceCoeff),\n          priceWeighted: adjustPriceComponent(oraclePrice.priceWeighted, priceCoeff),\n        });\n      }\n    }\n  });\n\n  return bankOraclePriceMap;\n};\n\n/**\n * Adjusts price component values by multiplying with a price coefficient\n * @param priceComponent - Price component containing price, confidence, and bounds\n * @param priceCoeff - Multiplier coefficient to adjust the price values\n * @returns Adjusted price component with multiplied price and bounds\n */\nexport const adjustPriceComponent = (priceComponent: PriceWithConfidence, priceCoeff: number) => ({\n  price: priceComponent.price.multipliedBy(priceCoeff),\n  confidence: priceComponent.confidence.multipliedBy(priceCoeff),\n  lowestPrice: priceComponent.lowestPrice.multipliedBy(priceCoeff),\n  highestPrice: priceComponent.highestPrice.multipliedBy(priceCoeff),\n});\n\n/**\n * Parses raw Pyth price data from RPC into standardized OraclePriceDto format\n * @param rawData - Raw buffer data from Pyth price account\n * @returns Parsed oracle price data with realtime and weighted price information\n */\nexport function parseRpcPythPriceData(rawData: Buffer): OraclePrice {\n  function capConfidenceInterval(\n    price: BigNumber,\n    confidence: BigNumber,\n    maxConfidence: BigNumber\n  ): BigNumber {\n    const maxConfidenceInterval = price.times(maxConfidence);\n\n    return BigNumber.min(confidence, maxConfidenceInterval);\n  }\n\n  const bytesWithoutDiscriminator = rawData.slice(8);\n  const data = parsePriceInfo(bytesWithoutDiscriminator);\n\n  const exponent = new BigNumber(10 ** data.priceMessage.exponent);\n\n  const priceRealTime = new BigNumber(Number(data.priceMessage.price)).times(exponent);\n  const confidenceRealTime = new BigNumber(Number(data.priceMessage.conf))\n    .times(exponent)\n    .times(PYTH_PRICE_CONF_INTERVALS);\n  const cappedConfidenceRealTime = capConfidenceInterval(\n    priceRealTime,\n    confidenceRealTime,\n    MAX_CONFIDENCE_INTERVAL_RATIO\n  );\n  const lowestPriceRealTime = priceRealTime.minus(cappedConfidenceRealTime);\n  const highestPriceRealTime = priceRealTime.plus(cappedConfidenceRealTime);\n\n  const priceTimeWeighted = new BigNumber(Number(data.priceMessage.emaPrice)).times(exponent);\n  const confidenceTimeWeighted = new BigNumber(Number(data.priceMessage.emaConf))\n    .times(exponent)\n    .times(PYTH_PRICE_CONF_INTERVALS);\n  const cappedConfidenceWeighted = capConfidenceInterval(\n    priceTimeWeighted,\n    confidenceTimeWeighted,\n    MAX_CONFIDENCE_INTERVAL_RATIO\n  );\n  const lowestPriceWeighted = priceTimeWeighted.minus(cappedConfidenceWeighted);\n  const highestPriceWeighted = priceTimeWeighted.plus(cappedConfidenceWeighted);\n\n  return {\n    priceRealtime: {\n      price: priceRealTime,\n      confidence: cappedConfidenceRealTime,\n      lowestPrice: lowestPriceRealTime,\n      highestPrice: highestPriceRealTime,\n    },\n    priceWeighted: {\n      price: priceTimeWeighted,\n      confidence: cappedConfidenceWeighted,\n      lowestPrice: lowestPriceWeighted,\n      highestPrice: highestPriceWeighted,\n    },\n    timestamp: new BigNumber(Number(data.priceMessage.publishTime)),\n  };\n}\n","{\n  \"address\": \"SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv\",\n  \"metadata\": {\n    \"name\": \"sb_on_demand\",\n    \"version\": \"0.1.0\",\n    \"spec\": \"0.1.0\",\n    \"description\": \"Created with Anchor\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"guardian_quote_verify\",\n      \"discriminator\": [168, 36, 93, 156, 157, 150, 148, 45],\n      \"accounts\": [\n        { \"name\": \"guardian\", \"writable\": true },\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n        { \"name\": \"guardian_queue\", \"writable\": true, \"relations\": [\"state\"] },\n        { \"name\": \"state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"GuardianQuoteVerifyParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"guardian_register\",\n      \"discriminator\": [159, 76, 53, 117, 219, 29, 116, 135],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"state\" },\n        { \"name\": \"guardian_queue\", \"relations\": [\"state\"] },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"GuardianRegisterParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"guardian_unregister\",\n      \"discriminator\": [215, 19, 61, 120, 155, 224, 120, 60],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"state\" },\n        { \"name\": \"guardian_queue\", \"writable\": true, \"relations\": [\"state\"] },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"GuardianUnregisterParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_heartbeat\",\n      \"discriminator\": [10, 175, 217, 130, 111, 35, 117, 54],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        {\n          \"name\": \"oracle_stats\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n              },\n              { \"kind\": \"account\", \"path\": \"oracle\" }\n            ]\n          }\n        },\n        { \"name\": \"oracle_signer\", \"signer\": true },\n        {\n          \"name\": \"queue\",\n          \"writable\": true,\n          \"relations\": [\"oracle\", \"gc_node\"]\n        },\n        { \"name\": \"gc_node\", \"writable\": true },\n        { \"name\": \"program_state\", \"writable\": true },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"native_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"queue_escrow\", \"writable\": true },\n        { \"name\": \"stake_program\" },\n        { \"name\": \"delegation_pool\" },\n        { \"name\": \"delegation_group\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleHeartbeatParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_heartbeat_v2\",\n      \"discriminator\": [122, 231, 66, 32, 226, 62, 144, 103],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        {\n          \"name\": \"oracle_stats\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n              },\n              { \"kind\": \"account\", \"path\": \"oracle\" }\n            ]\n          }\n        },\n        { \"name\": \"oracle_signer\", \"signer\": true },\n        {\n          \"name\": \"queue\",\n          \"writable\": true,\n          \"relations\": [\"oracle\", \"gc_node\"]\n        },\n        { \"name\": \"gc_node\", \"writable\": true },\n        { \"name\": \"program_state\", \"writable\": true }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleHeartbeatV2Params\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_init\",\n      \"discriminator\": [21, 158, 66, 65, 60, 221, 148, 61],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"oracle_stats\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n              },\n              { \"kind\": \"account\", \"path\": \"oracle\" }\n            ]\n          }\n        },\n        { \"name\": \"program_state\", \"writable\": true },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleInitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_init_svm\",\n      \"discriminator\": [106, 20, 36, 117, 166, 175, 131, 83],\n      \"accounts\": [\n        {\n          \"name\": \"oracle\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"const\", \"value\": [79, 114, 97, 99, 108, 101] },\n              { \"kind\": \"arg\", \"path\": \"params.queue\" },\n              { \"kind\": \"arg\", \"path\": \"params.source_oracle_key\" }\n            ]\n          }\n        },\n        {\n          \"name\": \"oracle_stats\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [79, 114, 97, 99, 108, 101, 83, 116, 97, 116, 115]\n              },\n              { \"kind\": \"account\", \"path\": \"oracle\" }\n            ]\n          }\n        },\n        { \"name\": \"program_state\", \"writable\": true },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        },\n        { \"name\": \"stake_program\" },\n        { \"name\": \"stake_pool\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleInitSVMParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_reset_lut\",\n      \"discriminator\": [147, 244, 108, 198, 152, 219, 0, 22],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"program_state\" },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleResetLutParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_set_configs\",\n      \"discriminator\": [129, 111, 223, 4, 191, 188, 70, 180],\n      \"accounts\": [\n        { \"name\": \"oracle\" },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleSetConfigsParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_set_operator\",\n      \"discriminator\": [210, 232, 155, 124, 69, 176, 242, 133],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n        { \"name\": \"operator\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleSetOperatorParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"oracle_sync_lut\",\n      \"discriminator\": [138, 99, 12, 59, 18, 170, 171, 45],\n      \"accounts\": [\n        { \"name\": \"oracle\" },\n        { \"name\": \"queue\", \"relations\": [\"oracle\"] },\n        { \"name\": \"ncn\" },\n        { \"name\": \"vault\" },\n        { \"name\": \"state\" },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"oracle\"] },\n        { \"name\": \"operator\", \"relations\": [\"oracle\"] },\n        { \"name\": \"ncn_operator_state\" },\n        { \"name\": \"operator_vault_ticket\" },\n        { \"name\": \"vault_operator_delegation\" },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        },\n        { \"name\": \"payer\", \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"OracleSyncLutParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"permission_set\",\n      \"discriminator\": [211, 122, 185, 120, 129, 182, 55, 103],\n      \"accounts\": [\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"granter\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PermissionSetParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_close\",\n      \"discriminator\": [19, 134, 50, 142, 177, 215, 196, 83],\n      \"accounts\": [\n        { \"name\": \"pull_feed\", \"writable\": true },\n        { \"name\": \"reward_escrow\", \"writable\": true },\n        { \"name\": \"lut\", \"writable\": true },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        { \"name\": \"state\" },\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\"pull_feed\"]\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedCloseParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_init\",\n      \"discriminator\": [198, 130, 53, 198, 235, 61, 143, 40],\n      \"accounts\": [\n        { \"name\": \"pull_feed\", \"writable\": true, \"signer\": true },\n        { \"name\": \"queue\" },\n        { \"name\": \"authority\" },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"reward_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"pull_feed\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"wrapped_sol_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"wrapped_sol_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedInitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_set_configs\",\n      \"discriminator\": [217, 45, 11, 246, 64, 26, 82, 168],\n      \"accounts\": [\n        { \"name\": \"pull_feed\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"pull_feed\"] }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedSetConfigsParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_submit_response\",\n      \"discriminator\": [150, 22, 215, 166, 143, 93, 48, 137],\n      \"accounts\": [\n        { \"name\": \"feed\", \"writable\": true },\n        { \"name\": \"queue\", \"relations\": [\"feed\"] },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"reward_vault\", \"writable\": true },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"token_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_submit_response_consensus\",\n      \"discriminator\": [239, 124, 39, 184, 147, 222, 16, 248],\n      \"accounts\": [\n        { \"name\": \"queue\" },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"reward_vault\", \"writable\": true },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"token_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        {\n          \"name\": \"ix_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": { \"name\": \"PullFeedSubmitResponseConsensusParams\" }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_submit_response_consensus_light\",\n      \"discriminator\": [178, 179, 88, 144, 175, 130, 157, 87],\n      \"accounts\": [\n        { \"name\": \"queue\" },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        {\n          \"name\": \"ix_sysvar\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": { \"name\": \"PullFeedSubmitResponseConsensusLightParams\" }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_submit_response_many\",\n      \"discriminator\": [47, 156, 45, 25, 200, 71, 37, 215],\n      \"accounts\": [\n        { \"name\": \"queue\" },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"reward_vault\", \"writable\": true },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"token_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseManyParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"pull_feed_submit_response_svm\",\n      \"discriminator\": [123, 7, 190, 12, 220, 230, 198, 148],\n      \"accounts\": [\n        { \"name\": \"feed\", \"writable\": true },\n        {\n          \"name\": \"queue\",\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"const\", \"value\": [81, 117, 101, 117, 101] },\n              { \"kind\": \"arg\", \"path\": \"params.source_queue_key\" }\n            ]\n          },\n          \"relations\": [\"feed\"]\n        },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"reward_vault\", \"writable\": true },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"token_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"PullFeedSubmitResponseSVMParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_add_mr_enclave\",\n      \"discriminator\": [199, 255, 81, 50, 60, 133, 171, 138],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"program_authority\" },\n        { \"name\": \"state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueAddMrEnclaveParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_allow_subsidies\",\n      \"discriminator\": [94, 203, 82, 157, 188, 138, 202, 108],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] },\n        { \"name\": \"state\", \"writable\": true }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueAllowSubsidiesParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_garbage_collect\",\n      \"discriminator\": [187, 208, 104, 247, 16, 91, 96, 98],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueGarbageCollectParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_init\",\n      \"discriminator\": [144, 18, 99, 145, 133, 27, 207, 13],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"queue_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"queue\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"native_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        { \"name\": \"authority\" },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"native_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"program_state\" },\n        { \"name\": \"lut_signer\", \"writable\": true },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueInitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_init_svm\",\n      \"discriminator\": [175, 94, 119, 151, 45, 144, 173, 235],\n      \"accounts\": [\n        {\n          \"name\": \"queue\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"const\", \"value\": [81, 117, 101, 117, 101] },\n              { \"kind\": \"arg\", \"path\": \"params.source_queue_key\" }\n            ]\n          }\n        },\n        {\n          \"name\": \"queue_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"queue\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"native_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        { \"name\": \"authority\" },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"native_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"program_state\" },\n        { \"name\": \"lut_signer\", \"writable\": true },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueInitSVMParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_override_svm\",\n      \"discriminator\": [43, 103, 15, 35, 89, 14, 244, 165],\n      \"accounts\": [\n        { \"name\": \"oracle\", \"writable\": true },\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueOverrideSVMParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_pay_subsidy\",\n      \"discriminator\": [85, 84, 51, 251, 144, 57, 105, 200],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"program_state\" },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"vault\" },\n        {\n          \"name\": \"reward_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"vault\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"switch_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"subsidy_vault\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"program_state\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"switch_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"wsol_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"switch_mint\" },\n        { \"name\": \"vault_config\" },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueuePaySubsidyParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_remove_mr_enclave\",\n      \"discriminator\": [3, 64, 135, 33, 190, 133, 68, 252],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"program_authority\" },\n        { \"name\": \"state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueRemoveMrEnclaveParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_reset_vault\",\n      \"discriminator\": [232, 255, 48, 111, 240, 168, 253, 40],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" },\n        { \"name\": \"ncn\", \"relations\": [\"queue\"] },\n        { \"name\": \"vault\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueResetVaultParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_set_configs\",\n      \"discriminator\": [54, 183, 243, 199, 49, 103, 142, 48],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueSetConfigsParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_set_ncn\",\n      \"discriminator\": [232, 223, 179, 12, 20, 136, 181, 219],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" },\n        { \"name\": \"ncn\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueSetNcnParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_set_vault\",\n      \"discriminator\": [48, 47, 102, 99, 241, 249, 196, 246],\n      \"accounts\": [\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"state\" },\n        { \"name\": \"ncn\", \"relations\": [\"queue\"] },\n        { \"name\": \"vault\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"QueueSetVaultParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"randomness_commit\",\n      \"discriminator\": [52, 170, 152, 201, 179, 133, 242, 141],\n      \"accounts\": [\n        { \"name\": \"randomness\", \"writable\": true },\n        { \"name\": \"queue\", \"relations\": [\"randomness\", \"oracle\"] },\n        { \"name\": \"oracle\", \"writable\": true },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"randomness\"] }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"RandomnessCommitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"randomness_init\",\n      \"discriminator\": [9, 9, 204, 33, 50, 116, 113, 15],\n      \"accounts\": [\n        { \"name\": \"randomness\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"reward_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              { \"kind\": \"account\", \"path\": \"randomness\" },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206,\n                  235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140,\n                  245, 133, 126, 255, 0, 169\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"wrapped_sol_mint\" }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        { \"name\": \"authority\", \"signer\": true },\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"wrapped_sol_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"program_state\" },\n        { \"name\": \"lut_signer\" },\n        { \"name\": \"lut\", \"writable\": true },\n        {\n          \"name\": \"address_lookup_table_program\",\n          \"address\": \"AddressLookupTab1e1111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"RandomnessInitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"randomness_reveal\",\n      \"discriminator\": [197, 181, 187, 10, 30, 58, 20, 73],\n      \"accounts\": [\n        { \"name\": \"randomness\", \"writable\": true },\n        { \"name\": \"oracle\", \"relations\": [\"randomness\"] },\n        { \"name\": \"queue\", \"relations\": [\"oracle\"] },\n        {\n          \"name\": \"stats\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  79, 114, 97, 99, 108, 101, 82, 97, 110, 100, 111, 109, 110,\n                  101, 115, 115, 83, 116, 97, 116, 115\n                ]\n              },\n              { \"kind\": \"account\", \"path\": \"oracle\" }\n            ]\n          }\n        },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"randomness\"] },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"recent_slothashes\",\n          \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        { \"name\": \"reward_escrow\", \"writable\": true },\n        {\n          \"name\": \"token_program\",\n          \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n        },\n        {\n          \"name\": \"wrapped_sol_mint\",\n          \"address\": \"So11111111111111111111111111111111111111112\"\n        },\n        { \"name\": \"program_state\" }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"RandomnessRevealParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"state_init\",\n      \"discriminator\": [103, 241, 106, 190, 217, 153, 87, 105],\n      \"accounts\": [\n        {\n          \"name\": \"state\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [{ \"kind\": \"const\", \"value\": [83, 84, 65, 84, 69] }]\n          }\n        },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"StateInitParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"state_set_configs\",\n      \"discriminator\": [40, 98, 76, 37, 206, 9, 47, 144],\n      \"accounts\": [\n        { \"name\": \"state\", \"writable\": true },\n        { \"name\": \"authority\", \"signer\": true, \"relations\": [\"state\"] },\n        { \"name\": \"queue\", \"writable\": true },\n        { \"name\": \"payer\", \"writable\": true, \"signer\": true },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"StateSetConfigsParams\" } }\n        }\n      ]\n    },\n    {\n      \"name\": \"test_update_oracle_stats\",\n      \"discriminator\": [175, 48, 162, 252, 154, 197, 149, 187],\n      \"accounts\": [\n        {\n          \"name\": \"oracle_stats\",\n          \"docs\": [\"The OracleStats account to update.\"],\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": { \"defined\": { \"name\": \"TestUpdateOracleStatsParams\" } }\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"OracleAccountData\",\n      \"discriminator\": [128, 30, 16, 241, 170, 73, 55, 54]\n    },\n    {\n      \"name\": \"OracleStatsAccountData\",\n      \"discriminator\": [180, 157, 178, 234, 240, 27, 152, 179]\n    },\n    {\n      \"name\": \"PullFeedAccountData\",\n      \"discriminator\": [196, 27, 108, 196, 10, 215, 219, 40]\n    },\n    {\n      \"name\": \"QueueAccountData\",\n      \"discriminator\": [217, 194, 55, 127, 184, 83, 138, 1]\n    },\n    {\n      \"name\": \"RandomnessAccountData\",\n      \"discriminator\": [10, 66, 229, 135, 220, 239, 217, 114]\n    },\n    { \"name\": \"State\", \"discriminator\": [216, 146, 107, 94, 104, 75, 182, 177] }\n  ],\n  \"events\": [\n    {\n      \"name\": \"CostWhitelistEvent\",\n      \"discriminator\": [56, 107, 191, 127, 116, 6, 138, 149]\n    },\n    {\n      \"name\": \"GarbageCollectionEvent\",\n      \"discriminator\": [232, 235, 2, 188, 8, 143, 145, 237]\n    },\n    {\n      \"name\": \"GuardianQuoteVerifyEvent\",\n      \"discriminator\": [31, 37, 39, 6, 214, 186, 33, 115]\n    },\n    {\n      \"name\": \"OracleHeartbeatEvent\",\n      \"discriminator\": [52, 29, 166, 2, 94, 7, 188, 13]\n    },\n    {\n      \"name\": \"OracleInitEvent\",\n      \"discriminator\": [89, 193, 219, 200, 1, 83, 167, 24]\n    },\n    {\n      \"name\": \"OracleQuoteOverrideEvent\",\n      \"discriminator\": [78, 204, 191, 210, 164, 196, 244, 65]\n    },\n    {\n      \"name\": \"OracleQuoteRotateEvent\",\n      \"discriminator\": [26, 189, 196, 192, 225, 127, 26, 228]\n    },\n    {\n      \"name\": \"OracleQuoteVerifyRequestEvent\",\n      \"discriminator\": [203, 209, 79, 0, 20, 71, 226, 202]\n    },\n    {\n      \"name\": \"PermissionSetEvent\",\n      \"discriminator\": [148, 86, 123, 0, 102, 20, 119, 206]\n    },\n    {\n      \"name\": \"PullFeedErrorValueEvent\",\n      \"discriminator\": [225, 80, 192, 95, 14, 12, 83, 192]\n    },\n    {\n      \"name\": \"PullFeedValueEvents\",\n      \"discriminator\": [86, 7, 231, 28, 122, 161, 117, 69]\n    },\n    {\n      \"name\": \"QueueAddMrEnclaveEvent\",\n      \"discriminator\": [170, 186, 175, 38, 216, 51, 69, 175]\n    },\n    {\n      \"name\": \"QueueInitEvent\",\n      \"discriminator\": [44, 137, 99, 227, 107, 8, 30, 105]\n    },\n    {\n      \"name\": \"QueueRemoveMrEnclaveEvent\",\n      \"discriminator\": [4, 105, 196, 60, 84, 122, 203, 196]\n    },\n    {\n      \"name\": \"RandomnessCommitEvent\",\n      \"discriminator\": [88, 60, 172, 90, 112, 10, 206, 147]\n    }\n  ],\n  \"errors\": [\n    { \"code\": 6000, \"name\": \"GenericError\" },\n    { \"code\": 6001, \"name\": \"InvalidQuote\" },\n    { \"code\": 6002, \"name\": \"InsufficientQueue\" },\n    { \"code\": 6003, \"name\": \"QueueFull\" },\n    { \"code\": 6004, \"name\": \"InvalidEnclaveSigner\" },\n    { \"code\": 6005, \"name\": \"InvalidSigner\" },\n    { \"code\": 6006, \"name\": \"MrEnclaveAlreadyExists\" },\n    { \"code\": 6007, \"name\": \"MrEnclaveAtCapacity\" },\n    { \"code\": 6008, \"name\": \"MrEnclaveDoesntExist\" },\n    { \"code\": 6009, \"name\": \"PermissionDenied\" },\n    { \"code\": 6010, \"name\": \"InvalidQueue\" },\n    { \"code\": 6011, \"name\": \"IncorrectMrEnclave\" },\n    { \"code\": 6012, \"name\": \"InvalidAuthority\" },\n    { \"code\": 6013, \"name\": \"InvalidMrEnclave\" },\n    { \"code\": 6014, \"name\": \"InvalidTimestamp\" },\n    { \"code\": 6015, \"name\": \"InvalidOracleIdx\" },\n    { \"code\": 6016, \"name\": \"InvalidSecpSignature\" },\n    { \"code\": 6017, \"name\": \"InvalidGuardianQueue\" },\n    { \"code\": 6018, \"name\": \"InvalidIndex\" },\n    { \"code\": 6019, \"name\": \"InvalidOracleQueue\" },\n    { \"code\": 6020, \"name\": \"InvalidPermission\" },\n    { \"code\": 6021, \"name\": \"InvalidePermissionedAccount\" },\n    { \"code\": 6022, \"name\": \"InvalidEpochRotate\" },\n    { \"code\": 6023, \"name\": \"InvalidEpochFinalize\" },\n    { \"code\": 6024, \"name\": \"InvalidEscrow\" },\n    { \"code\": 6025, \"name\": \"IllegalOracle\" },\n    { \"code\": 6026, \"name\": \"IllegalExecuteAttempt\" },\n    { \"code\": 6027, \"name\": \"IllegalFeedValue\" },\n    { \"code\": 6028, \"name\": \"InvalidOracleFeedStats\" },\n    { \"code\": 6029, \"name\": \"InvalidStateAuthority\" },\n    { \"code\": 6030, \"name\": \"NotEnoughSamples\" },\n    { \"code\": 6031, \"name\": \"OracleIsVerified\" },\n    { \"code\": 6032, \"name\": \"QueueIsEmpty\" },\n    { \"code\": 6033, \"name\": \"SecpRecoverFailure\" },\n    { \"code\": 6034, \"name\": \"StaleSample\" },\n    { \"code\": 6035, \"name\": \"SwitchboardRandomnessTooOld\" },\n    { \"code\": 6036, \"name\": \"EpochIdMismatch\" },\n    { \"code\": 6037, \"name\": \"GuardianAlreadyVoted\" },\n    { \"code\": 6038, \"name\": \"RandomnessNotRequested\" },\n    { \"code\": 6039, \"name\": \"InvalidSlotNumber\" },\n    { \"code\": 6040, \"name\": \"RandomnessOracleKeyExpired\" },\n    { \"code\": 6041, \"name\": \"InvalidAdvisory\" },\n    { \"code\": 6042, \"name\": \"InvalidOracleStats\" },\n    { \"code\": 6043, \"name\": \"InvalidStakeProgram\" },\n    { \"code\": 6044, \"name\": \"InvalidStakePool\" },\n    { \"code\": 6045, \"name\": \"InvalidDelegationPool\" },\n    { \"code\": 6046, \"name\": \"UnparsableAccount\" },\n    { \"code\": 6047, \"name\": \"InvalidInstruction\" },\n    { \"code\": 6048, \"name\": \"OracleAlreadyVerified\" },\n    { \"code\": 6049, \"name\": \"GuardianNotVerified\" },\n    { \"code\": 6050, \"name\": \"InvalidConstraint\" },\n    { \"code\": 6051, \"name\": \"InvalidDelegationGroup\" },\n    { \"code\": 6052, \"name\": \"OracleKeyNotFound\" },\n    { \"code\": 6053, \"name\": \"GuardianReregisterAttempt\" },\n    { \"code\": 6054, \"name\": \"InvalidManySubmissionCount\" },\n    { \"code\": 6055, \"name\": \"MissingSecpIx\" },\n    { \"code\": 6056, \"name\": \"ChecksumMismatch\" },\n    { \"code\": 6057, \"name\": \"InvalidSubmissionFeedsCount\" },\n    { \"code\": 6058, \"name\": \"InvalidSecpSignatureOraclesCount\" },\n    { \"code\": 6059, \"name\": \"InvalidEthAddress\" },\n    { \"code\": 6060, \"name\": \"NoLutKeysAdded\" },\n    { \"code\": 6061, \"name\": \"InvalidVaultOperatorDelegation\" },\n    { \"code\": 6062, \"name\": \"InvalidVaultTokenAccount\" },\n    { \"code\": 6063, \"name\": \"InvalidRemainingAccounts\" },\n    { \"code\": 6064, \"name\": \"SubsidiesNotAllowed\" },\n    { \"code\": 6065, \"name\": \"MissingVod\" },\n    { \"code\": 6066, \"name\": \"InvalidVodEpoch\" },\n    { \"code\": 6067, \"name\": \"InvalidOracleSubsidyWallet\" },\n    { \"code\": 6068, \"name\": \"InvalidOperator\" },\n    { \"code\": 6069, \"name\": \"Max128SampleValue\" },\n    { \"code\": 6070, \"name\": \"RewardAlreadyPaid\" }\n  ],\n  \"types\": [\n    {\n      \"name\": \"CompactResult\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"std_dev\",\n            \"docs\": [\n              \"The standard deviation of the submissions needed for quorom size\"\n            ],\n            \"type\": \"f32\"\n          },\n          {\n            \"name\": \"mean\",\n            \"docs\": [\"The mean of the submissions needed for quorom size\"],\n            \"type\": \"f32\"\n          },\n          {\n            \"name\": \"slot\",\n            \"docs\": [\"The slot at which this value was signed.\"],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CostWhitelistEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"feeds\", \"type\": { \"vec\": \"pubkey\" } },\n          { \"name\": \"oracles\", \"type\": { \"vec\": \"pubkey\" } },\n          { \"name\": \"values\", \"type\": { \"vec\": { \"vec\": \"i128\" } } },\n          { \"name\": \"reward\", \"type\": \"u32\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"CurrentResult\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"value\",\n            \"docs\": [\n              \"The median value of the submissions needed for quorom size\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"std_dev\",\n            \"docs\": [\n              \"The standard deviation of the submissions needed for quorom size\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"mean\",\n            \"docs\": [\"The mean of the submissions needed for quorom size\"],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"range\",\n            \"docs\": [\"The range of the submissions needed for quorom size\"],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"min_value\",\n            \"docs\": [\n              \"The minimum value of the submissions needed for quorom size\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"max_value\",\n            \"docs\": [\n              \"The maximum value of the submissions needed for quorom size\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"num_samples\",\n            \"docs\": [\"The number of samples used to calculate this result\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"submission_idx\",\n            \"docs\": [\n              \"The index of the submission that was used to calculate this result\"\n            ],\n            \"type\": \"u8\"\n          },\n          { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 6] } },\n          {\n            \"name\": \"slot\",\n            \"docs\": [\"The slot at which this value was signed.\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_slot\",\n            \"docs\": [\n              \"The slot at which the first considered submission was made\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_slot\",\n            \"docs\": [\n              \"The slot at which the last considered submission was made\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"GarbageCollectionEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"GuardianQuoteVerifyEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"quote\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"GuardianQuoteVerifyParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"timestamp\", \"type\": \"i64\" },\n          { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"_reserved1\", \"type\": \"u32\" },\n          { \"name\": \"ed25519_key\", \"type\": \"pubkey\" },\n          { \"name\": \"secp256k1_key\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"recovery_id\", \"type\": \"u8\" },\n          { \"name\": \"advisories\", \"type\": { \"vec\": \"u32\" } }\n        ]\n      }\n    },\n    {\n      \"name\": \"GuardianRegisterParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"GuardianUnregisterParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"MegaSlotInfo\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"reserved1\", \"type\": \"u64\" },\n          { \"name\": \"slot_end\", \"type\": \"u64\" },\n          { \"name\": \"perf_goal\", \"type\": \"i64\" },\n          { \"name\": \"current_signature_count\", \"type\": \"i64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"MultiSubmission\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } },\n          { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"recovery_id\", \"type\": \"u8\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleAccountData\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"enclave\",\n            \"docs\": [\"Represents the state of the quote verifiers enclave.\"],\n            \"type\": { \"defined\": { \"name\": \"Quote\" } }\n          },\n          {\n            \"name\": \"authority\",\n            \"docs\": [\n              \"The authority of the EnclaveAccount which is permitted to make account changes.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"queue\",\n            \"docs\": [\n              \"Queue used for attestation to verify a MRENCLAVE measurement.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"created_at\",\n            \"docs\": [\"The unix timestamp when the quote was created.\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_heartbeat\",\n            \"docs\": [\"The last time the quote heartbeated on-chain.\"],\n            \"type\": \"i64\"\n          },\n          { \"name\": \"secp_authority\", \"type\": { \"array\": [\"u8\", 64] } },\n          {\n            \"name\": \"gateway_uri\",\n            \"docs\": [\"URI location of the verifier's gateway.\"],\n            \"type\": { \"array\": [\"u8\", 64] }\n          },\n          { \"name\": \"permissions\", \"type\": \"u64\" },\n          {\n            \"name\": \"is_on_queue\",\n            \"docs\": [\n              \"Whether the quote is located on the AttestationQueues buffer.\"\n            ],\n            \"type\": \"u8\"\n          },\n          { \"name\": \"_padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n          { \"name\": \"lut_slot\", \"type\": \"u64\" },\n          { \"name\": \"last_reward_epoch\", \"type\": \"u64\" },\n          { \"name\": \"operator\", \"type\": \"pubkey\" },\n          { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 16] } },\n          { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 1024] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleEpochInfo\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"id\", \"type\": \"u64\" },\n          { \"name\": \"reserved1\", \"type\": \"u64\" },\n          { \"name\": \"_reserved\", \"type\": \"u64\" },\n          { \"name\": \"slash_score\", \"type\": \"u64\" },\n          { \"name\": \"reward_score\", \"type\": \"u64\" },\n          { \"name\": \"stake_score\", \"type\": \"u64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleHeartbeatEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleHeartbeatParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"gateway_uri\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleHeartbeatV2Params\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"gateway_uri\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleInitEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"oracle\", \"type\": \"pubkey\" }]\n      }\n    },\n    {\n      \"name\": \"OracleInitParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"recent_slot\", \"type\": \"u64\" },\n          { \"name\": \"authority\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          {\n            \"name\": \"secp_authority\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleInitSVMParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"recent_slot\", \"type\": \"u64\" },\n          { \"name\": \"authority\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          {\n            \"name\": \"secp_authority\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n          },\n          { \"name\": \"source_oracle_key\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleQuoteOverrideEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleQuoteRotateEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"oracle\", \"type\": \"pubkey\" }]\n      }\n    },\n    {\n      \"name\": \"OracleQuoteVerifyRequestEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"quote\", \"type\": \"pubkey\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleResetLutParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"recent_slot\", \"type\": \"u64\" }]\n      }\n    },\n    {\n      \"name\": \"OracleSetConfigsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"new_authority\", \"type\": { \"option\": \"pubkey\" } },\n          {\n            \"name\": \"new_secp_authority\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 64] } }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleSetOperatorParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"OracleStatsAccountData\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"owner\", \"type\": \"pubkey\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          {\n            \"name\": \"finalized_epoch\",\n            \"docs\": [\n              \"The last epoch that has completed. cleared after registered with the\",\n              \"staking program.\"\n            ],\n            \"type\": { \"defined\": { \"name\": \"OracleEpochInfo\" } }\n          },\n          {\n            \"name\": \"current_epoch\",\n            \"docs\": [\n              \"The current epoch info being used by the oracle. for stake. Will moved\",\n              \"to finalized_epoch as soon as the epoch is over.\"\n            ],\n            \"type\": { \"defined\": { \"name\": \"OracleEpochInfo\" } }\n          },\n          {\n            \"name\": \"mega_slot_info\",\n            \"type\": { \"defined\": { \"name\": \"MegaSlotInfo\" } }\n          },\n          { \"name\": \"last_transfer_slot\", \"type\": \"u64\" },\n          { \"name\": \"bump\", \"type\": \"u8\" },\n          { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n          {\n            \"name\": \"_ebuf\",\n            \"docs\": [\"Reserved.\"],\n            \"type\": { \"array\": [\"u8\", 1024] }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleSubmission\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"docs\": [\"The public key of the oracle that submitted this value.\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"slot\",\n            \"docs\": [\"The slot at which this value was signed.\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"landed_at\",\n            \"docs\": [\"The slot at which this value was landed on chain.\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"value\",\n            \"docs\": [\"The value that was submitted.\"],\n            \"type\": \"i128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleSyncLutParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"PermissionSetEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"permission\", \"type\": \"pubkey\" }]\n      }\n    },\n    {\n      \"name\": \"PermissionSetParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"permission\", \"type\": \"u8\" },\n          { \"name\": \"enable\", \"type\": \"bool\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedAccountData\",\n      \"docs\": [\"A representation of the data in a pull feed account.\"],\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"submissions\",\n            \"docs\": [\"The oracle submissions for this feed.\"],\n            \"type\": {\n              \"array\": [{ \"defined\": { \"name\": \"OracleSubmission\" } }, 32]\n            }\n          },\n          {\n            \"name\": \"authority\",\n            \"docs\": [\n              \"The public key of the authority that can update the feed hash that\",\n              \"this account will use for registering updates.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"queue\",\n            \"docs\": [\n              \"The public key of the queue which oracles must be bound to in order to\",\n              \"submit data to this feed.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"feed_hash\",\n            \"docs\": [\n              \"SHA-256 hash of the job schema oracles will execute to produce data\",\n              \"for this feed.\"\n            ],\n            \"type\": { \"array\": [\"u8\", 32] }\n          },\n          {\n            \"name\": \"initialized_at\",\n            \"docs\": [\"The slot at which this account was initialized.\"],\n            \"type\": \"i64\"\n          },\n          { \"name\": \"permissions\", \"type\": \"u64\" },\n          { \"name\": \"max_variance\", \"type\": \"u64\" },\n          { \"name\": \"min_responses\", \"type\": \"u32\" },\n          { \"name\": \"name\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 1] } },\n          { \"name\": \"permit_write_by_authority\", \"type\": \"u8\" },\n          { \"name\": \"historical_result_idx\", \"type\": \"u8\" },\n          { \"name\": \"min_sample_size\", \"type\": \"u8\" },\n          { \"name\": \"last_update_timestamp\", \"type\": \"i64\" },\n          { \"name\": \"lut_slot\", \"type\": \"u64\" },\n          { \"name\": \"_reserved1\", \"type\": { \"array\": [\"u8\", 32] } },\n          {\n            \"name\": \"result\",\n            \"type\": { \"defined\": { \"name\": \"CurrentResult\" } }\n          },\n          { \"name\": \"max_staleness\", \"type\": \"u32\" },\n          { \"name\": \"padding2\", \"type\": { \"array\": [\"u8\", 12] } },\n          {\n            \"name\": \"historical_results\",\n            \"type\": {\n              \"array\": [{ \"defined\": { \"name\": \"CompactResult\" } }, 32]\n            }\n          },\n          { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 8] } },\n          { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 24] } },\n          { \"name\": \"submission_timestamps\", \"type\": { \"array\": [\"i64\", 32] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedCloseParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"PullFeedErrorValueEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"feed\", \"type\": \"pubkey\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedInitParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"feed_hash\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"max_variance\", \"type\": \"u64\" },\n          { \"name\": \"min_responses\", \"type\": \"u32\" },\n          { \"name\": \"name\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"recent_slot\", \"type\": \"u64\" },\n          { \"name\": \"ipfs_hash\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"min_sample_size\", \"type\": \"u8\" },\n          { \"name\": \"max_staleness\", \"type\": \"u32\" },\n          { \"name\": \"permit_write_by_authority\", \"type\": { \"option\": \"bool\" } }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSetConfigsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"feed_hash\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 32] } }\n          },\n          { \"name\": \"authority\", \"type\": { \"option\": \"pubkey\" } },\n          { \"name\": \"max_variance\", \"type\": { \"option\": \"u64\" } },\n          { \"name\": \"min_responses\", \"type\": { \"option\": \"u32\" } },\n          { \"name\": \"name\", \"type\": { \"option\": { \"array\": [\"u8\", 32] } } },\n          {\n            \"name\": \"ipfs_hash\",\n            \"type\": { \"option\": { \"array\": [\"u8\", 32] } }\n          },\n          { \"name\": \"min_sample_size\", \"type\": { \"option\": \"u8\" } },\n          { \"name\": \"max_staleness\", \"type\": { \"option\": \"u32\" } },\n          { \"name\": \"permit_write_by_authority\", \"type\": { \"option\": \"bool\" } }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSubmitResponseConsensusLightParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSubmitResponseConsensusParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          { \"name\": \"values\", \"type\": { \"vec\": \"i128\" } }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSubmitResponseManyParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          {\n            \"name\": \"submissions\",\n            \"type\": { \"vec\": { \"defined\": { \"name\": \"MultiSubmission\" } } }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSubmitResponseParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          {\n            \"name\": \"submissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_action::Submission\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedSubmitResponseSVMParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          {\n            \"name\": \"submissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_svm_action::Submission\"\n                }\n              }\n            }\n          },\n          { \"name\": \"source_queue_key\", \"type\": \"pubkey\" },\n          { \"name\": \"queue_bump\", \"type\": \"u8\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"PullFeedValueEvents\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"feeds\", \"type\": { \"vec\": \"pubkey\" } },\n          { \"name\": \"oracles\", \"type\": { \"vec\": \"pubkey\" } },\n          { \"name\": \"values\", \"type\": { \"vec\": { \"vec\": \"i128\" } } },\n          { \"name\": \"reward\", \"type\": \"u32\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueAccountData\",\n      \"docs\": [\n        \"An Queue represents a round-robin queue of oracle oracles who attest on-chain\",\n        \"whether a Switchboard Function was executed within an enclave against an expected set of\",\n        \"enclave measurements.\",\n        \"\",\n        \"For an oracle to join the queue, the oracle must first submit their enclave quote on-chain and\",\n        \"wait for an existing oracle to attest their quote. If the oracle's quote matches an expected\",\n        \"measurement within the queues mr_enclaves config, it is granted permissions and will start\",\n        \"being assigned update requests.\"\n      ],\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"docs\": [\n              \"The address of the authority which is permitted to add/remove allowed enclave measurements.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mr_enclaves\",\n            \"docs\": [\"Allowed enclave measurements.\"],\n            \"type\": { \"array\": [{ \"array\": [\"u8\", 32] }, 32] }\n          },\n          {\n            \"name\": \"oracle_keys\",\n            \"docs\": [\n              \"The addresses of the quote oracles who have a valid\",\n              \"verification status and have heartbeated on-chain recently.\"\n            ],\n            \"type\": { \"array\": [\"pubkey\", 128] }\n          },\n          {\n            \"name\": \"max_quote_verification_age\",\n            \"docs\": [\n              \"The maximum allowable time until a EnclaveAccount needs to be re-verified on-chain.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_heartbeat\",\n            \"docs\": [\n              \"The unix timestamp when the last quote oracle heartbeated on-chain.\"\n            ],\n            \"type\": \"i64\"\n          },\n          { \"name\": \"node_timeout\", \"type\": \"i64\" },\n          {\n            \"name\": \"oracle_min_stake\",\n            \"docs\": [\n              \"The minimum number of lamports a quote oracle needs to lock-up in order to heartbeat and verify other quotes.\"\n            ],\n            \"type\": \"u64\"\n          },\n          { \"name\": \"allow_authority_override_after\", \"type\": \"i64\" },\n          {\n            \"name\": \"mr_enclaves_len\",\n            \"docs\": [\"The number of allowed enclave measurements.\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"oracle_keys_len\",\n            \"docs\": [\n              \"The length of valid quote oracles for the given attestation queue.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"reward\",\n            \"docs\": [\n              \"The reward paid to quote oracles for attesting on-chain.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"curr_idx\",\n            \"docs\": [\n              \"Incrementer used to track the current quote oracle permitted to run any available functions.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"gc_idx\",\n            \"docs\": [\n              \"Incrementer used to garbage collect and remove stale quote oracles.\"\n            ],\n            \"type\": \"u32\"\n          },\n          { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"u8\" },\n          { \"name\": \"require_authority_verify_permission\", \"type\": \"u8\" },\n          { \"name\": \"require_usage_permissions\", \"type\": \"u8\" },\n          { \"name\": \"signer_bump\", \"type\": \"u8\" },\n          { \"name\": \"mint\", \"type\": \"pubkey\" },\n          { \"name\": \"lut_slot\", \"type\": \"u64\" },\n          { \"name\": \"allow_subsidies\", \"type\": \"u8\" },\n          { \"name\": \"_ebuf6\", \"type\": { \"array\": [\"u8\", 15] } },\n          { \"name\": \"ncn\", \"type\": \"pubkey\" },\n          { \"name\": \"_resrved\", \"type\": \"u64\" },\n          {\n            \"name\": \"vaults\",\n            \"type\": { \"array\": [{ \"defined\": { \"name\": \"VaultInfo\" } }, 4] }\n          },\n          { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 256] } },\n          { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 512] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueAddMrEnclaveEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueAddMrEnclaveParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }]\n      }\n    },\n    {\n      \"name\": \"QueueAllowSubsidiesParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"allow_subsidies\", \"type\": \"u8\" }]\n      }\n    },\n    {\n      \"name\": \"QueueGarbageCollectParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [{ \"name\": \"idx\", \"type\": \"u32\" }] }\n    },\n    {\n      \"name\": \"QueueInitEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"queue\", \"type\": \"pubkey\" }]\n      }\n    },\n    {\n      \"name\": \"QueueInitParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"allow_authority_override_after\", \"type\": \"u32\" },\n          { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"bool\" },\n          { \"name\": \"require_usage_permissions\", \"type\": \"bool\" },\n          { \"name\": \"max_quote_verification_age\", \"type\": \"u32\" },\n          { \"name\": \"reward\", \"type\": \"u32\" },\n          { \"name\": \"node_timeout\", \"type\": \"u32\" },\n          { \"name\": \"recent_slot\", \"type\": \"u64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueInitSVMParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"allow_authority_override_after\", \"type\": \"u32\" },\n          { \"name\": \"require_authority_heartbeat_permission\", \"type\": \"bool\" },\n          { \"name\": \"require_usage_permissions\", \"type\": \"bool\" },\n          { \"name\": \"max_quote_verification_age\", \"type\": \"u32\" },\n          { \"name\": \"reward\", \"type\": \"u32\" },\n          { \"name\": \"node_timeout\", \"type\": \"u32\" },\n          { \"name\": \"recent_slot\", \"type\": \"u64\" },\n          { \"name\": \"source_queue_key\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueOverrideSVMParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"secp256k1_signer\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"max_quote_verification_age\", \"type\": \"i64\" },\n          { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"slot\", \"type\": \"u64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueuePaySubsidyParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"QueueRemoveMrEnclaveEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          { \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"QueueRemoveMrEnclaveParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"mr_enclave\", \"type\": { \"array\": [\"u8\", 32] } }]\n      }\n    },\n    {\n      \"name\": \"QueueResetVaultParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"QueueSetConfigsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"authority\", \"type\": { \"option\": \"pubkey\" } },\n          { \"name\": \"reward\", \"type\": { \"option\": \"u32\" } },\n          { \"name\": \"node_timeout\", \"type\": { \"option\": \"i64\" } }\n        ]\n      }\n    },\n    { \"name\": \"QueueSetNcnParams\", \"type\": { \"kind\": \"struct\", \"fields\": [] } },\n    {\n      \"name\": \"QueueSetVaultParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"enable\", \"type\": \"bool\" }]\n      }\n    },\n    {\n      \"name\": \"Quote\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"enclave_signer\",\n            \"docs\": [\"The address of the signer generated within an enclave.\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mr_enclave\",\n            \"docs\": [\n              \"The quotes MRENCLAVE measurement dictating the contents of the secure enclave.\"\n            ],\n            \"type\": { \"array\": [\"u8\", 32] }\n          },\n          {\n            \"name\": \"verification_status\",\n            \"docs\": [\"The VerificationStatus of the quote.\"],\n            \"type\": \"u8\"\n          },\n          { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 7] } },\n          {\n            \"name\": \"verification_timestamp\",\n            \"docs\": [\"The unix timestamp when the quote was last verified.\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"valid_until\",\n            \"docs\": [\n              \"The unix timestamp when the quotes verification status expires.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_registry\",\n            \"docs\": [\n              \"The off-chain registry where the verifiers quote can be located.\"\n            ],\n            \"type\": { \"array\": [\"u8\", 32] }\n          },\n          {\n            \"name\": \"registry_key\",\n            \"docs\": [\n              \"Key to lookup the buffer data on IPFS or an alternative decentralized storage solution.\"\n            ],\n            \"type\": { \"array\": [\"u8\", 64] }\n          },\n          {\n            \"name\": \"secp256k1_signer\",\n            \"docs\": [\n              \"The secp256k1 public key of the enclave signer. Derived from the enclave_signer.\"\n            ],\n            \"type\": { \"array\": [\"u8\", 64] }\n          },\n          { \"name\": \"last_ed25519_signer\", \"type\": \"pubkey\" },\n          { \"name\": \"last_secp256k1_signer\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"last_rotate_slot\", \"type\": \"u64\" },\n          { \"name\": \"guardian_approvers\", \"type\": { \"array\": [\"pubkey\", 64] } },\n          { \"name\": \"guardian_approvers_len\", \"type\": \"u8\" },\n          { \"name\": \"padding2\", \"type\": { \"array\": [\"u8\", 7] } },\n          { \"name\": \"staging_ed25519_signer\", \"type\": \"pubkey\" },\n          {\n            \"name\": \"staging_secp256k1_signer\",\n            \"type\": { \"array\": [\"u8\", 64] }\n          },\n          { \"name\": \"eth_signer\", \"type\": { \"array\": [\"u8\", 20] } },\n          {\n            \"name\": \"_ebuf4\",\n            \"docs\": [\"Reserved.\"],\n            \"type\": { \"array\": [\"u8\", 12] }\n          },\n          { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 128] } },\n          { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 256] } },\n          { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 512] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"RandomnessAccountData\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"authority\", \"type\": \"pubkey\" },\n          { \"name\": \"queue\", \"type\": \"pubkey\" },\n          { \"name\": \"seed_slothash\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"seed_slot\", \"type\": \"u64\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          { \"name\": \"reveal_slot\", \"type\": \"u64\" },\n          { \"name\": \"value\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"lut_slot\", \"type\": \"u64\" },\n          { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 24] } },\n          { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"_ebuf1\", \"type\": { \"array\": [\"u8\", 128] } },\n          {\n            \"name\": \"active_secp256k1_signer\",\n            \"type\": { \"array\": [\"u8\", 64] }\n          },\n          { \"name\": \"active_secp256k1_expiration\", \"type\": \"i64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"RandomnessCommitEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"randomness_account\", \"type\": \"pubkey\" },\n          { \"name\": \"oracle\", \"type\": \"pubkey\" },\n          { \"name\": \"slot\", \"type\": \"u64\" },\n          { \"name\": \"slothash\", \"type\": { \"array\": [\"u8\", 32] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"RandomnessCommitParams\",\n      \"type\": { \"kind\": \"struct\", \"fields\": [] }\n    },\n    {\n      \"name\": \"RandomnessInitParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"recent_slot\", \"type\": \"u64\" }]\n      }\n    },\n    {\n      \"name\": \"RandomnessRevealParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"recovery_id\", \"type\": \"u8\" },\n          { \"name\": \"value\", \"type\": { \"array\": [\"u8\", 32] } }\n        ]\n      }\n    },\n    {\n      \"name\": \"State\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"bump\", \"type\": \"u8\" },\n          { \"name\": \"test_only_disable_mr_enclave_check\", \"type\": \"u8\" },\n          { \"name\": \"enable_staking\", \"type\": \"u8\" },\n          { \"name\": \"padding1\", \"type\": { \"array\": [\"u8\", 5] } },\n          { \"name\": \"authority\", \"type\": \"pubkey\" },\n          { \"name\": \"guardian_queue\", \"type\": \"pubkey\" },\n          { \"name\": \"reserved1\", \"type\": \"u64\" },\n          { \"name\": \"epoch_length\", \"type\": \"u64\" },\n          { \"name\": \"reserved2\", \"type\": { \"array\": [\"u8\", 136] } },\n          { \"name\": \"switch_mint\", \"type\": \"pubkey\" },\n          { \"name\": \"sgx_advisories\", \"type\": { \"array\": [\"u16\", 32] } },\n          { \"name\": \"advisories_len\", \"type\": \"u8\" },\n          { \"name\": \"padding2\", \"type\": \"u8\" },\n          { \"name\": \"flat_reward_cut_percentage\", \"type\": \"u8\" },\n          { \"name\": \"enable_slashing\", \"type\": \"u8\" },\n          { \"name\": \"padding3\", \"type\": \"u32\" },\n          { \"name\": \"lut_slot\", \"type\": \"u64\" },\n          { \"name\": \"base_reward\", \"type\": \"u32\" },\n          { \"name\": \"padding4\", \"type\": { \"array\": [\"u8\", 4] } },\n          { \"name\": \"subsidy_amount\", \"type\": \"u64\" },\n          { \"name\": \"_ebuf6\", \"type\": { \"array\": [\"u8\", 16] } },\n          { \"name\": \"_ebuf5\", \"type\": { \"array\": [\"u8\", 32] } },\n          { \"name\": \"_ebuf4\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"_ebuf3\", \"type\": { \"array\": [\"u8\", 128] } },\n          { \"name\": \"_ebuf2\", \"type\": { \"array\": [\"u8\", 512] } },\n          {\n            \"name\": \"cost_whitelist\",\n            \"docs\": [\"Cost whitelist by authority\"],\n            \"type\": { \"array\": [\"pubkey\", 32] }\n          }\n        ]\n      }\n    },\n    { \"name\": \"StateInitParams\", \"type\": { \"kind\": \"struct\", \"fields\": [] } },\n    {\n      \"name\": \"StateSetConfigsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"new_authority\", \"type\": \"pubkey\" },\n          { \"name\": \"test_only_disable_mr_enclave_check\", \"type\": \"u8\" },\n          { \"name\": \"add_advisory\", \"type\": \"u16\" },\n          { \"name\": \"rm_advisory\", \"type\": \"u16\" },\n          { \"name\": \"switch_mint\", \"type\": \"pubkey\" },\n          { \"name\": \"subsidy_amount\", \"type\": \"u64\" },\n          { \"name\": \"base_reward\", \"type\": \"u32\" },\n          { \"name\": \"add_cost_wl\", \"type\": \"pubkey\" },\n          { \"name\": \"rm_cost_wl\", \"type\": \"pubkey\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"TestUpdateOracleStatsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [{ \"name\": \"new_reward_score\", \"type\": \"u64\" }]\n      }\n    },\n    {\n      \"name\": \"VaultInfo\",\n      \"serialization\": \"bytemuck\",\n      \"repr\": { \"kind\": \"c\" },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"vault_key\", \"type\": \"pubkey\" },\n          { \"name\": \"last_reward_epoch\", \"type\": \"u64\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_action::Submission\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"value\", \"type\": \"i128\" },\n          { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"recovery_id\", \"type\": \"u8\" },\n          { \"name\": \"offset\", \"type\": \"u8\" }\n        ]\n      }\n    },\n    {\n      \"name\": \"sb_on_demand::actions::pull_feed::pull_feed_submit_response_svm_action::Submission\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          { \"name\": \"value\", \"type\": \"i128\" },\n          { \"name\": \"signature\", \"type\": { \"array\": [\"u8\", 64] } },\n          { \"name\": \"recovery_id\", \"type\": \"u8\" }\n        ]\n      }\n    }\n  ]\n}\n","import { BorshCoder, Idl, Program, Provider } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport SWB_ONDEMAND_IDL from \"./idl.json\";\n\nexport const SWITCHBOARD_ONDEMANDE_PRICE_PRECISION = 18;\n\nexport interface CurrentResult {\n  value: BN;\n  std_dev: BN;\n  mean: BN;\n  range: BN;\n  min_value: BN;\n  max_vaalue: BN;\n  slot: BN;\n  min_slot: BN;\n  max_slot: BN;\n}\n\nexport interface OracleSubmission {\n  oracle: PublicKey;\n  slot: BN;\n  value: BN;\n}\n\nexport interface PullFeedAccountData {\n  submissions: OracleSubmission[];\n  authority: PublicKey;\n  queue: PublicKey;\n  feed_hash: Buffer;\n  initialized_at: BN;\n  permissions: BN;\n  max_variance: BN;\n  min_responses: number;\n  name: Buffer;\n  sample_size: number;\n  last_update_timestamp: BN;\n  lut_slot: BN;\n  result: CurrentResult;\n  max_staleness: number;\n  min_sample_size: number;\n}\n\nexport type CrossbarSimulatePayload = FeedResponse[];\n\nexport interface FeedResponse {\n  feedHash: string;\n  results: number[];\n}\n\nexport const switchboardAccountCoder = new BorshCoder(SWB_ONDEMAND_IDL as unknown as Idl);\nexport function getSwitchboardProgram(provider: Provider): Program {\n  return new Program(SWB_ONDEMAND_IDL as unknown as Idl, provider);\n}\n\nexport function decodeSwitchboardPullFeedData(data: Buffer): PullFeedAccountData {\n  const pullFeedDAta = switchboardAccountCoder.accounts.decode(\"PullFeedAccountData\", data);\n  return pullFeedDAta;\n}\n","import BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport { OraclePrice, SwbOracleAiDataByKey } from \"../types\";\n\nimport { capConfidenceInterval } from \"./compute.utils\";\n\nimport { MAX_CONFIDENCE_INTERVAL_RATIO, SWB_PRICE_CONF_INTERVALS } from \"~/constants\";\nimport { BankType } from \"~/services/bank\";\nimport { FeedResponse, SWITCHBOARD_ONDEMANDE_PRICE_PRECISION } from \"~/vendor/switchboard_pull\";\n\n/**\n * Maps Switchboard banks to their corresponding oracle prices using feed data and crossbar responses\n * @param banks - Array of bank objects\n * @param swbOracleAiDataByKey - Oracle account information indexed by oracle key\n * @param crossbarResponse - Crossbar feed response data indexed by feed ID\n * @returns Map of bank addresses to their corresponding oracle prices\n */\nexport const mapSwbBanksToOraclePrices = (\n  banks: BankType[],\n  swbOracleAiDataByKey: SwbOracleAiDataByKey,\n  crossbarResponse: Record<string, FeedResponse | undefined>\n): Map<string, OraclePrice> => {\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n  banks.forEach((bank) => {\n    const oracleKey = bank.config.oracleKeys[0].toBase58();\n    const oracleData = swbOracleAiDataByKey[oracleKey];\n    const oracleFeed = oracleData?.feedHash;\n    if (oracleFeed && oracleData && crossbarResponse) {\n      const crossbarData = crossbarResponse[oracleFeed]?.results;\n      const timestamp = new Date().getTime().toString();\n\n      const oraclePrice = parseSwbOraclePriceData(\n        crossbarData ?? new BN(oracleData.rawPrice),\n        new BN(oracleData.stdev),\n        timestamp,\n        oracleData\n      );\n      if (oraclePrice) {\n        bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n      }\n    } else {\n      console.warn(\n        `No oracle feed found for bank ${bank.address.toBase58()} oracleKey ${oracleKey}`\n      );\n    }\n  });\n\n  return bankOraclePriceMap;\n};\n\n/**\n * Maps broken Switchboard feeds to oracle prices using fallback price data\n * @param banks - Array of bank objects\n * @param swbOracleAiDataByKey - Oracle account information indexed by oracle key\n * @param fallbackPricesByFeedId - Fallback price data indexed by feed ID\n * @returns Map of bank addresses to their corresponding oracle prices from the price fallback\n */\nexport const mapBrokenFeedsToOraclePrices = (\n  banks: BankType[],\n  swbOracleAiDataByKey: SwbOracleAiDataByKey,\n  fallbackPricesByFeedId: Record<string, number>\n): Map<string, OraclePrice> => {\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n  banks.forEach((bank) => {\n    const oracleKey = bank.config.oracleKeys[0].toBase58();\n    const oracleData = swbOracleAiDataByKey[oracleKey];\n    const oracleFeed = oracleData?.feedHash;\n    const fallbackPrice = oracleFeed ? fallbackPricesByFeedId[oracleFeed] : undefined;\n    if (oracleFeed && oracleData && fallbackPrice) {\n      const timestamp = new Date().getTime().toString();\n\n      const oraclePrice = parseSwbOraclePriceData(\n        [fallbackPrice],\n        new BN(oracleData.stdev),\n        timestamp,\n        oracleData\n      );\n      if (oraclePrice) {\n        bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n      }\n    } else {\n      // Bank not found in price fallback, skipping\n    }\n  });\n\n  return bankOraclePriceMap;\n};\n\nexport function parseSwbOraclePriceData(\n  price: number[] | BN,\n  stdDev: BN,\n  timestamp: string,\n  oracleData: {\n    queue: string;\n    feedHash: string;\n    maxVariance: string;\n    minResponses: number;\n    rawPrice: string;\n    stdev: string;\n  }\n): OraclePrice {\n  const swbPrice = Array.isArray(price)\n    ? new BigNumber(median(price))\n    : new BigNumber(price.toString()).div(10 ** SWITCHBOARD_ONDEMANDE_PRICE_PRECISION);\n  const swbConfidence = new BigNumber(stdDev.toString()).times(SWB_PRICE_CONF_INTERVALS);\n  const swbConfidenceCapped = capConfidenceInterval(\n    swbPrice,\n    swbConfidence,\n    MAX_CONFIDENCE_INTERVAL_RATIO\n  );\n  const swbLowestPrice = swbPrice.minus(swbConfidenceCapped);\n  const swbHighestPrice = swbPrice.plus(swbConfidenceCapped);\n\n  return {\n    priceRealtime: {\n      price: swbPrice,\n      confidence: swbConfidenceCapped,\n      lowestPrice: swbLowestPrice,\n      highestPrice: swbHighestPrice,\n    },\n    priceWeighted: {\n      price: swbPrice,\n      confidence: swbConfidenceCapped,\n      lowestPrice: swbLowestPrice,\n      highestPrice: swbHighestPrice,\n    },\n    timestamp: new BigNumber(timestamp),\n    switchboardData: oracleData,\n  };\n}\n\nfunction median(values: number[]): number {\n  if (values.length === 0) {\n    throw new Error(\"Input array is empty\");\n  }\n\n  // Sorting values, preventing original array\n  // from being mutated.\n  values = [...values].sort((a, b) => a - b);\n\n  const half = Math.floor(values.length / 2);\n\n  return values.length % 2 ? values[half] : (values[half - 1] + values[half]) / 2;\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { OraclePrice, PriceWithConfidence, PriceBias } from \"../types\";\n\nimport { getOracleSourceFromOracleSetup } from \"./detection.utils\";\nimport { parseRpcPythPriceData } from \"./pyth-data.utils\";\nimport { parseSwbOraclePriceData } from \"./swb-data.utils\";\n\nimport { OracleSetup } from \"~/services/bank/types\";\nimport { decodeSwitchboardPullFeedData } from \"~/vendor/switchboard_pull\";\n\nexport function getPriceWithConfidence(\n  oraclePrice: OraclePrice,\n  weighted: boolean\n): PriceWithConfidence {\n  return weighted ? oraclePrice.priceWeighted : oraclePrice.priceRealtime;\n}\n\nexport function getPrice(\n  oraclePrice: OraclePrice,\n  priceBias: PriceBias = PriceBias.None,\n  weightedPrice: boolean = false\n): BigNumber {\n  const price = getPriceWithConfidence(oraclePrice, weightedPrice);\n  switch (priceBias) {\n    case PriceBias.Lowest:\n      return price.lowestPrice;\n    case PriceBias.Highest:\n      return price.highestPrice;\n    case PriceBias.None:\n      return price.price;\n  }\n}\n\nexport function capConfidenceInterval(\n  price: BigNumber,\n  confidence: BigNumber,\n  maxConfidence: BigNumber\n): BigNumber {\n  const maxConfidenceInterval = price.times(maxConfidence);\n\n  return BigNumber.min(confidence, maxConfidenceInterval);\n}\n\nfunction parseOraclePriceData(oracleSetup: OracleSetup, rawData: Buffer): OraclePrice {\n  const oracleSourceKey = getOracleSourceFromOracleSetup(oracleSetup).key;\n  switch (oracleSourceKey) {\n    case \"pyth\": {\n      return parseRpcPythPriceData(rawData);\n    }\n\n    // deprecated\n    case \"unknown\": {\n      return {\n        priceRealtime: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        priceWeighted: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        timestamp: new BigNumber(0),\n      };\n    }\n    case \"switchboard\": {\n      const pullFeedDAta = decodeSwitchboardPullFeedData(rawData);\n\n      return parseSwbOraclePriceData(\n        pullFeedDAta.result.value,\n        pullFeedDAta.result.std_dev,\n        pullFeedDAta.last_update_timestamp.toString(),\n        {\n          queue: pullFeedDAta.queue.toBase58(),\n          feedHash: Buffer.from(pullFeedDAta.feed_hash).toString(\"hex\"),\n          maxVariance: pullFeedDAta.max_variance.toString(),\n          minResponses: pullFeedDAta.min_responses,\n          rawPrice: pullFeedDAta.result.value.toString(),\n          stdev: pullFeedDAta.result.std_dev.toString(),\n        }\n      );\n    }\n    default:\n      console.error(\"Invalid oracle setup\", oracleSetup);\n      throw new Error(`Invalid oracle setup \"${oracleSetup}\"`);\n  }\n}\n\nexport { parseOraclePriceData as parsePriceInfo };\n","import { OraclePriceDto, OraclePrice } from \"../types\";\n\nexport function oraclePriceToDto(oraclePrice: OraclePrice): OraclePriceDto {\n  return {\n    priceRealtime: {\n      price: oraclePrice.priceRealtime.price.toString(),\n      confidence: oraclePrice.priceRealtime.confidence.toString(),\n      lowestPrice: oraclePrice.priceRealtime.lowestPrice.toString(),\n      highestPrice: oraclePrice.priceRealtime.highestPrice.toString(),\n    },\n    priceWeighted: {\n      price: oraclePrice.priceWeighted.price.toString(),\n      confidence: oraclePrice.priceWeighted.confidence.toString(),\n      lowestPrice: oraclePrice.priceWeighted.lowestPrice.toString(),\n      highestPrice: oraclePrice.priceWeighted.highestPrice.toString(),\n    },\n    timestamp: oraclePrice.timestamp.toString(),\n    switchboardData: oraclePrice.switchboardData,\n  };\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { OraclePriceDto, OraclePrice } from \"../types\";\n\nexport function dtoToOraclePrice(dto: OraclePriceDto): OraclePrice {\n  return {\n    priceRealtime: {\n      price: new BigNumber(dto.priceRealtime.price),\n      confidence: new BigNumber(dto.priceRealtime.confidence),\n      lowestPrice: new BigNumber(dto.priceRealtime.lowestPrice),\n      highestPrice: new BigNumber(dto.priceRealtime.highestPrice),\n    },\n    priceWeighted: {\n      price: new BigNumber(dto.priceWeighted.price),\n      confidence: new BigNumber(dto.priceWeighted.confidence),\n      lowestPrice: new BigNumber(dto.priceWeighted.lowestPrice),\n      highestPrice: new BigNumber(dto.priceWeighted.highestPrice),\n    },\n    timestamp: new BigNumber(dto.timestamp),\n    switchboardData: dto.switchboardData,\n  };\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { OraclePrice } from \"../types\";\n\nimport { BankType } from \"~/services/bank\";\nimport { decodeSwitchboardPullFeedData } from \"~/vendor/switchboard_pull\";\n\n/**\n * Result of checking if an oracle can be cranked\n */\nexport interface CrankabilityResult {\n  oracle: PublicKey;\n  crankable: boolean;\n  reason?: string;\n  error?: unknown;\n}\n\n/**\n * Payload structure from Crossbar simulate endpoint\n */\ninterface CrossbarFeedResponse {\n  feedHash: string;\n  results: (number | null)[];\n}\n\ntype CrossbarSimulatePayload = CrossbarFeedResponse[];\n\n/**\n * Checks if multiple Switchboard Pull oracles can be cranked by simulating feed updates\n *\n * @param feedHashes - Array of oracle feed hashes to check\n * @param crossbarUrl - Crossbar API endpoint (defaults to production)\n * @returns Promise resolving to map of feedHash to crankability result\n */\nexport async function checkBatchOracleCrankability(\n  feedHashes: string[],\n  crossbarUrl: string = \"https://crossbar.0.xyz\"\n): Promise<Map<string, { crankable: boolean; reason?: string }>> {\n  const results = new Map<string, { crankable: boolean; reason?: string }>();\n\n  if (feedHashes.length === 0) {\n    return results;\n  }\n\n  try {\n    // Join feed hashes with commas for batch request\n    const feedHashesString = feedHashes.join(\",\");\n\n    const response = await fetch(`${crossbarUrl}/simulate/${feedHashesString}`, {\n      headers: {\n        Accept: \"application/json\",\n      },\n      signal: AbortSignal.timeout(8000),\n    });\n\n    if (!response.ok) {\n      const reason = `HTTP ${response.status}: ${response.statusText}`;\n      // Mark all as uncrankable if request fails\n      feedHashes.forEach((hash) => {\n        results.set(hash, { crankable: false, reason });\n      });\n      return results;\n    }\n\n    const payload = (await response.json()) as CrossbarSimulatePayload;\n\n    // Check validity of each feed response\n    payload.forEach((feed) => {\n      const result = feed.results[0];\n      const isValid = result !== null && result !== undefined && !isNaN(Number(result));\n\n      results.set(feed.feedHash, {\n        crankable: isValid,\n        reason: isValid ? undefined : \"Invalid feed response\",\n      });\n    });\n\n    // Mark any missing feeds as uncrankable\n    feedHashes.forEach((hash) => {\n      if (!results.has(hash)) {\n        results.set(hash, {\n          crankable: false,\n          reason: \"No response from Crossbar\",\n        });\n      }\n    });\n\n    return results;\n  } catch (error) {\n    const reason = error instanceof Error ? error.message : \"Unknown error\";\n    // Mark all as uncrankable if request fails\n    feedHashes.forEach((hash) => {\n      results.set(hash, { crankable: false, reason });\n    });\n    return results;\n  }\n}\n\n/**\n * Fetches feed hashes for banks by decoding their oracle account data\n */\nasync function fetchFeedHashes(\n  banks: BankType[],\n  connection: Connection\n): Promise<Map<string, string>> {\n  const feedHashMap = new Map<string, string>();\n\n  if (banks.length === 0) {\n    return feedHashMap;\n  }\n\n  try {\n    // Fetch oracle account infos\n    const oracleKeys = banks.map((bank) => bank.oracleKey);\n    const oracleAis = await connection.getMultipleAccountsInfo(oracleKeys);\n\n    // Process each oracle account\n    oracleAis.forEach((oracleAi, idx) => {\n      if (!oracleAi?.data || idx >= banks.length) return;\n\n      const bank = banks[idx];\n      if (!bank) return;\n\n      try {\n        const { feed_hash } = decodeSwitchboardPullFeedData(oracleAi.data);\n        const feedHash = Buffer.from(feed_hash).toString(\"hex\");\n        feedHashMap.set(bank.oracleKey.toBase58(), feedHash);\n      } catch (error) {\n        console.error(`Failed to decode feed hash for bank ${bank.address.toBase58()}:`, error);\n      }\n    });\n  } catch (error) {\n    console.error(\"Failed to fetch feed hashes:\", error);\n  }\n\n  return feedHashMap;\n}\n\n/**\n * Checks crankability for multiple oracles in parallel\n *\n * @param banks - Banks to check oracle crankability for\n * @param oraclePrices - Map of oracle prices (may contain feedHash)\n * @param connection - Solana connection for fetching missing feed hashes\n * @param crossbarUrl - Crossbar API endpoint\n * @returns Promise resolving to map of oracle address to crankability result\n */\nexport async function checkMultipleOraclesCrankability(\n  banks: BankType[],\n  oraclePrices: Map<string, OraclePrice>,\n  connection?: Connection,\n  crossbarUrl?: string\n): Promise<Map<string, CrankabilityResult>> {\n  const results = new Map<string, CrankabilityResult>();\n  const feedHashMap = new Map<string, string>();\n  const banksNeedingFetch: BankType[] = [];\n\n  // Check which banks already have feedHash in oraclePrices\n  banks.forEach((bank) => {\n    const oracleKey = bank.oracleKey.toBase58();\n    const bankAddress = bank.address.toBase58();\n    const feedHash = oraclePrices.get(bankAddress)?.switchboardData?.feedHash;\n\n    if (feedHash) {\n      feedHashMap.set(oracleKey, feedHash);\n    } else {\n      banksNeedingFetch.push(bank);\n    }\n  });\n\n  // Fetch missing feed hashes if we have a connection\n  if (banksNeedingFetch.length > 0 && connection) {\n    const fetchedHashes = await fetchFeedHashes(banksNeedingFetch, connection);\n    fetchedHashes.forEach((hash, key) => feedHashMap.set(key, hash));\n  }\n\n  // Collect all feed hashes for batch request\n  const feedHashesToCheck: string[] = [];\n  const feedHashToBanks = new Map<string, BankType[]>();\n\n  banks.forEach((bank) => {\n    const oracleKey = bank.oracleKey.toBase58();\n    const feedHash = feedHashMap.get(oracleKey);\n\n    if (!feedHash) {\n      results.set(oracleKey, {\n        oracle: bank.oracleKey,\n        crankable: false,\n        reason: \"Feed hash not available\",\n      });\n    } else {\n      if (!feedHashToBanks.has(feedHash)) {\n        feedHashesToCheck.push(feedHash);\n        feedHashToBanks.set(feedHash, []);\n      }\n      feedHashToBanks.get(feedHash)!.push(bank);\n    }\n  });\n\n  // Batch check all feed hashes in a single request\n  if (feedHashesToCheck.length > 0) {\n    // If no crossbarUrl provided, assume all feeds are crankable (test mode)\n    if (!crossbarUrl) {\n      feedHashesToCheck.forEach((feedHash) => {\n        const banksForFeed = feedHashToBanks.get(feedHash) || [];\n        banksForFeed.forEach((bank) => {\n          results.set(bank.oracleKey.toBase58(), {\n            oracle: bank.oracleKey,\n            crankable: true,\n            reason: \"Test mode - no crankability check\",\n          });\n        });\n      });\n    } else {\n      const crankabilityByFeedHash = await checkBatchOracleCrankability(\n        feedHashesToCheck,\n        crossbarUrl\n      );\n\n      // Map results back to banks\n      crankabilityByFeedHash.forEach((result, feedHash) => {\n        const banksForFeed = feedHashToBanks.get(feedHash) || [];\n        banksForFeed.forEach((bank) => {\n          results.set(bank.oracleKey.toBase58(), {\n            oracle: bank.oracleKey,\n            crankable: result.crankable,\n            reason: result.reason,\n          });\n        });\n      });\n    }\n  }\n\n  return results;\n}\n\n/**\n * Filters banks into crankable and uncrankable sets\n */\nexport function partitionBanksByCrankability(\n  banks: BankType[],\n  crankabilityResults: Map<string, CrankabilityResult>\n): {\n  crankable: BankType[];\n  uncrankable: Array<{ bank: BankType; reason: string }>;\n} {\n  const crankable: BankType[] = [];\n  const uncrankable: Array<{ bank: BankType; reason: string }> = [];\n\n  for (const bank of banks) {\n    const result = crankabilityResults.get(bank.oracleKey.toBase58());\n\n    if (!result) {\n      // If no result, assume uncrankable to be safe\n      uncrankable.push({\n        bank,\n        reason: \"No crankability check result available\",\n      });\n      continue;\n    }\n\n    if (result.crankable) {\n      crankable.push(bank);\n    } else {\n      uncrankable.push({\n        bank,\n        reason: result.reason || \"Unknown reason\",\n      });\n    }\n  }\n\n  return { crankable, uncrankable };\n}\n","interface TokenPriceResponse {\n  success: boolean;\n  data: Record<\n    string,\n    { value: number; updateUnixTime: number; updateHumanTime: string }\n  >;\n}\n\n/**\n * Fetches fallback token prices for specific mint addresses using the app's\n * token price endpoint (e.g. /api/tokens/multi).\n *\n * @param mintAddresses - Array of mint addresses to fetch prices for\n * @param apiEndpoint - Base API endpoint URL (without query parameters)\n * @param opts - Optional configuration object\n * @param opts.queryKey - Query parameter name for mint list (defaults to \"mintList\")\n * @returns Promise resolving to a record mapping mint addresses to their price values\n */\nexport async function getFallbackPricesForMints(\n  mintAddresses: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, number>> {\n  const queryKey = opts?.queryKey ?? \"mintList\";\n  try {\n    const url = `${apiEndpoint}?${queryKey}=${mintAddresses.join(\",\")}`;\n    const response = await fetch(url);\n\n    if (!response.ok) {\n      throw new Error(\"Response is not ok\");\n    }\n\n    const data = (await response.json()) as TokenPriceResponse;\n    if (!data.success) {\n      throw new Error(\"Success field is false\");\n    }\n    const rawPrices = data.data || {};\n\n    const extractedPrices: Record<string, number> = {};\n    Object.entries(rawPrices).forEach(([mint, priceData]) => {\n      extractedPrices[mint] = priceData.value;\n    });\n\n    return extractedPrices;\n  } catch (error) {\n    // TODO: add sentry logging\n    console.warn(\"Error fetching fallback prices for static feeds:\", error);\n    return {};\n  }\n}\n\n/**\n * @deprecated Renamed to {@link getFallbackPricesForMints} — the endpoint is\n * no longer Birdeye-backed.\n */\nexport const getBirdeyePricesForMints = getFallbackPricesForMints;\n\n/**\n * Fetches fallback prices and maps them by feed ID\n * @param feedMint - Array of objects containing feedId and mintAddress pairs\n * @returns Promise resolving to record of prices indexed by feed ID\n */\nexport const getFallbackPricesByFeedId = async (\n  feedMint: {\n    feedId: string;\n    mintAddress: string;\n  }[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, number>> => {\n  const mintAddresses = feedMint.map((feedMint) => feedMint.mintAddress);\n  const prices = await getFallbackPricesForMints(\n    mintAddresses,\n    apiEndpoint,\n    opts\n  );\n\n  const priceByFeedId: Record<string, number> = {};\n  feedMint.forEach((feedMint) => {\n    const feedId = feedMint.feedId;\n    const mintAddress = feedMint.mintAddress;\n    const price = prices[mintAddress];\n\n    if (price) {\n      priceByFeedId[feedId] = price;\n    }\n  });\n\n  return priceByFeedId;\n};\n\n/**\n * @deprecated Renamed to {@link getFallbackPricesByFeedId} — the endpoint is\n * no longer Birdeye-backed.\n */\nexport const getBirdeyeFallbackPricesByFeedId = getFallbackPricesByFeedId;\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport {\n  MarginfiAccountRaw,\n  BalanceRaw,\n  BalanceType,\n  AccountFlags,\n  HealthCacheFlags,\n  MarginfiAccountTypeDto,\n  MarginfiAccountType,\n  BalanceTypeDto,\n  HealthCacheTypeDto,\n  HealthCacheType,\n  HealthCacheRaw,\n  HealthCacheStatus,\n} from \"../types\";\n\nimport { MarginfiIdlType } from \"~/idl\";\nimport { AccountType } from \"~/types\";\nimport { bigNumberToWrappedI80F48, toBigNumber, wrappedI80F48toBigNumber } from \"~/utils\";\n\nexport const EMPTY_HEALTH_CACHE: HealthCacheRaw = {\n  assetValue: {\n    value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  },\n  liabilityValue: {\n    value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  },\n  timestamp: new BN(0),\n  flags: 0,\n  prices: [],\n  assetValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n  liabilityValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n  assetValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n  liabilityValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n  errIndex: 0,\n  internalErr: 0,\n  internalBankruptcyErr: 0,\n  internalLiqErr: 0,\n  mrgnErr: 0,\n};\n\nexport function decodeAccountRaw(encoded: Buffer, idl: MarginfiIdlType): MarginfiAccountRaw {\n  const coder = new BorshCoder(idl);\n  return coder.accounts.decode(AccountType.MarginfiAccount, encoded);\n}\n\nexport function parseBalanceRaw(balanceRaw: BalanceRaw): BalanceType {\n  const active =\n    typeof balanceRaw.active === \"number\" ? balanceRaw.active === 1 : balanceRaw.active;\n  const bankPk = balanceRaw.bankPk;\n  const assetShares = wrappedI80F48toBigNumber(balanceRaw.assetShares);\n  const liabilityShares = wrappedI80F48toBigNumber(balanceRaw.liabilityShares);\n  const emissionsOutstanding = wrappedI80F48toBigNumber(balanceRaw.emissionsOutstanding);\n  const lastUpdate = balanceRaw.lastUpdate.toNumber();\n\n  return {\n    active,\n    bankPk,\n    assetShares,\n    liabilityShares,\n    emissionsOutstanding,\n    lastUpdate,\n  };\n}\n\nexport function parseHealthCacheRaw(healthCacheRaw: HealthCacheRaw): HealthCacheType {\n  const assetValue = wrappedI80F48toBigNumber(healthCacheRaw.assetValue);\n  const liabilityValue = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValue);\n  const assetValueMaint = wrappedI80F48toBigNumber(healthCacheRaw.assetValueMaint);\n  const liabilityValueMaint = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValueMaint);\n  const assetValueEquity = wrappedI80F48toBigNumber(healthCacheRaw.assetValueEquity);\n  const liabilityValueEquity = wrappedI80F48toBigNumber(healthCacheRaw.liabilityValueEquity);\n  const timestamp = toBigNumber(healthCacheRaw.timestamp);\n  const flags = getActiveHealthCacheFlags(healthCacheRaw.flags);\n  const prices = healthCacheRaw.prices;\n  const simulationStatus = HealthCacheStatus.UNSET;\n\n  const healthCache: HealthCacheType = {\n    assetValue,\n    liabilityValue,\n    assetValueMaint,\n    liabilityValueMaint,\n    assetValueEquity,\n    liabilityValueEquity,\n    timestamp,\n    flags,\n    prices,\n    simulationStatus,\n  };\n  return healthCache;\n}\n\nexport function parseMarginfiAccountRaw(\n  marginfiAccountPk: PublicKey,\n  accountData: MarginfiAccountRaw\n): MarginfiAccountType {\n  const address = marginfiAccountPk;\n  const group = accountData.group;\n  const authority = accountData.authority;\n  const balances = accountData.lendingAccount.balances.map(parseBalanceRaw);\n  const accountFlags = getActiveAccountFlags(accountData.accountFlags);\n  const emissionsDestinationAccount = accountData.emissionsDestinationAccount;\n  const healthCache = parseHealthCacheRaw(accountData.healthCache);\n\n  return {\n    address,\n    group,\n    authority,\n    balances,\n    accountFlags,\n    emissionsDestinationAccount,\n    healthCache,\n  };\n}\n\n/**\n * Get all active account flags as an array of flag names\n */\nexport function getActiveAccountFlags(flags: BN): AccountFlags[] {\n  const activeFlags: AccountFlags[] = [];\n\n  Object.keys(AccountFlags)\n    .filter((key) => isNaN(Number(key))) // Only get the string keys (not the reverse mapping)\n    .forEach((key) => {\n      const flag = AccountFlags[key as keyof typeof AccountFlags];\n      if (typeof flag === \"number\" && hasAccountFlag(flags, flag)) {\n        activeFlags.push(flag);\n      }\n    });\n\n  return activeFlags;\n}\n\n/**\n * Check if an account flag is set\n */\nexport function hasAccountFlag(flags: BN, flag: number): boolean {\n  return !flags.and(new BN(flag)).isZero();\n}\n\n/**\n * Convert on-chain health cache flags (BN) to an array of HealthCacheFlags enum values\n *\n * According to the IDL, health cache flags are defined as:\n * - HEALTHY = 1 (bit 0) - If set, the account cannot be liquidated\n * - ENGINE_STATUS_OK = 2 (bit 1) - If set, the engine did not error during health calculation\n * - ORACLE_OK = 4 (bit 2) - If set, the engine did not encounter oracle issues\n */\nexport function getActiveHealthCacheFlags(flags: number): HealthCacheFlags[] {\n  const activeFlags: HealthCacheFlags[] = [];\n\n  // Check each flag bit\n  if (hasHealthCacheFlag(flags, HealthCacheFlags.HEALTHY)) {\n    activeFlags.push(HealthCacheFlags.HEALTHY);\n  }\n\n  if (hasHealthCacheFlag(flags, HealthCacheFlags.ENGINE_STATUS_OK)) {\n    activeFlags.push(HealthCacheFlags.ENGINE_STATUS_OK);\n  }\n\n  if (hasHealthCacheFlag(flags, HealthCacheFlags.ORACLE_OK)) {\n    activeFlags.push(HealthCacheFlags.ORACLE_OK);\n  }\n\n  return activeFlags;\n}\n\n/**\n * Check if a health cache flag is set\n */\nexport function hasHealthCacheFlag(flags: number, flag: HealthCacheFlags): boolean {\n  return (flags & flag) !== 0;\n}\n\n/**\n * Convert numeric health cache flags to a human-readable status message\n */\nexport function getHealthCacheStatusDescription(flags: number): string {\n  const activeFlags = getActiveHealthCacheFlags(flags);\n\n  // Check for critical conditions first\n  if (!activeFlags.includes(HealthCacheFlags.HEALTHY)) {\n    return \"UNHEALTHY: Account is eligible for liquidation\";\n  }\n\n  if (!activeFlags.includes(HealthCacheFlags.ENGINE_STATUS_OK)) {\n    return \"ERROR: Risk engine encountered an error during health calculation\";\n  }\n\n  if (!activeFlags.includes(HealthCacheFlags.ORACLE_OK)) {\n    return \"WARNING: Oracle price data may be stale or invalid\";\n  }\n\n  // All good\n  if (activeFlags.length === 3) {\n    return \"HEALTHY: Account is in good standing\";\n  }\n\n  // Default case (shouldn't happen often)\n  return `Status flags: ${activeFlags.join(\", \")}`;\n}\n\nexport function dtoToMarginfiAccount(\n  marginfiAccountDto: MarginfiAccountTypeDto\n): MarginfiAccountType {\n  return {\n    address: new PublicKey(marginfiAccountDto.address),\n    group: new PublicKey(marginfiAccountDto.group),\n    authority: new PublicKey(marginfiAccountDto.authority),\n    balances: marginfiAccountDto.balances.map(dtoToBalance),\n    accountFlags: marginfiAccountDto.accountFlags,\n    emissionsDestinationAccount: new PublicKey(marginfiAccountDto.emissionsDestinationAccount),\n    healthCache: dtoToHealthCache(marginfiAccountDto.healthCache),\n  };\n}\n\nexport function dtoToBalance(balanceDto: BalanceTypeDto): BalanceType {\n  return {\n    active: balanceDto.active,\n    bankPk: new PublicKey(balanceDto.bankPk),\n    assetShares: new BigNumber(balanceDto.assetShares),\n    liabilityShares: new BigNumber(balanceDto.liabilityShares),\n    emissionsOutstanding: new BigNumber(balanceDto.emissionsOutstanding),\n    lastUpdate: balanceDto.lastUpdate,\n  };\n}\n\nexport function dtoToHealthCache(healthCacheDto: HealthCacheTypeDto): HealthCacheType {\n  return {\n    assetValue: new BigNumber(healthCacheDto.assetValue),\n    liabilityValue: new BigNumber(healthCacheDto.liabilityValue),\n    assetValueMaint: new BigNumber(healthCacheDto.assetValueMaint),\n    liabilityValueMaint: new BigNumber(healthCacheDto.liabilityValueMaint),\n    assetValueEquity: new BigNumber(healthCacheDto.assetValueEquity),\n    liabilityValueEquity: new BigNumber(healthCacheDto.liabilityValueEquity),\n    timestamp: new BigNumber(healthCacheDto.timestamp),\n    flags: healthCacheDto.flags,\n    prices: healthCacheDto.prices,\n    simulationStatus: healthCacheDto.simulationStatus,\n  };\n}\n","import BN from \"bn.js\";\n\nimport {\n  AccountFlags,\n  BalanceType,\n  BalanceTypeDto,\n  HealthCacheType,\n  HealthCacheTypeDto,\n  MarginfiAccountType,\n  MarginfiAccountTypeDto,\n} from \"../types\";\n\n/**\n * Convert numeric flag to BN for Solana compatibility\n */\nexport function accountFlagToBN(flag: AccountFlags): BN {\n  return new BN(flag);\n}\n\nexport function marginfiAccountToDto(\n  marginfiAccount: MarginfiAccountType\n): MarginfiAccountTypeDto {\n  return {\n    address: marginfiAccount.address.toBase58(),\n    group: marginfiAccount.group.toBase58(),\n    authority: marginfiAccount.authority.toBase58(),\n    balances: marginfiAccount.balances.map(balanceToDto),\n    accountFlags: marginfiAccount.accountFlags,\n    emissionsDestinationAccount:\n      marginfiAccount.emissionsDestinationAccount.toBase58(),\n    healthCache: healthCacheToDto(marginfiAccount.healthCache),\n  };\n}\n\nexport function balanceToDto(balance: BalanceType): BalanceTypeDto {\n  return {\n    active: balance.active,\n    bankPk: balance.bankPk.toBase58(),\n    assetShares: balance.assetShares.toString(),\n    liabilityShares: balance.liabilityShares.toString(),\n    emissionsOutstanding: balance.emissionsOutstanding.toString(),\n    lastUpdate: balance.lastUpdate,\n  };\n}\n\nexport function healthCacheToDto(\n  healthCache: HealthCacheType\n): HealthCacheTypeDto {\n  return {\n    assetValue: healthCache.assetValue.toString(),\n    liabilityValue: healthCache.liabilityValue.toString(),\n    assetValueMaint: healthCache.assetValueMaint.toString(),\n    liabilityValueMaint: healthCache.liabilityValueMaint.toString(),\n    assetValueEquity: healthCache.assetValueEquity.toString(),\n    liabilityValueEquity: healthCache.liabilityValueEquity.toString(),\n    timestamp: healthCache.timestamp.toString(),\n    flags: healthCache.flags,\n    prices: healthCache.prices,\n    simulationStatus: healthCache.simulationStatus,\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  ActionEmodeImpact,\n  ActiveEmodePair,\n  BankType,\n  EmodeImpact,\n  EmodeImpactStatus,\n  EmodePair,\n  EmodeTag,\n} from \"~/services/bank/types\";\n\n/**\n * Generates emode pairs from an array of banks by analyzing their emode configurations.\n * @param banks - Array of banks to analyze for emode relationships\n * @returns Array of emode pairs defining relationships between liability and collateral banks\n */\nexport function getEmodePairs(banks: BankType[]): EmodePair[] {\n  const emodePairs: EmodePair[] = [];\n\n  banks.forEach((bank) => {\n    const emodeTag = bank.emode.emodeTag;\n\n    if (emodeTag === EmodeTag.UNSET) {\n      return;\n    }\n\n    bank.emode.emodeEntries.forEach((emodeEntry) => {\n      emodePairs.push({\n        collateralBanks: banks\n          .filter((b) => b.emode.emodeTag === emodeEntry.collateralBankEmodeTag)\n          .map((b) => b.address),\n        collateralBankTag: emodeEntry.collateralBankEmodeTag,\n        liabilityBank: bank.address,\n        liabilityBankTag: emodeTag,\n        assetWeightMaint: emodeEntry.assetWeightMaint,\n        assetWeightInit: emodeEntry.assetWeightInit,\n      });\n    });\n  });\n\n  return emodePairs;\n}\n\n/**\n * Computes the lowest emode weights for each collateral bank across all active emode pairs.\n * Returns a Map keyed by bank address string for consistency with other SDK maps.\n *\n * @param emodePairs - Array of emode pairs to analyze\n * @returns Map of bank address → lowest { assetWeightInit, assetWeightMaint }\n */\nexport function computeLowestEmodeWeights(\n  emodePairs: EmodePair[]\n): Map<string, { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }> {\n  const result = new Map<string, { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }>();\n\n  emodePairs.forEach((emodePair) => {\n    emodePair.collateralBanks.forEach((collateralBankPk) => {\n      const bankPkStr = collateralBankPk.toBase58();\n      const existing = result.get(bankPkStr);\n\n      if (!existing) {\n        result.set(bankPkStr, {\n          assetWeightInit: emodePair.assetWeightInit,\n          assetWeightMaint: emodePair.assetWeightMaint,\n        });\n      } else {\n        result.set(bankPkStr, {\n          assetWeightInit: BigNumber.min(existing.assetWeightInit, emodePair.assetWeightInit),\n          assetWeightMaint: BigNumber.min(existing.assetWeightMaint, emodePair.assetWeightMaint),\n        });\n      }\n    });\n  });\n\n  return result;\n}\n\n/**\n * Creates an ActiveEmodePair from a list of active EmodePairs.\n * Selects the pair with the lowest assetWeightInit and aggregates all banks and tags.\n */\nexport function createActiveEmodePairFromPairs(pairs: EmodePair[]): ActiveEmodePair | undefined {\n  if (pairs.length === 0) {\n    return undefined;\n  }\n\n  // Find the pair with lowest assetWeightInit\n  let bestPair = pairs[0];\n  for (const p of pairs) {\n    if (p.assetWeightInit.lt(bestPair.assetWeightInit)) {\n      bestPair = p;\n    }\n  }\n\n  // Aggregate all banks and tags from all pairs\n  return {\n    collateralBanks: Array.from(\n      new Map(\n        pairs\n          .map((p) => p.collateralBanks)\n          .flat()\n          .map((bank) => [bank.toBase58(), bank])\n      ).values()\n    ),\n    collateralBankTags: Array.from(new Set(pairs.map((p) => p.collateralBankTag).flat())),\n    liabilityBanks: Array.from(\n      new Map(\n        pairs\n          .map((p) => p.liabilityBank)\n          .flat()\n          .map((bank) => [bank.toBase58(), bank])\n      ).values()\n    ),\n    liabilityBankTags: Array.from(new Set(pairs.map((p) => p.liabilityBankTag).flat())),\n    assetWeightMaint: bestPair.assetWeightMaint,\n    assetWeightInit: bestPair.assetWeightInit,\n  };\n}\n\n/**\n * A configured emode pair with its banks/tags pre-stringified, plus a reference\n * back to the original `EmodePair`. The hot paths below compare/group on these\n * base58 strings (O(1) Set/Map lookups) instead of `PublicKey.equals` /\n * `.toBase58()` (32-byte compares + base58 encodes), then return `orig` so\n * callers still receive the original `EmodePair` objects.\n */\ntype IndexedEmodePair = {\n  orig: EmodePair;\n  liabStr: string;\n  liabTagStr: string;\n  collTagStr: string;\n  collStrs: string[];\n};\n\n/**\n * Indexes the *configured* emode pairs (both tags set) once. `emodePairs` is\n * constant across a whole `computeEmodeImpacts` run, so this is hoisted out of\n * the per-bank/per-action simulation loop instead of being rebuilt ~800x.\n */\nfunction indexConfiguredPairs(emodePairs: EmodePair[]): {\n  configured: IndexedEmodePair[];\n  liabTagByBank: Map<string, string>;\n} {\n  const configured: IndexedEmodePair[] = [];\n  const liabTagByBank = new Map<string, string>();\n  for (const p of emodePairs) {\n    if (p.collateralBankTag === EmodeTag.UNSET || p.liabilityBankTag === EmodeTag.UNSET) {\n      continue;\n    }\n    const liabStr = p.liabilityBank.toBase58();\n    const liabTagStr = p.liabilityBankTag.toString();\n    configured.push({\n      orig: p,\n      liabStr,\n      liabTagStr,\n      collTagStr: p.collateralBankTag.toString(),\n      collStrs: p.collateralBanks.map((b) => b.toBase58()),\n    });\n    liabTagByBank.set(liabStr, liabTagStr);\n  }\n  return { configured, liabTagByBank };\n}\n\n/**\n * String-keyed core of {@link computeActiveEmodePairs}. Operates purely on the\n * pre-built index + base58 Sets — no PublicKey ops. Returns the original\n * `EmodePair` objects (same order and references as the legacy implementation).\n */\nfunction activePairsFromIndex(\n  configured: IndexedEmodePair[],\n  liabTagByBank: Map<string, string>,\n  liabSet: Set<string>,\n  collSet: Set<string>\n): EmodePair[] {\n  // Required liability-tags from all active liabilities. A liability with no\n  // configured entry kills EMODE immediately.\n  const requiredTags = new Set<string>();\n  for (const liab of liabSet) {\n    const tag = liabTagByBank.get(liab);\n    if (!tag) return [];\n    requiredTags.add(tag);\n  }\n\n  // Keep configured pairs touching both an active liability AND collateral.\n  const possible = configured.filter(\n    (p) => liabSet.has(p.liabStr) && p.collStrs.some((c) => collSet.has(c))\n  );\n  if (possible.length === 0) return [];\n\n  // Group by collateral-tag.\n  const byCollTag: Record<string, IndexedEmodePair[]> = {};\n  for (const p of possible) {\n    (byCollTag[p.collTagStr] ||= []).push(p);\n  }\n\n  // Keep groups whose liability-tags cover every required tag.\n  const validGroups: IndexedEmodePair[][] = [];\n  for (const group of Object.values(byCollTag)) {\n    const supports = new Set(group.map((p) => p.liabTagStr));\n    let coversAll = true;\n    for (const rt of requiredTags) {\n      if (!supports.has(rt)) {\n        coversAll = false;\n        break;\n      }\n    }\n    if (coversAll) validGroups.push(group);\n  }\n  if (validGroups.length === 0) return [];\n\n  return validGroups.flat().map((p) => p.orig);\n}\n\nexport function computeEmodeImpacts(\n  emodePairs: EmodePair[],\n  activeLiabilities: PublicKey[],\n  activeCollateral: PublicKey[],\n  allBanks: PublicKey[]\n): Record<string, ActionEmodeImpact> {\n  // Convert everything to base58 strings ONCE up front and run all\n  // membership/grouping on string Sets/Maps.\n  const activeLiabilitiesSet = new Set(activeLiabilities.map((b) => b.toBase58()));\n  const activeCollateralSet = new Set(activeCollateral.map((b) => b.toBase58()));\n\n  // Index of configured pairs — hoisted out of the simulation loop.\n  const { configured, liabTagByBank } = indexConfiguredPairs(emodePairs);\n\n  // Liability-tag map over ALL pairs (incl. unconfigured). Intentionally broader\n  // than the configured map above: used by the borrow override and `existingTags`.\n  const liabTagMapAll = new Map<string, string>();\n  for (const p of emodePairs) {\n    liabTagMapAll.set(p.liabilityBank.toBase58(), p.liabilityBankTag.toString());\n  }\n\n  // Every collateral bank referenced by any pair (supply-eligibility check).\n  const allCollateralBankStrs = new Set<string>();\n  for (const p of emodePairs) {\n    for (const c of p.collateralBanks) allCollateralBankStrs.add(c.toBase58());\n  }\n\n  // Baseline state\n  const basePairs = activePairsFromIndex(\n    configured,\n    liabTagByBank,\n    activeLiabilitiesSet,\n    activeCollateralSet\n  );\n  const baseOn = basePairs.length > 0;\n\n  const existingTags = new Set<string>(\n    Array.from(activeLiabilitiesSet)\n      .map((l) => liabTagMapAll.get(l))\n      .filter((t): t is string => !!t)\n  );\n\n  // Helper for min initial weight (used in diffState only)\n  function minWeight(ps: EmodePair[]): BigNumber {\n    // TODO: handle empty array\n    let m = ps[0].assetWeightInit;\n    for (const x of ps) if (x.assetWeightInit.lt(m)) m = x.assetWeightInit;\n    return m;\n  }\n\n  // Determine status transitions\n  function diffState(before: EmodePair[], after: EmodePair[]): EmodeImpactStatus {\n    const was = before.length > 0,\n      isOn = after.length > 0;\n    if (!was && !isOn) return EmodeImpactStatus.InactiveEmode;\n    if (!was && isOn) return EmodeImpactStatus.ActivateEmode;\n    if (was && !isOn) return EmodeImpactStatus.RemoveEmode;\n\n    const bMin = minWeight(before),\n      aMin = minWeight(after);\n    if (aMin.gt(bMin)) return EmodeImpactStatus.IncreaseEmode;\n    if (aMin.lt(bMin)) return EmodeImpactStatus.ReduceEmode;\n    return EmodeImpactStatus.ExtendEmode;\n  }\n\n  // Simulation of each action\n  function simulate(\n    bankStr: string,\n    action: \"borrow\" | \"repay\" | \"supply\" | \"withdraw\"\n  ): EmodeImpact {\n    const L = new Set(activeLiabilitiesSet),\n      C = new Set(activeCollateralSet);\n    switch (action) {\n      case \"borrow\":\n        L.add(bankStr);\n        break;\n      case \"repay\":\n        L.delete(bankStr);\n        break;\n      case \"supply\":\n        C.add(bankStr);\n        break;\n      case \"withdraw\":\n        C.delete(bankStr);\n        break;\n    }\n\n    const after = activePairsFromIndex(configured, liabTagByBank, L, C);\n    let status = diffState(basePairs, after);\n\n    // Borrow override\n    if (action === \"borrow\") {\n      const tag = liabTagMapAll.get(bankStr);\n\n      // Borrowing an unconfigured bank => EMODE off / inactive\n      if (!tag) {\n        status = baseOn ? EmodeImpactStatus.RemoveEmode : EmodeImpactStatus.InactiveEmode;\n\n        // EMODE was ON; keep the diffState result unless EMODE really turns OFF\n      } else if (baseOn) {\n        if (after.length === 0) {\n          status = EmodeImpactStatus.RemoveEmode;\n        } else if (existingTags.has(tag)) {\n          status = EmodeImpactStatus.ExtendEmode; // same tag ⇒ extend\n          // else keep diffState (Increase/Reduce) which is already correct\n        }\n      }\n    }\n\n    // Supply override\n    if (action === \"supply\") {\n      const isOn = after.length > 0;\n      status =\n        !baseOn && isOn\n          ? EmodeImpactStatus.ActivateEmode\n          : baseOn && isOn\n            ? EmodeImpactStatus.ExtendEmode\n            : EmodeImpactStatus.InactiveEmode;\n    }\n\n    // Withdraw override\n    if (action === \"withdraw\") {\n      if (!baseOn) {\n        status = EmodeImpactStatus.InactiveEmode;\n      } else if (after.length === 0) {\n        status = EmodeImpactStatus.RemoveEmode;\n      } else {\n        const b = minWeight(basePairs),\n          a = minWeight(after);\n        if (a.gt(b)) status = EmodeImpactStatus.IncreaseEmode;\n        else if (a.lt(b)) status = EmodeImpactStatus.ReduceEmode;\n        else status = EmodeImpactStatus.ExtendEmode;\n      }\n    }\n\n    // Create active emode pair from resulting pairs\n    const activeEmodePair = createActiveEmodePairFromPairs(after);\n\n    return {\n      status,\n      resultingPairs: after,\n      activePair: activeEmodePair,\n    };\n  }\n\n  // Run simulations across allBanks\n  const result: Record<string, ActionEmodeImpact> = {};\n  for (const bank of allBanks) {\n    const key = bank.toBase58();\n    const impact: ActionEmodeImpact = {};\n\n    // Only new borrows (bank not already collateral)\n    if (!activeCollateralSet.has(key)) {\n      impact.borrowImpact = simulate(key, \"borrow\");\n    }\n\n    // Only supply for collateral-configured banks not in play\n    if (\n      allCollateralBankStrs.has(key) &&\n      !activeCollateralSet.has(key) &&\n      !activeLiabilitiesSet.has(key)\n    ) {\n      impact.supplyImpact = simulate(key, \"supply\");\n    }\n\n    if (activeLiabilitiesSet.has(key)) {\n      impact.repayAllImpact = simulate(key, \"repay\");\n    }\n    if (activeCollateralSet.has(key)) {\n      impact.withdrawAllImpact = simulate(key, \"withdraw\");\n    }\n\n    result[key] = impact;\n  }\n\n  return result;\n}\n\nexport function computeActiveEmodePairs(\n  emodePairs: EmodePair[],\n  activeLiabilities: PublicKey[],\n  activeCollateral: PublicKey[]\n): EmodePair[] {\n  // Public PublicKey-based API preserved for callers (action-box simulations,\n  // account model). Converts to base58 once and delegates to the string-keyed\n  // core — drops the O(pairs × actives) PublicKey.equals/.toBase58 work.\n  const { configured, liabTagByBank } = indexConfiguredPairs(emodePairs);\n  const liabSet = new Set(activeLiabilities.map((b) => b.toBase58()));\n  const collSet = new Set(activeCollateral.map((b) => b.toBase58()));\n  return activePairsFromIndex(configured, liabTagByBank, liabSet, collSet);\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { BalanceType, MarginRequirementType } from \"../../types\";\n\nimport {\n  BankType,\n  computeAssetUsdValue,\n  computeLiabilityUsdValue,\n  getAssetQuantity,\n  getLiabilityQuantity,\n} from \"~/services/bank\";\nimport { OraclePrice, PriceBias } from \"~/services/price\";\nimport { nativeToUi } from \"~/utils\";\n\n/**\n * Balance Value & Quantity Calculations\n * =====================================\n */\n\n/**\n * Configuration for computing balance USD value\n */\nexport interface ComputeBalanceUsdValueParams {\n  /** The balance to compute USD value for */\n  balance: BalanceType;\n  /** The bank containing the balance */\n  bank: BankType;\n  /** Oracle price data */\n  oraclePrice: OraclePrice;\n  /** Which margin level (Initial, Maintenance, Equity) */\n  marginRequirement: MarginRequirementType;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n  /** Optional emode weight overrides */\n  activeEmodeWeights?: {\n    assetWeightInit: BigNumber;\n    assetWeightMaint: BigNumber;\n  };\n}\n\n/**\n * Computes the USD value of both assets and liabilities for a balance.\n *\n * This function returns the USD value of the position's assets (deposits) and\n * liabilities (borrows) separately, using neutral price bias (no conservative adjustments).\n *\n * @param params - Configuration object for balance USD value computation\n * @returns Object containing assets and liabilities USD values\n *\n * @example\n * ```typescript\n * const { assets, liabilities } = computeBalanceUsdValue({\n *   balance,\n *   bank,\n *   oraclePrice,\n *   marginRequirement: MarginRequirementType.Initial,\n * });\n * console.log(`Assets: $${assets.toFormat(2)}, Liabilities: $${liabilities.toFormat(2)}`);\n * ```\n */\nexport function computeBalanceUsdValue(params: ComputeBalanceUsdValueParams): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  const {\n    balance,\n    bank,\n    oraclePrice,\n    marginRequirement,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n  } = params;\n\n  const assetsValue = computeAssetUsdValue({\n    bank,\n    oraclePrice,\n    assetShares: balance.assetShares,\n    marginRequirement,\n    priceBias: PriceBias.None,\n    activeEmodeWeights,\n    assetShareValueMultiplier,\n  });\n  const liabilitiesValue = computeLiabilityUsdValue({\n    bank,\n    oraclePrice,\n    liabilityShares: balance.liabilityShares,\n    marginRequirement,\n    priceBias: PriceBias.None,\n  });\n  return { assets: assetsValue, liabilities: liabilitiesValue };\n}\n\n/**\n * Configuration for computing balance USD value with price bias\n */\nexport interface GetBalanceUsdValueWithPriceBiasParams {\n  /** The balance to compute USD value for */\n  balance: BalanceType;\n  /** The bank containing the balance */\n  bank: BankType;\n  /** Oracle price data */\n  oraclePrice: OraclePrice;\n  /** Which margin level (Initial, Maintenance, Equity) */\n  marginRequirement: MarginRequirementType;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n  /** Optional emode weight overrides */\n  activeEmodeWeights?: {\n    assetWeightInit: BigNumber;\n    assetWeightMaint: BigNumber;\n  };\n}\n\n/**\n * Computes the USD value of both assets and liabilities with conservative price bias.\n *\n * This function applies conservative pricing for risk management:\n * - **Assets**: Uses Lowest price (conservative collateral valuation)\n * - **Liabilities**: Uses Highest price (conservative debt valuation)\n *\n * This is more conservative than `computeBalanceUsdValue` which uses neutral pricing.\n * Typically used for health checks and liquidation thresholds.\n *\n * @param params - Configuration object for balance USD value computation\n * @returns Object containing assets and liabilities USD values with conservative bias\n *\n * @example\n * ```typescript\n * const { assets, liabilities } = getBalanceUsdValueWithPriceBias({\n *   balance,\n *   bank,\n *   oraclePrice,\n *   marginRequirement: MarginRequirementType.Maintenance,\n * });\n * // Conservative health factor calculation\n * const healthFactor = assets.div(liabilities);\n * ```\n */\nexport function getBalanceUsdValueWithPriceBias(params: GetBalanceUsdValueWithPriceBiasParams): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  const {\n    balance,\n    bank,\n    oraclePrice,\n    marginRequirement,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n  } = params;\n\n  const assetsValue = computeAssetUsdValue({\n    bank,\n    oraclePrice,\n    assetShares: balance.assetShares,\n    marginRequirement,\n    priceBias: PriceBias.Lowest,\n    activeEmodeWeights,\n    assetShareValueMultiplier,\n  });\n  const liabilitiesValue = computeLiabilityUsdValue({\n    bank,\n    oraclePrice,\n    liabilityShares: balance.liabilityShares,\n    marginRequirement,\n    priceBias: PriceBias.Highest,\n  });\n  return { assets: assetsValue, liabilities: liabilitiesValue };\n}\n\n/**\n * Computes the native token quantities for a balance.\n *\n * Converts balance shares to actual token amounts in native units (no decimal scaling).\n *\n * @param balance - The balance to compute quantities for\n * @param bank - The bank containing the balance\n * @returns Object with assets and liabilities in native token amounts\n */\nexport function computeQuantity(\n  balance: BalanceType,\n  bank: BankType\n): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  const assetsQuantity = getAssetQuantity(bank, balance.assetShares);\n  const liabilitiesQuantity = getLiabilityQuantity(bank, balance.liabilityShares);\n  return { assets: assetsQuantity, liabilities: liabilitiesQuantity };\n}\n\n/**\n * Computes the UI-formatted token quantities for a balance.\n *\n * This function:\n * 1. Converts shares → native token amounts\n * 2. (Optional) Applies cToken exchange rate for integrated protocols\n * 3. Scales by token decimals for UI display\n *\n * **For integrated protocols (Kamino, Drift):**\n * The `assetShareValueMultiplier` converts cToken amounts to underlying token amounts.\n * This is crucial because oracle prices are denominated in the underlying token, not the cToken.\n *\n * @param balance - The balance to compute quantities for\n * @param bank - The bank containing the balance\n * @param assetShareValueMultiplier - Exchange rate for cToken → underlying conversion (Kamino, Drift)\n * @returns Object with assets and liabilities in UI-formatted amounts\n *\n * @example\n * ```typescript\n * // Regular bank (USDC)\n * const { assets, liabilities } = computeQuantityUi(balance, usdcBank);\n * console.log(`Deposited: ${assets.toFixed(2)} USDC`);\n *\n * // Kamino bank (kUSDC → USDC)\n * const kaminoRate = getDriftCTokenMultiplier(kaminoMarket);\n * const { assets, liabilities } = computeQuantityUi(balance, kaminoBank, kaminoRate);\n * console.log(`Deposited: ${assets.toFixed(2)} USDC (underlying)`);\n * // Now assets matches oracle pricing which is in USDC, not kUSDC\n * ```\n */\nexport function computeQuantityUi(\n  balance: BalanceType,\n  bank: BankType,\n  assetShareValueMultiplier?: BigNumber\n): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  const { assets, liabilities } = computeQuantity(balance, bank);\n\n  // For integrated protocols, convert cToken amount to underlying amount\n  // This matches oracle pricing which is denominated in the underlying token\n  const adjustedAssets = assetShareValueMultiplier\n    ? assets.multipliedBy(assetShareValueMultiplier)\n    : assets;\n\n  const assetsQuantity = new BigNumber(nativeToUi(adjustedAssets, bank.mintDecimals));\n  const liabilitiesQuantity = new BigNumber(nativeToUi(liabilities, bank.mintDecimals));\n  return { assets: assetsQuantity, liabilities: liabilitiesQuantity };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  MarginfiAccountType,\n  BalanceType,\n  MarginRequirementType,\n  HealthCacheType,\n  HealthCacheStatus,\n} from \"../../types\";\n\nimport { getBalanceUsdValueWithPriceBias } from \"./balance-value-compute.utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { OraclePrice } from \"~/services/price\";\nimport { shortenAddress } from \"~/utils\";\n\n/**\n * Health & Free Collateral Calculations\n * =====================================\n */\n\n/**\n * Computes free collateral from an account's cached health data using Initial margin requirements.\n *\n * This is a fast lookup function that reads from the account's existing health cache\n * rather than recalculating from balances. Free collateral represents the amount of value\n * available for new borrows or withdrawals.\n *\n * By default, negative values are clamped to zero (representing no available collateral).\n * Set `clamped: false` to get the raw signed value, which can be negative when under-collateralized.\n *\n * ⚠️ **Warning**: Returns cached values that may be stale if account state has changed\n * since the last health cache computation.\n *\n * @param marginfiAccount - The marginfi account with a populated health cache\n * @param opts - Optional configuration object\n * @param opts.clamped - Whether to clamp negative values to zero (default: true)\n * @returns Free collateral value in USD from cached data (clamped to zero by default)\n *\n * @example\n * ```typescript\n * // Get available collateral from cache (default clamped)\n * const freeCollateral = computeFreeCollateralFromCache(account);\n *\n * // Get raw signed value from cache (can be negative)\n * const signedValue = computeFreeCollateralFromCache(account, { clamped: false });\n * ```\n */\nexport function computeFreeCollateralFromCache(\n  marginfiAccount: MarginfiAccountType,\n  opts?: { clamped?: boolean }\n): BigNumber {\n  const _clamped = opts?.clamped ?? true;\n\n  const { assets, liabilities } = computeHealthComponentsFromCache(\n    marginfiAccount,\n    MarginRequirementType.Initial\n  );\n\n  const signedFreeCollateral = assets.minus(liabilities);\n\n  return _clamped ? BigNumber.max(0, signedFreeCollateral) : signedFreeCollateral;\n}\n\n/**\n * Configuration for computing free collateral from balances\n */\nexport interface ComputeFreeCollateralFromBalancesParams {\n  /** Active account balances to compute free collateral for */\n  activeBalances: BalanceType[];\n  /** Map of bank addresses to bank data */\n  banksMap: Map<string, BankType>;\n  /** Map of bank addresses to oracle price data */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }\n  >;\n  /** Whether to clamp negative values to zero (default: true) */\n  clamped?: boolean;\n}\n\n/**\n * Computes free collateral from account balances using Initial margin requirements.\n *\n * Free collateral represents the amount of value available for new borrows or withdrawals.\n * It is calculated as: (weighted assets - weighted liabilities) at Initial margin level.\n *\n * By default, negative values are clamped to zero (representing no available collateral).\n * Set `clamped: false` to get the raw signed value, which can be negative when under-collateralized.\n *\n * @param params - Configuration object for free collateral computation\n * @returns Free collateral value in USD (clamped to zero by default)\n *\n * @example\n * ```typescript\n * // Calculate available collateral for new positions\n * const freeCollateral = computeFreeCollateralFromBalances({\n *   activeBalances: account.balances.filter(b => b.active),\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n * });\n *\n * // Get raw signed value (can be negative)\n * const signedValue = computeFreeCollateralFromBalances({\n *   activeBalances: account.balances.filter(b => b.active),\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n *   clamped: false,\n * });\n * ```\n */\nexport function computeFreeCollateralFromBalances(\n  params: ComputeFreeCollateralFromBalancesParams\n): BigNumber {\n  const {\n    activeBalances,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n    clamped = true,\n  } = params;\n\n  const { assets, liabilities } = computeHealthComponentsFromBalances({\n    activeBalances,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n    marginRequirement: MarginRequirementType.Initial,\n  });\n\n  const signedFreeCollateral = assets.minus(liabilities);\n\n  return clamped ? BigNumber.max(0, signedFreeCollateral) : signedFreeCollateral;\n}\n\n/**\n * Retrieves pre-computed health components from an account's cached health data.\n *\n * This is a fast lookup function that reads from the account's existing health cache\n * rather than recalculating from balances. Use this when the health cache is already\n * up-to-date.\n *\n * ⚠️ **Warning**: Returns cached values that may be stale if account state has changed\n * since the last health cache computation.\n *\n * @param marginfiAccount - The marginfi account with a populated health cache\n * @param marginRequirement - Which margin requirement level to retrieve (Equity, Initial, or Maintenance)\n * @returns Object containing cached asset and liability values in USD\n *\n * @example\n * ```typescript\n * // Get initial margin requirements from cache\n * const { assets, liabilities } = computeHealthComponentsFromCache(\n *   account,\n *   MarginRequirementType.Initial\n * );\n * const freeCollateral = assets.minus(liabilities);\n * ```\n */\nexport function computeHealthComponentsFromCache(\n  marginfiAccount: MarginfiAccountType,\n  marginRequirement: MarginRequirementType\n): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  if (marginfiAccount.healthCache.simulationStatus === HealthCacheStatus.UNSET) {\n    console.warn(\n      `Health cache not computed for account ${shortenAddress(marginfiAccount.address)} yet.`\n    );\n  }\n\n  switch (marginRequirement) {\n    case MarginRequirementType.Equity:\n      return {\n        assets: marginfiAccount.healthCache.assetValueEquity,\n        liabilities: marginfiAccount.healthCache.liabilityValueEquity,\n      };\n    case MarginRequirementType.Initial:\n      return {\n        assets: marginfiAccount.healthCache.assetValue,\n        liabilities: marginfiAccount.healthCache.liabilityValue,\n      };\n    case MarginRequirementType.Maintenance:\n      return {\n        assets: marginfiAccount.healthCache.assetValueMaint,\n        liabilities: marginfiAccount.healthCache.liabilityValueMaint,\n      };\n  }\n}\n\n/**\n * Configuration for computing health components from balances\n */\nexport interface ComputeHealthComponentsFromBalancesParams {\n  /** Active account balances to compute health for */\n  activeBalances: BalanceType[];\n  /** Margin requirement type (Equity, Initial, or Maintenance) */\n  marginRequirement: MarginRequirementType;\n  /** Map of bank addresses to bank data */\n  banksMap: Map<string, BankType>;\n  /** Map of bank addresses to oracle price data */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    {\n      assetWeightMaint: BigNumber;\n      assetWeightInit: BigNumber;\n    }\n  >;\n  /** Optional banks to exclude from health calculation */\n  excludedBanks?: PublicKey[];\n}\n\n/**\n * Computes health components (assets and liabilities) from active balances with price bias applied.\n *\n * This function:\n * - Applies price bias (lowest for assets, highest for liabilities) for conservative health estimates\n * - Supports asset share multipliers for integrated protocols (Kamino, Drift)\n * - Allows emode weight overrides for specific banks\n * - Can exclude specific banks from the calculation\n *\n * @param params - Configuration object for health computation\n * @returns Object containing weighted asset and liability values in USD\n *\n * @example\n * ```typescript\n * const { assets, liabilities } = computeHealthComponentsFromBalances({\n *   activeBalances: account.balances.filter(b => b.active),\n *   marginRequirement: MarginRequirementType.Initial,\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n * });\n * ```\n */\nexport function computeHealthComponentsFromBalances(\n  params: ComputeHealthComponentsFromBalancesParams\n): {\n  assets: BigNumber;\n  liabilities: BigNumber;\n} {\n  const {\n    activeBalances,\n    banksMap,\n    oraclePricesByBank,\n    marginRequirement,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n    excludedBanks,\n  } = params;\n  const filteredBalances = activeBalances.filter(\n    (accountBalance) => !(excludedBanks ?? []).find((b) => b.equals(accountBalance.bankPk))\n  );\n\n  let totalAssets = new BigNumber(0);\n  let totalLiabilities = new BigNumber(0);\n\n  for (const accountBalance of filteredBalances) {\n    // Cache toBase58 conversion - used 3 times\n    const bankKey = accountBalance.bankPk.toBase58();\n\n    const bank = banksMap.get(bankKey);\n    if (!bank) {\n      console.warn(\n        `Bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n      );\n      continue;\n    }\n\n    const oraclePrice = oraclePricesByBank.get(bankKey);\n    if (!oraclePrice) {\n      console.warn(\n        `Price info for bank ${shortenAddress(accountBalance.bankPk)} not found, excluding from health computation`\n      );\n      continue;\n    }\n\n    const emodeWeight = activeEmodeWeightsByBank?.get(bankKey);\n    const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankKey);\n\n    // if emode weight is lower than bank config, use bank config\n    const activeEmodeWeights = emodeWeight\n      ? {\n          assetWeightInit: BigNumber.max(\n            bank.config.assetWeightInit,\n            emodeWeight.assetWeightInit ?? bank.config.assetWeightInit\n          ),\n          assetWeightMaint: BigNumber.max(\n            bank.config.assetWeightMaint,\n            emodeWeight.assetWeightMaint ?? bank.config.assetWeightMaint\n          ),\n        }\n      : undefined;\n\n    const { assets, liabilities } = getBalanceUsdValueWithPriceBias({\n      balance: accountBalance,\n      bank,\n      oraclePrice,\n      marginRequirement,\n      assetShareValueMultiplier,\n      activeEmodeWeights,\n    });\n\n    totalAssets = totalAssets.plus(assets);\n    totalLiabilities = totalLiabilities.plus(liabilities);\n  }\n\n  return { assets: totalAssets, liabilities: totalLiabilities };\n}\n\n/**\n * Configuration for computing health cache status\n */\nexport interface ComputeHealthCacheStatusParams {\n  /** Active account balances to compute health cache for */\n  activeBalances: BalanceType[];\n  /** Map of bank addresses to bank data */\n  banksMap: Map<string, BankType>;\n  /** Map of bank addresses to oracle price data */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    {\n      assetWeightInit: BigNumber;\n      assetWeightMaint: BigNumber;\n    }\n  >;\n}\n\n/**\n * Computes a complete health cache with all margin requirement levels.\n *\n * This function calculates health components for all three margin requirement types:\n * - **Equity**: Unbiased prices, used for account value calculations\n * - **Maintenance**: Conservative prices, determines liquidation threshold\n * - **Initial**: Conservative prices, determines whether new positions can be opened\n *\n * The resulting health cache is typically used for:\n * - Real-time health monitoring\n * - Simulating transaction outcomes\n * - Determining account solvency status\n *\n * @param params - Configuration object for health cache computation\n * @returns Complete health cache with all margin requirement levels\n *\n * @example\n * ```typescript\n * const healthCache = computeHealthCacheStatus({\n *   activeBalances: account.balances.filter(b => b.active),\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n *   activeEmodeWeightsByBank: account.emodeWeights,\n * });\n * ```\n */\nexport function computeHealthCacheStatus(params: ComputeHealthCacheStatusParams): HealthCacheType {\n  const {\n    activeBalances,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  } = params;\n  // Equity values mirror the program: weight 1, conservative price bias (Lowest for assets,\n  // Highest for liabilities), and the time-weighted (TWAP) price (RequirementType::Equity uses\n  // OraclePriceType::TimeWeighted, handled by isWeightedPrice). Uses the biased path, not the\n  // UI \"neutral value\" helper.\n  const { assets: assetValueEquity, liabilities: liabilityValueEquity } =\n    computeHealthComponentsFromBalances({\n      activeBalances,\n      marginRequirement: MarginRequirementType.Equity,\n      banksMap,\n      oraclePricesByBank,\n      assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank,\n    });\n\n  const { assets: assetValueMaint, liabilities: liabilityValueMaint } =\n    computeHealthComponentsFromBalances({\n      activeBalances,\n      marginRequirement: MarginRequirementType.Maintenance,\n      banksMap,\n      oraclePricesByBank,\n      assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank,\n    });\n\n  const { assets: assetValueInitial, liabilities: liabilityValueInitial } =\n    computeHealthComponentsFromBalances({\n      activeBalances,\n      marginRequirement: MarginRequirementType.Initial,\n      banksMap,\n      oraclePricesByBank,\n      assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank,\n    });\n\n  const healthCache: HealthCacheType = {\n    assetValue: assetValueInitial,\n    liabilityValue: liabilityValueInitial,\n    assetValueMaint: assetValueMaint,\n    liabilityValueMaint: liabilityValueMaint,\n    assetValueEquity: assetValueEquity,\n    liabilityValueEquity: liabilityValueEquity,\n    timestamp: new BigNumber(0),\n    flags: [],\n    prices: [],\n    simulationStatus: HealthCacheStatus.COMPUTED,\n  };\n\n  return healthCache;\n}\n\n/**\n * Configuration for computing liability health component\n */\nexport interface ComputeLiabilityHealthComponentParams {\n  /** All account balances (will be filtered to liability positions) */\n  balances: BalanceType[];\n  /** Map of bank addresses to bank data */\n  banksMap: Map<string, BankType>;\n  /** Map of bank addresses to oracle price data */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Specific bank addresses to include as liabilities */\n  liabilityBanks: PublicKey[];\n  /** Margin requirement type (Equity, Initial, or Maintenance) */\n  marginRequirement: MarginRequirementType;\n}\n\n/**\n * Computes the total weighted liability value for specific liability positions.\n *\n * This function filters balances to only include positions in the specified liability banks,\n * then calculates their total weighted USD value using conservative pricing (highest price bias).\n *\n * Useful for:\n * - Calculating partial health impacts when simulating repayments\n * - Analyzing liability exposure to specific assets\n * - Risk assessment for particular debt positions\n *\n * @param params - Configuration object for liability health computation\n * @returns Total weighted liability value in USD for the specified banks\n *\n * @example\n * ```typescript\n * // Calculate liability value for USDC and SOL positions\n * const liabilityValue = computeLiabilityHealthComponent({\n *   balances: account.balances,\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   liabilityBanks: [usdcBankAddress, solBankAddress],\n *   marginRequirement: MarginRequirementType.Initial,\n * });\n * ```\n */\nexport function computeLiabilityHealthComponent(\n  params: ComputeLiabilityHealthComponentParams\n): BigNumber {\n  const { balances, banksMap, oraclePricesByBank, liabilityBanks, marginRequirement } = params;\n\n  const liabilitySet = new Set(liabilityBanks.map((b) => b.toBase58()));\n\n  // Filter to only include liability balances\n  const activeLiabilityBalances = balances.filter(\n    (b) => b.active && liabilitySet.has(b.bankPk.toBase58())\n  );\n\n  const { liabilities } = computeHealthComponentsFromBalances({\n    activeBalances: activeLiabilityBalances,\n    marginRequirement,\n    banksMap,\n    oraclePricesByBank,\n  });\n\n  return liabilities;\n}\n\n/**\n * Configuration for computing asset health component\n */\nexport interface ComputeAssetHealthComponentParams {\n  /** All account balances (will be filtered to asset positions) */\n  balances: BalanceType[];\n  /** Map of bank addresses to bank data */\n  banksMap: Map<string, BankType>;\n  /** Map of bank addresses to oracle price data */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Specific bank addresses to include as assets */\n  assetBanks: PublicKey[];\n  /** Margin requirement type (Equity, Initial, or Maintenance) */\n  marginRequirement: MarginRequirementType;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }\n  >;\n}\n\n/**\n * Computes the total weighted asset value for specific asset positions.\n *\n * This function filters balances to only include positions in the specified asset banks,\n * then calculates their total weighted USD value using conservative pricing (lowest price bias).\n *\n * Useful for:\n * - Calculating partial health impacts when simulating withdrawals\n * - Analyzing collateral value from specific assets\n * - Risk assessment for particular lending positions\n * - Determining borrowing power from subset of collateral\n *\n * @param params - Configuration object for asset health computation\n * @returns Total weighted asset value in USD for the specified banks\n *\n * @example\n * ```typescript\n * // Calculate asset value for SOL and USDC collateral positions\n * const assetValue = computeAssetHealthComponent({\n *   balances: account.balances,\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   assetBanks: [solBankAddress, usdcBankAddress],\n *   marginRequirement: MarginRequirementType.Initial,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n * });\n * ```\n */\nexport function computeAssetHealthComponent(params: ComputeAssetHealthComponentParams): BigNumber {\n  const {\n    balances,\n    banksMap,\n    oraclePricesByBank,\n    assetBanks,\n    marginRequirement,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  } = params;\n\n  const assetSet = new Set(assetBanks.map((b) => b.toBase58()));\n\n  // Filter to only include asset balances\n  const activeAssetBalances = balances.filter((b) => b.active && assetSet.has(b.bankPk.toBase58()));\n\n  const { assets } = computeHealthComponentsFromBalances({\n    activeBalances: activeAssetBalances,\n    marginRequirement,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  });\n\n  return assets;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { BalanceType } from \"../../types\";\n\n/**\n * Balance Helper Utilities\n * ========================\n */\n\n/**\n * Creates an empty (inactive) balance object for a specific bank.\n *\n * This is useful for initializing balance slots or representing non-existent positions.\n * All numeric fields are set to zero and the balance is marked as inactive.\n *\n * @param bankPk - The public key of the bank this balance is associated with\n * @returns An inactive balance object with all values set to zero\n *\n * @example\n * ```typescript\n * const emptyBalance = createEmptyBalance(bankAddress);\n * // emptyBalance.active === false\n * // emptyBalance.assetShares.eq(0) === true\n * ```\n */\nexport function createEmptyBalance(bankPk: PublicKey): BalanceType {\n  const balance: BalanceType = {\n    active: false,\n    bankPk,\n    assetShares: new BigNumber(0),\n    liabilityShares: new BigNumber(0),\n    emissionsOutstanding: new BigNumber(0),\n    lastUpdate: 0,\n  };\n\n  return balance;\n}\n\n/**\n * Filters an array of balances to return only active positions.\n *\n * Active balances are positions that currently have assets or liabilities.\n * Inactive balances are empty slots available for new positions.\n *\n * @param balances - Array of account balances to filter\n * @returns Array containing only balances where `active === true`\n *\n * @example\n * ```typescript\n * const activePositions = getActiveBalances(account.balances);\n * // Returns only balances with actual assets or liabilities\n * ```\n */\nexport function getActiveBalances(balances: BalanceType[]): BalanceType[] {\n  return balances.filter((b) => b.active);\n}\n\n/**\n * Retrieves the balance for a specific bank address from an array of balances.\n *\n * If an active balance is found for the bank, it is returned. Otherwise, an empty\n * (inactive) balance is created for that bank address.\n *\n * This function is safe to use without null checks - it always returns a valid balance object.\n *\n * @param bankAddress - The public key of the bank to look up\n * @param balances - Array of account balances to search\n * @returns The active balance if found, otherwise a newly created empty balance\n *\n * @example\n * ```typescript\n * const usdcBalance = getBalance(usdcBankAddress, account.balances);\n * if (usdcBalance.active) {\n *   // User has a USDC position\n *   console.log(\"Assets:\", usdcBalance.assetShares);\n * } else {\n *   // User has no USDC position (empty balance returned)\n * }\n * ```\n */\nexport function getBalance(bankAddress: PublicKey, balances: BalanceType[]): BalanceType {\n  return (\n    balances.filter((b) => b.active).find((b) => b.bankPk.equals(bankAddress)) ??\n    createEmptyBalance(bankAddress)\n  );\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { MarginfiAccountType, BalanceType, MarginRequirementType } from \"../../types\";\n\nimport { getBalance } from \"./balance-helper.utils\";\nimport { computeBalanceUsdValue, computeQuantityUi } from \"./balance-value-compute.utils\";\nimport { computeHealthComponentsFromCache } from \"./health-compute.utils\";\n\nimport {\n  BankType,\n  computeInterestRates,\n  getAssetWeight,\n  getLiabilityWeight,\n} from \"~/services/bank\";\nimport { getPrice, OraclePrice, PriceBias } from \"~/services/price\";\nimport { aprToApy, shortenAddress } from \"~/utils\";\n\n/**\n * Account-Level Metrics\n * ====================\n */\n\nexport function computeAccountValue(marginfiAccount: MarginfiAccountType): BigNumber {\n  const { assets, liabilities } = computeHealthComponentsFromCache(\n    marginfiAccount,\n    MarginRequirementType.Equity\n  );\n  return assets.minus(liabilities);\n}\n\n/**\n * Configuration for computing net APY\n */\nexport interface ComputeNetApyParams {\n  /** The marginfi account to compute net APY for */\n  marginfiAccount: MarginfiAccountType;\n  /** Active balances in the account */\n  activeBalances: BalanceType[];\n  /** Map of banks by their address */\n  banksMap: Map<string, BankType>;\n  /** Map of oracle prices by bank address */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }\n  >;\n}\n\n/**\n * Computes the net APY (Annual Percentage Yield) for a marginfi account.\n *\n * The net APY represents the combined annualized return from all lending and borrowing\n * positions in the account, weighted by their USD values.\n *\n * **Calculation:**\n * 1. Computes weighted APR contributions from each position:\n *    - **Lending positions**: Positive contribution (earning interest)\n *    - **Borrowing positions**: Negative contribution (paying interest)\n * 2. Weights each position by its USD value relative to total account value\n * 3. Converts the final APR to APY (accounts for compounding)\n *\n * **Example:**\n * - Account has $1000 net value\n * - $800 lent at 5% APR = +4% contribution to net APR\n * - $600 borrowed at 3% APR = -1.8% contribution to net APR\n * - Net APR = +2.2%, converted to APY\n *\n * @param params - Configuration object for net APY computation\n * @returns Net APY as a decimal (e.g., 0.05 for 5% APY)\n *\n * @example\n * ```typescript\n * const netApy = computeNetApy({\n *   marginfiAccount: account,\n *   activeBalances: account.balances.filter(b => b.active),\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n * });\n * console.log(`Net APY: ${(netApy * 100).toFixed(2)}%`);\n * ```\n */\nexport function computeNetApy(params: ComputeNetApyParams): number {\n  const {\n    marginfiAccount,\n    activeBalances,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  } = params;\n\n  const { assets, liabilities } = computeHealthComponentsFromCache(\n    marginfiAccount,\n    MarginRequirementType.Equity\n  );\n  const totalUsdValue = assets.minus(liabilities);\n  const apr = activeBalances\n    .reduce((weightedApr, balance) => {\n      const bankKey = balance.bankPk.toBase58();\n      const bank = banksMap.get(bankKey);\n      if (!bank) {\n        console.warn(\n          `Bank ${shortenAddress(balance.bankPk)} not found, excluding from APY computation`\n        );\n        return weightedApr;\n      }\n\n      const oraclePrice = oraclePricesByBank.get(bankKey);\n      if (!oraclePrice) {\n        console.warn(\n          `Price info for bank ${shortenAddress(balance.bankPk)} not found, excluding from APY computation`\n        );\n        return weightedApr;\n      }\n\n      const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankKey);\n      const activeEmodeWeights = activeEmodeWeightsByBank?.get(bankKey);\n\n      return weightedApr\n        .minus(\n          computeInterestRates(bank)\n            .borrowingRate.times(\n              computeBalanceUsdValue({\n                balance,\n                bank,\n                oraclePrice,\n                marginRequirement: MarginRequirementType.Equity,\n              }).liabilities\n            )\n            .div(totalUsdValue.isEqualTo(0) ? 1 : totalUsdValue)\n        )\n        .plus(\n          computeInterestRates(bank)\n            .lendingRate.times(\n              computeBalanceUsdValue({\n                balance,\n                bank,\n                oraclePrice,\n                marginRequirement: MarginRequirementType.Equity,\n                assetShareValueMultiplier,\n                activeEmodeWeights,\n              }).assets\n            )\n            .div(totalUsdValue.isEqualTo(0) ? 1 : totalUsdValue)\n        );\n    }, new BigNumber(0))\n    .toNumber();\n\n  return aprToApy(apr);\n}\n\n/**\n * Configuration for computing liquidation price for a bank position\n */\nexport interface ComputeLiquidationPriceForBankParams {\n  /** The bank to compute liquidation price for */\n  bank: BankType;\n  /** Oracle price data for the bank */\n  oraclePrice: OraclePrice;\n  /** The marginfi account containing the position */\n  marginfiAccount: MarginfiAccountType;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n  /** Optional emode weight overrides */\n  activeEmodeWeights?: {\n    assetWeightInit: BigNumber;\n    assetWeightMaint: BigNumber;\n  };\n}\n\n/**\n * Computes the liquidation price for a specific bank position.\n *\n * The liquidation price is the asset price at which the account would be liquidated\n * based on the current position in this bank and all other positions in the account.\n *\n * **For lending (asset) positions:**\n * - Price where asset value (weighted) + other assets = liabilities\n * - Lower prices mean less collateral value → liquidation risk\n *\n * **For borrowing (liability) positions:**\n * - Price where assets = liability value (weighted) + other liabilities\n * - Higher prices mean more debt value → liquidation risk\n *\n * Uses maintenance margin requirements and includes oracle price confidence bands.\n *\n * @param params - Configuration object for liquidation price computation\n * @returns Liquidation price in token terms, or null if:\n *   - Position is inactive\n *   - Account has no liabilities (for lending positions)\n *   - Calculation results in invalid number (NaN, negative, infinite)\n *\n * @example\n * ```typescript\n * // Lending position: at what SOL price would I get liquidated?\n * const liqPrice = computeLiquidationPriceForBank({\n *   bank: solBank,\n *   oraclePrice: solOraclePrice,\n *   marginfiAccount: account,\n * });\n * if (liqPrice) {\n *   console.log(`Liquidation at $${liqPrice.toFixed(2)} per SOL`);\n * }\n * ```\n */\nexport function computeLiquidationPriceForBank(\n  params: ComputeLiquidationPriceForBankParams\n): number | null {\n  const { bank, oraclePrice, marginfiAccount, assetShareValueMultiplier, activeEmodeWeights } =\n    params;\n\n  const balance = getBalance(bank.address, marginfiAccount.balances);\n\n  if (!balance.active) return null;\n\n  const { assets: assetBank, liabilities: liabilitiesBank } = computeBalanceUsdValue({\n    balance,\n    bank,\n    oraclePrice,\n    marginRequirement: MarginRequirementType.Maintenance,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n  });\n\n  const { assets: assetsAccount, liabilities: liabilitiesAccount } =\n    computeHealthComponentsFromCache(marginfiAccount, MarginRequirementType.Maintenance);\n\n  const assets = assetsAccount.minus(assetBank);\n  const liabilities = liabilitiesAccount.minus(liabilitiesBank);\n\n  const isLending = balance.liabilityShares.isZero();\n  const { assets: assetQuantityUi, liabilities: liabQuantitiesUi } = computeQuantityUi(\n    balance,\n    bank\n  );\n\n  let liquidationPrice: BigNumber;\n  if (isLending) {\n    if (liabilities.eq(0)) return null;\n\n    const assetWeight = getAssetWeight({\n      bank,\n      marginRequirement: MarginRequirementType.Maintenance,\n      oraclePrice,\n      assetShareValueMultiplier,\n      activeEmodeWeights,\n    });\n    const priceConfidence = getPrice(oraclePrice, PriceBias.None, false).minus(\n      getPrice(oraclePrice, PriceBias.Lowest, false)\n    );\n    liquidationPrice = liabilities\n      .minus(assets)\n      .div(assetQuantityUi.times(assetWeight))\n      .plus(priceConfidence);\n  } else {\n    const liabWeight = getLiabilityWeight(bank.config, MarginRequirementType.Maintenance);\n    const priceConfidence = getPrice(oraclePrice, PriceBias.Highest, false).minus(\n      getPrice(oraclePrice, PriceBias.None, false)\n    );\n    liquidationPrice = assets\n      .minus(liabilities)\n      .div(liabQuantitiesUi.times(liabWeight))\n      .minus(priceConfidence);\n  }\n  if (liquidationPrice.isNaN() || liquidationPrice.lt(0) || !liquidationPrice.isFinite())\n    return null;\n  return liquidationPrice.toNumber();\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { BalanceType } from \"../../types\";\n\nimport { computeQuantity } from \"./balance-value-compute.utils\";\n\nimport { BankType } from \"~/services/bank\";\n\n/**\n * Emissions Calculations\n * =====================\n */\n\n/**\n * Computes the emissions accrued for a balance since its last update.\n *\n * This function calculates emissions based on:\n * - The time elapsed since the balance was last updated\n * - The bank's emissions rate (tokens per year)\n * - Whether lending or borrowing emissions are active\n * - The balance's asset or liability amount\n *\n * The calculation is capped by the bank's remaining emissions.\n *\n * @deprecated This function is deprecated. Emissions are now distributed offchain and should not be used in new code.\n *\n * @param balance - The account balance to compute emissions for\n * @param bank - The bank configuration containing emissions parameters\n * @param currentTimestamp - Current timestamp in seconds (Unix time)\n * @returns Newly accrued emissions since last update (not yet claimed)\n *\n * @example\n * ```typescript\n * // Calculate emissions accrued up to now\n * const emissions = computeClaimedEmissions(\n *   balance,\n *   bank,\n *   Date.now() / 1000\n * );\n * ```\n */\nexport function computeClaimedEmissions(\n  balance: BalanceType,\n  bank: BankType,\n  currentTimestamp: number\n): BigNumber {\n  const lendingActive = bank.emissionsActiveLending;\n  const borrowActive = bank.emissionsActiveBorrowing;\n\n  const { assets, liabilities } = computeQuantity(balance, bank);\n\n  let balanceAmount: BigNumber | null = null;\n\n  if (lendingActive) {\n    balanceAmount = assets;\n  } else if (borrowActive) {\n    balanceAmount = liabilities;\n  }\n\n  if (balanceAmount) {\n    const lastUpdate = balance.lastUpdate;\n    const period = new BigNumber(currentTimestamp - lastUpdate);\n    const emissionsRate = new BigNumber(bank.emissionsRate);\n    const emissions = period\n      .times(balanceAmount)\n      .times(emissionsRate)\n      .div(31_536_000 * Math.pow(10, bank.mintDecimals));\n    const emissionsReal = BigNumber.min(emissions, new BigNumber(bank.emissionsRemaining));\n\n    return emissionsReal;\n  }\n\n  return new BigNumber(0);\n}\n\n/**\n * Computes the total outstanding emissions for a balance (claimed + unclaimed).\n *\n * @deprecated This function is deprecated. Emissions are now distributed offchain and should not be used in new code.\n *\n * @param balance - The account balance to compute emissions for\n * @param bank - The bank configuration containing emissions parameters\n * @returns Total outstanding emissions (claimed from balance + newly accrued unclaimed)\n */\nexport function computeTotalOutstandingEmissions(balance: BalanceType, bank: BankType): BigNumber {\n  const claimedEmissions = balance.emissionsOutstanding;\n  const unclaimedEmissions = computeClaimedEmissions(balance, bank, Date.now() / 1000);\n  return claimedEmissions.plus(unclaimedEmissions);\n}\n","import {\n  Connection,\n  LAMPORTS_PER_SOL,\n  PublicKey,\n  STAKE_CONFIG_ID,\n  SYSVAR_CLOCK_PUBKEY,\n  SystemProgram,\n  StakeProgram,\n  Transaction,\n  TransactionInstruction,\n  SYSVAR_RENT_PUBKEY,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport { BN } from \"bn.js\";\n\nimport { TOKEN_PROGRAM_ID } from \"../spl\";\n\nimport {\n  MPL_METADATA_PROGRAM_ID,\n  SINGLE_POOL_PROGRAM_ID,\n  STAKE_PROGRAM_ID,\n  SYSTEM_PROGRAM_ID,\n  SYSVAR_CLOCK_ID,\n  SYSVAR_RENT_ID,\n  SYSVAR_STAKE_HISTORY_ID,\n} from \"~/constants\";\n\ninterface AccountMeta {\n  pubkey: PublicKey;\n  isSigner: boolean;\n  isWritable: boolean;\n}\n\n// Instruction type enum\nenum SinglePoolInstructionType {\n  InitializePool = 0,\n  ReplenishPool,\n  DepositStake,\n  WithdrawStake,\n  CreateTokenMetadata,\n  UpdateTokenMetadata,\n  InitializeOnRamp,\n}\n\nconst SinglePoolInstruction = {\n  initializePool: (voteAccount: PublicKey): TransactionInstruction => {\n    const pool = findPoolAddress(voteAccount);\n    const stake = findPoolStakeAddress(pool);\n    const mint = findPoolMintAddress(pool);\n    const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n    const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: voteAccount, isSigner: false, isWritable: false },\n        { pubkey: pool, isSigner: false, isWritable: true },\n        { pubkey: stake, isSigner: false, isWritable: true },\n        { pubkey: mint, isSigner: false, isWritable: true },\n        { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n        { pubkey: mintAuthority, isSigner: false, isWritable: false },\n        { pubkey: SYSVAR_RENT_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n        { pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      Buffer.from([SinglePoolInstructionType.InitializePool])\n    );\n  },\n\n  initializeOnRamp: (pool: PublicKey): TransactionInstruction => {\n    const onRamp = findPoolOnRampAddress(pool);\n    const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: pool, isSigner: false, isWritable: false },\n        { pubkey: onRamp, isSigner: false, isWritable: true },\n        { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n        { pubkey: SYSVAR_RENT_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      Buffer.from([SinglePoolInstructionType.InitializeOnRamp])\n    );\n  },\n\n  depositStake: async (\n    pool: PublicKey,\n    userStakeAccount: PublicKey,\n    userTokenAccount: PublicKey,\n    userLamportAccount: PublicKey\n  ): Promise<TransactionInstruction> => {\n    const stake = findPoolStakeAddress(pool);\n    const onRamp = findPoolOnRampAddress(pool);\n    const mint = findPoolMintAddress(pool);\n    const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n    const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: pool, isSigner: false, isWritable: false },\n        { pubkey: stake, isSigner: false, isWritable: true },\n        { pubkey: onRamp, isSigner: false, isWritable: false },\n        { pubkey: mint, isSigner: false, isWritable: true },\n        { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n        { pubkey: mintAuthority, isSigner: false, isWritable: false },\n        { pubkey: userStakeAccount, isSigner: false, isWritable: true },\n        { pubkey: userTokenAccount, isSigner: false, isWritable: true },\n        { pubkey: userLamportAccount, isSigner: false, isWritable: true },\n        { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n        { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      Buffer.from([SinglePoolInstructionType.DepositStake])\n    );\n  },\n\n  withdrawStake: async (\n    pool: PublicKey,\n    userStakeAccount: PublicKey,\n    userStakeAuthority: PublicKey,\n    userTokenAccount: PublicKey,\n    tokenAmount: BigNumber\n  ): Promise<TransactionInstruction> => {\n    const stake = findPoolStakeAddress(pool);\n    const onRamp = findPoolOnRampAddress(pool);\n    const mint = findPoolMintAddress(pool);\n    const stakeAuthority = findPoolStakeAuthorityAddress(pool);\n    const mintAuthority = findPoolMintAuthorityAddress(pool);\n\n    // Try using BigInt for more precise conversion\n    const rawAmount = BigInt(tokenAmount.multipliedBy(1e9).toString());\n\n    const data = Buffer.concat([\n      Buffer.from([SinglePoolInstructionType.WithdrawStake]),\n      userStakeAuthority.toBuffer(),\n      Buffer.from(new BN(rawAmount.toString()).toArray(\"le\", 8)),\n    ]);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: pool, isSigner: false, isWritable: false },\n        { pubkey: stake, isSigner: false, isWritable: true },\n        { pubkey: onRamp, isSigner: false, isWritable: false },\n        { pubkey: mint, isSigner: false, isWritable: true },\n        { pubkey: stakeAuthority, isSigner: false, isWritable: false },\n        { pubkey: mintAuthority, isSigner: false, isWritable: false },\n        { pubkey: userStakeAccount, isSigner: false, isWritable: true },\n        { pubkey: userTokenAccount, isSigner: false, isWritable: true },\n        { pubkey: SYSVAR_CLOCK_ID, isSigner: false, isWritable: false },\n        { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: STAKE_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      data\n    );\n  },\n\n  createTokenMetadata: async (\n    pool: PublicKey,\n    payer: PublicKey\n  ): Promise<TransactionInstruction> => {\n    const mint = findPoolMintAddress(pool);\n    const [mintAuthority, mplAuthority, mplMetadata] = await Promise.all([\n      findPoolMintAuthorityAddress(pool),\n      findPoolMplAuthorityAddress(pool),\n      findMplMetadataAddress(mint),\n    ]);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: pool, isSigner: false, isWritable: false },\n        { pubkey: mint, isSigner: false, isWritable: false },\n        { pubkey: mintAuthority, isSigner: false, isWritable: false },\n        { pubkey: mplAuthority, isSigner: false, isWritable: false },\n        { pubkey: payer, isSigner: true, isWritable: true },\n        { pubkey: mplMetadata, isSigner: false, isWritable: true },\n        { pubkey: MPL_METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n        { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      Buffer.from([SinglePoolInstructionType.CreateTokenMetadata])\n    );\n  },\n\n  updateTokenMetadata: async (\n    voteAccount: PublicKey,\n    authorizedWithdrawer: PublicKey,\n    tokenName: string,\n    tokenSymbol: string,\n    tokenUri: string = \"\"\n  ): Promise<TransactionInstruction> => {\n    if (tokenName.length > 32) {\n      throw new Error(\"maximum token name length is 32 characters\");\n    }\n    if (tokenSymbol.length > 10) {\n      throw new Error(\"maximum token symbol length is 10 characters\");\n    }\n    if (tokenUri.length > 200) {\n      throw new Error(\"maximum token uri length is 200 characters\");\n    }\n\n    const pool = findPoolAddress(voteAccount);\n    const [mint, mplAuthority] = await Promise.all([\n      findPoolMintAddress(pool),\n      findPoolMplAuthorityAddress(pool),\n    ]);\n    const mplMetadata = await findMplMetadataAddress(mint);\n\n    const data = Buffer.concat([\n      Buffer.from([SinglePoolInstructionType.UpdateTokenMetadata]),\n      Buffer.from(new Uint32Array([tokenName.length]).buffer),\n      Buffer.from(tokenName),\n      Buffer.from(new Uint32Array([tokenSymbol.length]).buffer),\n      Buffer.from(tokenSymbol),\n      Buffer.from(new Uint32Array([tokenUri.length]).buffer),\n      Buffer.from(tokenUri),\n    ]);\n\n    return createTransactionInstruction(\n      SINGLE_POOL_PROGRAM_ID,\n      [\n        { pubkey: voteAccount, isSigner: false, isWritable: false },\n        { pubkey: pool, isSigner: false, isWritable: false },\n        { pubkey: mplAuthority, isSigner: false, isWritable: false },\n        { pubkey: authorizedWithdrawer, isSigner: true, isWritable: false },\n        { pubkey: mplMetadata, isSigner: false, isWritable: true },\n        { pubkey: MPL_METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n      ],\n      data\n    );\n  },\n};\n\nconst createTransactionInstruction = (\n  programId: PublicKey,\n  keys: AccountMeta[],\n  data: Buffer\n): TransactionInstruction => {\n  return {\n    programId,\n    keys,\n    data,\n  };\n};\n\nconst findPda = (\n  baseAddress: PublicKey,\n  prefix: string,\n  programId: PublicKey = SINGLE_POOL_PROGRAM_ID\n): PublicKey => {\n  const [pda] = PublicKey.findProgramAddressSync(\n    [Buffer.from(prefix), baseAddress.toBuffer()],\n    programId\n  );\n  return pda;\n};\n\nconst findPoolMintAddressByVoteAccount = (voteAccountAddress: PublicKey): PublicKey =>\n  findPda(findPoolAddress(voteAccountAddress), \"mint\");\nconst findPoolAddress = (voteAccountAddress: PublicKey): PublicKey =>\n  findPda(voteAccountAddress, \"pool\");\nconst findPoolMintAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"mint\");\nconst findPoolStakeAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"stake\");\nconst findPoolStakeAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n  findPda(poolAddress, \"stake_authority\");\nconst findPoolMintAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n  findPda(poolAddress, \"mint_authority\");\nconst findPoolMplAuthorityAddress = (poolAddress: PublicKey): PublicKey =>\n  findPda(poolAddress, \"mpl_authority\");\nconst findPoolOnRampAddress = (poolAddress: PublicKey): PublicKey => findPda(poolAddress, \"onramp\");\n\nconst findMplMetadataAddress = async (poolMintAddress: PublicKey): Promise<PublicKey> => {\n  const [pda] = PublicKey.findProgramAddressSync(\n    [Buffer.from(\"metadata\"), MPL_METADATA_PROGRAM_ID.toBuffer(), poolMintAddress.toBuffer()],\n    MPL_METADATA_PROGRAM_ID\n  );\n  return pda;\n};\n\nconst SINGLE_POOL_ACCOUNT_SIZE = BigInt(33);\nconst STAKE_ACCOUNT_SIZE = BigInt(200);\nconst MINT_SIZE = BigInt(82);\n\nasync function initializeStakedPoolTx(\n  connection: Connection,\n  payer: PublicKey,\n  voteAccountAddress: PublicKey\n) {\n  const instructions = await initializeStakedPoolIxs(connection, payer, voteAccountAddress);\n  const tx = new Transaction().add(...instructions);\n  return tx;\n}\n\nasync function initializeStakedPoolIxs(\n  connection: Connection,\n  payer: PublicKey,\n  voteAccountAddress: PublicKey\n) {\n  const poolAddress = findPoolAddress(voteAccountAddress);\n\n  const stakeAddress = findPoolStakeAddress(poolAddress);\n  const mintAddress = findPoolMintAddress(poolAddress);\n  const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n  // get min rent\n  const [poolRent, stakeRent, mintRent, minimumDelegationObj] = await Promise.all([\n    connection.getMinimumBalanceForRentExemption(Number(SINGLE_POOL_ACCOUNT_SIZE), \"confirmed\"),\n    connection.getMinimumBalanceForRentExemption(Number(STAKE_ACCOUNT_SIZE), \"confirmed\"),\n    connection.getMinimumBalanceForRentExemption(Number(MINT_SIZE), \"confirmed\"),\n    connection.getStakeMinimumDelegation(),\n  ]);\n\n  const minimumDelegation = minimumDelegationObj.value;\n\n  const instructions: TransactionInstruction[] = [];\n\n  // instructions\n  instructions.push(\n    SystemProgram.transfer({ fromPubkey: payer, toPubkey: poolAddress, lamports: poolRent })\n  );\n  instructions.push(\n    SystemProgram.transfer({\n      fromPubkey: payer,\n      toPubkey: stakeAddress,\n      lamports: stakeRent + minimumDelegation + LAMPORTS_PER_SOL * 1,\n    })\n  );\n  instructions.push(\n    SystemProgram.transfer({ fromPubkey: payer, toPubkey: onRampAddress, lamports: stakeRent })\n  );\n  instructions.push(\n    SystemProgram.transfer({ fromPubkey: payer, toPubkey: mintAddress, lamports: mintRent })\n  );\n\n  instructions.push(SinglePoolInstruction.initializePool(voteAccountAddress));\n  instructions.push(SinglePoolInstruction.initializeOnRamp(poolAddress));\n  instructions.push(await SinglePoolInstruction.createTokenMetadata(poolAddress, payer));\n\n  return instructions;\n}\n\nconst createAccountIx = (\n  from: PublicKey,\n  newAccount: PublicKey,\n  lamports: number,\n  space: number,\n  programAddress: PublicKey\n) => {\n  const data = Buffer.concat([\n    Buffer.from([0]), // Assuming the first byte is an instruction type or similar\n    Buffer.from(new BN(lamports).toArray(\"le\", 8)),\n    Buffer.from(new BN(space).toArray(\"le\", 8)),\n    programAddress.toBuffer(),\n  ]);\n\n  const accounts = [\n    { pubkey: from, isSigner: true, isWritable: true },\n    { pubkey: newAccount, isSigner: true, isWritable: true },\n  ];\n\n  return createTransactionInstruction(SYSTEM_PROGRAM_ID, accounts, data);\n};\n\nconst createPoolOnrampIx = (voteAccount: PublicKey): TransactionInstruction => {\n  const poolAccount = findPoolAddress(voteAccount);\n  const onRampAccount = findPoolOnRampAddress(poolAccount);\n  const poolStakeAuthority = findPoolStakeAuthorityAddress(poolAccount);\n\n  const keys = [\n    { pubkey: poolAccount, isSigner: false, isWritable: false },\n    { pubkey: onRampAccount, isSigner: false, isWritable: true },\n    { pubkey: poolStakeAuthority, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n    { pubkey: StakeProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  // TODO don't hard code the instruction index? (or why not, it's not gna change is it?)\n  const data = Buffer.from(Uint8Array.of(6));\n\n  return new TransactionInstruction({\n    keys,\n    programId: SINGLE_POOL_PROGRAM_ID,\n    data,\n  });\n};\n\nconst replenishPoolIx = (voteAccount: PublicKey): TransactionInstruction => {\n  const poolAccount = findPoolAddress(voteAccount);\n  const stakePool = findPoolStakeAddress(poolAccount);\n  const onRampPool = findPoolOnRampAddress(poolAccount);\n  const authority = findPoolStakeAuthorityAddress(poolAccount);\n\n  const keys = [\n    { pubkey: voteAccount, isSigner: false, isWritable: false },\n    { pubkey: poolAccount, isSigner: false, isWritable: false },\n    { pubkey: stakePool, isSigner: false, isWritable: true },\n    { pubkey: onRampPool, isSigner: false, isWritable: true },\n    { pubkey: authority, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n    { pubkey: SYSVAR_STAKE_HISTORY_ID, isSigner: false, isWritable: false },\n    { pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false },\n    { pubkey: StakeProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  // TODO don't hard code the instruction index? (or why not, it's not gna change is it?)\n  const data = Buffer.from(Uint8Array.of(1));\n\n  return createTransactionInstruction(SINGLE_POOL_PROGRAM_ID, keys, data);\n};\n\nexport {\n  SinglePoolInstruction,\n  initializeStakedPoolIxs,\n  initializeStakedPoolTx,\n  findPoolAddress,\n  findPoolMintAddress,\n  findPoolStakeAddress,\n  findPoolStakeAuthorityAddress,\n  findPoolMintAuthorityAddress,\n  findPoolMplAuthorityAddress,\n  findMplMetadataAddress,\n  findPoolOnRampAddress,\n  findPoolMintAddressByVoteAccount,\n  createAccountIx,\n  createPoolOnrampIx,\n  replenishPoolIx,\n};\n","import { BorshInstructionCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { BalanceType, MarginfiAccountType } from \"../../types\";\n\nimport {\n  BankType,\n  getAssetShares,\n  getLiabilityShares,\n  AssetTag,\n  OracleSetup,\n} from \"~/services/bank\";\nimport { MarginfiProgram } from \"~/types\";\nimport { composeRemainingAccounts } from \"~/utils\";\nimport { findPoolAddress, findPoolOnRampAddress } from \"~/vendor/single-spl-pool\";\n\n/**\n * Transaction Projection & Health Check Utilities\n * ===============================================\n */\n\n/**\n * Computes the set of banks to include in health check account metas.\n *\n * This function determines which banks should be included when performing health checks\n * by considering active balances, mandatory banks, and exclusions. It intelligently\n * manages the 16-balance limit by:\n * - Including all active banks (excluding any in the exclusion list)\n * - Reserving inactive slots for mandatory banks that aren't currently active\n *\n * @param account - The marginfi account whose balances are evaluated\n * @param banksMap - Map of bank addresses to bank data\n * @param mandatoryBanks - Banks that must be included (e.g., for pending transactions)\n * @param excludedBanks - Banks to exclude from health checks\n * @returns Array of bank objects to include in health check\n *\n * @example\n * ```typescript\n * const healthCheckBanks = computeHealthCheckAccounts({\n *   account,\n *   banksMap,\n *   mandatoryBanks: [newBankToDeposit], // Not active yet but will be\n *   excludedBanks: [closingBank],       // Being closed in this transaction\n * });\n * ```\n */\nexport function computeHealthCheckAccounts({\n  account,\n  banksMap,\n  mandatoryBanks = [],\n  excludedBanks = [],\n}: {\n  account: MarginfiAccountType;\n  banksMap: Map<string, BankType>;\n  mandatoryBanks?: PublicKey[];\n  excludedBanks?: PublicKey[];\n}): BankType[] {\n  const balances = account.balances;\n  const activeBalances = balances.filter((b) => b.active);\n\n  const mandatoryBanksSet = new Set(mandatoryBanks.map((b) => b.toBase58()));\n  const excludedBanksSet = new Set(excludedBanks.map((b) => b.toBase58()));\n  const activeBanks = new Set(activeBalances.map((b) => b.bankPk.toBase58()));\n  const banksToAdd = new Set([...mandatoryBanksSet].filter((x) => !activeBanks.has(x)));\n\n  let slotsToKeep = banksToAdd.size;\n  const projectedActiveBanks = balances\n    .filter((balance) => {\n      if (balance.active) {\n        return !excludedBanksSet.has(balance.bankPk.toBase58());\n      } else if (slotsToKeep > 0) {\n        slotsToKeep--;\n        return true;\n      } else {\n        return false;\n      }\n    })\n    .map((balance) => {\n      if (balance.active) {\n        const bank = banksMap.get(balance.bankPk.toBase58());\n        if (!bank) throw Error(`Bank ${balance.bankPk.toBase58()} not found`);\n        return bank;\n      }\n      const newBankAddress = [...banksToAdd.values()][0];\n      banksToAdd.delete(newBankAddress);\n      const bank = banksMap.get(newBankAddress);\n      if (!bank) throw Error(`Bank ${newBankAddress} not found`);\n      return bank;\n    });\n\n  return projectedActiveBanks;\n}\n\n/**\n * Converts bank objects to health check account metas (public keys).\n *\n * This function generates the list of account public keys needed for health check\n * instructions. For each bank, it includes:\n * - The bank address\n * - The oracle address (if not default)\n * - Additional integration accounts:\n *   - Kamino: kamino reserve account\n *   - Drift: drift spot market account\n *\n * Optionally sorts accounts using `composeRemainingAccounts` to optimize transaction size.\n *\n * @param banksToInclude - Array of banks to include in health check\n * @param enableSorting - Whether to sort/optimize account order (default: true)\n * @param trailingBanks - Banks whose accounts are appended unsorted after the health pack\n *   (e.g., the withdrawn bank on withdraw-all, for the 1.9 rate-limiter price fetch)\n * @returns Flattened array of public keys for health check accounts\n *\n * @example\n * ```typescript\n * const healthAccounts = computeHealthAccountMetas({\n *   banksToInclude: [usdcBank, solBank, kaminoUsdcBank],\n * });\n * // Returns: [bank1, oracle1, bank2, oracle2, bank3, oracle3, kaminoReserve3, ...]\n * ```\n */\nexport function computeHealthAccountMetas({\n  banksToInclude,\n  enableSorting = true,\n  trailingBanks = [],\n}: {\n  banksToInclude: BankType[];\n  enableSorting?: boolean;\n  trailingBanks?: BankType[];\n}): PublicKey[] {\n  const wrapperFn = enableSorting\n    ? composeRemainingAccounts\n    : (banksAndOracles: PublicKey[][]) => banksAndOracles.flat();\n\n  const accounts = wrapperFn(banksToInclude.map(computeBankRiskAccountKeys));\n\n  // Trailing banks are appended AFTER the sorted health pack so the risk engine's strict\n  // in-order matching of active balances never consumes them (unconsumed trailing accounts\n  // are ignored by both the 1.8 and 1.9 programs). Used for withdraw-all: the withdrawn\n  // bank's balance is closed by the instruction so it must not sit inside the health pack,\n  // but the 1.9 rate-limiter/receivership price fetch searches the whole slice for the\n  // bank key followed by its oracle accounts.\n  for (const bank of trailingBanks) {\n    accounts.push(...computeBankRiskAccountKeys(bank));\n  }\n\n  return accounts;\n}\n\n/**\n * Builds the ordered account keys the program expects for a single bank in a risk/health\n * remaining-accounts slice: bank, oracle, then per-asset-tag extras.\n */\nfunction computeBankRiskAccountKeys(bank: BankType): PublicKey[] {\n  let keys = [];\n  if (bank.oracleKey.equals(PublicKey.default)) {\n    keys = [bank.address];\n  } else {\n    keys = [bank.address, bank.oracleKey];\n  }\n\n  if (\n    bank.config.assetTag === AssetTag.KAMINO ||\n    bank.config.assetTag === AssetTag.DRIFT ||\n    bank.config.assetTag === AssetTag.SOLEND ||\n    bank.config.assetTag === AssetTag.JUPLEND\n  ) {\n    keys.push(bank.config.oracleKeys[1]);\n  }\n\n  // The program computes these setups' price from an extra on-chain account (Marinade State /\n  // SPL stake pool / Exponent vault), so that account must be included in the bank's\n  // health-check accounts. Plain banks store it in oracleKeys[1]; the Kamino/Juplend variants\n  // keep their venue account in oracleKeys[1] (pushed by the assetTag branch above) and store\n  // the pricing account in oracleKeys[2].\n  switch (bank.config.oracleSetup) {\n    case OracleSetup.PythMSOL:\n    case OracleSetup.PythLST:\n    case OracleSetup.PTPyth:\n      keys.push(bank.config.oracleKeys[1]);\n      break;\n    case OracleSetup.KaminoMSOL:\n    case OracleSetup.JuplendMSOL:\n    case OracleSetup.KaminoLST:\n    case OracleSetup.JuplendLST:\n      keys.push(bank.config.oracleKeys[2]);\n      break;\n  }\n\n  if (bank.config.assetTag === AssetTag.STAKED) {\n    keys.push(bank.config.oracleKeys[1], bank.config.oracleKeys[2]);\n    // 0.1.9 SVSP transition: the 1.9 program requires the pool's on-ramp as a 4th staked\n    // risk account. The canonical source is oracle_keys[3], written by the permissionless\n    // backfill (and by add_pool_permissionless for new banks) — nothing writes it on 1.8,\n    // so a non-default key implies 1.9 is live. If the on-ramp pricing flag (bank flags\n    // bit 10) is set before the key is backfilled, the program derives the on-ramp from\n    // the validator vote account, so we do the same as a fallback.\n    const onrampKey = bank.config.oracleKeys[3];\n    if (onrampKey && !onrampKey.equals(PublicKey.default)) {\n      keys.push(onrampKey);\n    } else if (\n      bank.stakedOracleUsesOnramp &&\n      bank.stakedIntegrationAccounts &&\n      !bank.stakedIntegrationAccounts.validatorVoteAccount.equals(PublicKey.default)\n    ) {\n      const pool = findPoolAddress(bank.stakedIntegrationAccounts.validatorVoteAccount);\n      keys.push(findPoolOnRampAddress(pool));\n    }\n  }\n\n  return keys;\n}\n\n/**\n * Projects which banks will be active after a series of instructions execute.\n *\n * This function simulates instruction execution to determine which bank positions\n * will be active (non-zero) after the transaction completes. It's used to optimize\n * health check account inclusion by predicting which banks are relevant.\n *\n * **Note**: This does NOT simulate Cross-Program Invocations (CPI). Only direct\n * marginfi instructions are considered. Instructions operating on a different\n * marginfi account than `account` are ignored.\n *\n * Supported instructions:\n * - Deposits: `lendingAccountDeposit`, `kaminoDeposit`, `driftDeposit`, `solendDeposit`\n * - Borrows: `lendingAccountBorrow`\n * - Repays: `lendingAccountRepay`\n * - Withdrawals: `lendingAccountWithdraw`, `kaminoWithdraw`, `driftWithdraw`, `solendWithdraw`\n *\n * @param account - The marginfi account whose balances are projected\n * @param instructions - Instructions to simulate\n * @param program - Marginfi program for instruction decoding\n * @returns Array of bank public keys that will be active after instruction execution\n *\n * @example\n * ```typescript\n * const projectedBanks = computeProjectedActiveBanksNoCpi({\n *   account,\n *   instructions: [depositIx, borrowIx],\n *   program: marginfiProgram,\n * });\n * // Use projectedBanks for health check account selection\n * ```\n */\nexport function computeProjectedActiveBanksNoCpi({\n  account,\n  instructions,\n  program,\n}: {\n  account: MarginfiAccountType;\n  instructions: TransactionInstruction[];\n  program: MarginfiProgram;\n}): PublicKey[] {\n  const projectedBalances = [\n    ...account.balances.map((b) => ({ active: b.active, bankPk: b.bankPk })),\n  ];\n\n  for (let index = 0; index < instructions.length; index++) {\n    const ix = instructions[index];\n\n    if (!ix?.programId.equals(program.programId)) continue;\n\n    const borshCoder = new BorshInstructionCoder(program.idl);\n    const decoded = borshCoder.decode(ix.data, \"base58\");\n    if (!decoded) continue;\n\n    // All handled instructions share the account layout (group, marginfiAccount,\n    // authority, bank, ...). Skip instructions operating on a different marginfi\n    // account — e.g. transfer flows build ixs for two accounts in one set.\n    const ixMarginfiAccount = ix.keys[1]?.pubkey;\n    if (!ixMarginfiAccount?.equals(account.address)) continue;\n\n    const ixArgs = decoded.data as any;\n\n    switch (decoded.name) {\n      case \"lendingAccountBorrow\":\n      case \"kaminoDeposit\":\n      case \"driftDeposit\":\n      case \"solendDeposit\":\n      case \"lendingAccountDeposit\":\n      case \"juplendDeposit\": {\n        const targetBank = new PublicKey(ix?.keys[3].pubkey);\n        const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n        if (!targetBalance) {\n          const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n          if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n            throw Error(\"No inactive balance found\");\n          }\n\n          projectedBalances[firstInactiveBalanceIndex].active = true;\n          projectedBalances[firstInactiveBalanceIndex].bankPk = targetBank;\n        }\n        break;\n      }\n      case \"lendingAccountRepay\":\n      case \"kaminoWithdraw\":\n      case \"driftWithdraw\":\n      case \"solendWithdraw\":\n      case \"lendingAccountWithdraw\":\n      case \"juplendWithdraw\": {\n        const targetBank = new PublicKey(ix.keys[3].pubkey);\n        const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n        if (!targetBalance) {\n          throw Error(\n            `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n              decoded.name\n            }))`\n          );\n        }\n\n        // kaminoWithdraw packs withdraw-all as bit 0 of its `flags` arg since 0.1.9\n        const isKaminoWithdrawAll =\n          decoded.name === \"kaminoWithdraw\" && ((ixArgs.flags ?? 0) & 1) > 0;\n        if (ixArgs.repayAll || ixArgs.withdrawAll || isKaminoWithdrawAll) {\n          targetBalance.active = false;\n          targetBalance.bankPk = PublicKey.default;\n        }\n        break;\n      }\n      default: {\n        continue;\n      }\n    }\n  }\n\n  return projectedBalances.filter((b) => b.active).map((b) => b.bankPk);\n}\n\n/**\n * Computes projected balances after applying a series of instructions.\n *\n * Simulates how deposit/borrow/repay/withdraw instructions would change the account balances,\n * including both active/inactive state AND actual share amounts. This is more comprehensive\n * than `computeProjectedActiveBanksNoCpi` which only tracks active banks.\n *\n * **Note**: This does NOT simulate Cross-Program Invocations (CPI). Only direct\n * marginfi instructions are considered. Instructions operating on a different\n * marginfi account than `account` are ignored.\n *\n * **Integrated Protocols**: For Kamino/Drift deposits, the `assetShareValueMultiplierByBank`\n * is used to convert cToken amounts to actual asset quantities before computing shares.\n *\n * @param account - The marginfi account whose balances are projected\n * @param instructions - Instructions to simulate\n * @param program - Marginfi program for instruction decoding\n * @param banksMap - Map of bank addresses to bank data (needed for share value conversion)\n * @param assetShareValueMultiplierByBank - Multipliers for integrated protocols (Kamino, Drift)\n * @returns Object containing projected balances and lists of impacted banks\n * @returns projectedBalances - Balance array after instruction simulation\n * @returns impactedAssetsBanks - Bank addresses where asset shares changed\n * @returns impactedLiabilityBanks - Bank addresses where liability shares changed\n *\n * @example\n * ```typescript\n * const result = computeProjectedActiveBalancesNoCpi({\n *   account,\n *   instructions: [depositIx, borrowIx],\n *   program: marginfiProgram,\n *   banksMap,\n *   assetShareValueMultiplierByBank,\n * });\n * console.log(`Projected ${result.projectedBalances.length} balances`);\n * console.log(`Impacted ${result.impactedAssetsBanks.length} asset banks`);\n * ```\n */\nexport function computeProjectedActiveBalancesNoCpi({\n  account,\n  instructions,\n  program,\n  banksMap,\n  assetShareValueMultiplierByBank,\n}: {\n  account: MarginfiAccountType;\n  instructions: TransactionInstruction[];\n  program: MarginfiProgram;\n  banksMap: Map<string, BankType>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n}): {\n  projectedBalances: BalanceType[];\n  impactedAssetsBanks: string[];\n  impactedLiabilityBanks: string[];\n  /**\n   * Banks targeted by a withdraw instruction (partial or final). When the group\n   * rate limiter is enabled, the program requires a fresh oracle for these banks\n   * in the withdraw's remaining accounts — even if the position closes.\n   */\n  withdrawnBanks: string[];\n} {\n  // Deep clone all balances to avoid mutating original\n  const projectedBalances: BalanceType[] = account.balances.map((b) => ({\n    active: b.active,\n    bankPk: b.bankPk,\n    assetShares: new BigNumber(b.assetShares),\n    liabilityShares: new BigNumber(b.liabilityShares),\n    emissionsOutstanding: new BigNumber(b.emissionsOutstanding),\n    lastUpdate: b.lastUpdate,\n  }));\n\n  const impactedAssetsBanks = new Set<string>();\n  const impactedLiabilityBanks = new Set<string>();\n  const withdrawnBanks = new Set<string>();\n\n  for (let index = 0; index < instructions.length; index++) {\n    const ix = instructions[index];\n\n    // Skip non-marginfi instructions\n    if (!ix?.programId.equals(program.programId)) continue;\n\n    const borshCoder = new BorshInstructionCoder(program.idl);\n    const decoded = borshCoder.decode(ix.data, \"base58\");\n    if (!decoded) continue;\n\n    // All handled instructions share the account layout (group, marginfiAccount,\n    // authority, bank, ...). Skip instructions operating on a different marginfi\n    // account — e.g. transfer flows build ixs for two accounts in one set.\n    const ixMarginfiAccount = ix.keys[1]?.pubkey;\n    if (!ixMarginfiAccount?.equals(account.address)) continue;\n\n    const ixArgs = decoded.data as any;\n\n    switch (decoded.name) {\n      // Instructions that open or add to a position\n      case \"lendingAccountDeposit\":\n      case \"driftDeposit\":\n      case \"solendDeposit\":\n      case \"kaminoDeposit\":\n      case \"juplendDeposit\": {\n        // Bank is at index 3 for these instructions (group, account, authority, bank, ...)\n        const targetBank = new PublicKey(ix.keys[3].pubkey);\n        impactedAssetsBanks.add(targetBank.toBase58());\n\n        let targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n        if (!targetBalance) {\n          // Need to activate a new balance slot\n          const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n\n          if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n            throw Error(\"No inactive balance found\");\n          }\n\n          targetBalance = projectedBalances[firstInactiveBalanceIndex];\n          targetBalance.active = true;\n          targetBalance.bankPk = targetBank;\n          targetBalance.assetShares = new BigNumber(0);\n          targetBalance.liabilityShares = new BigNumber(0);\n        }\n\n        // Convert token amount to shares and add to asset shares\n        const depositTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n        const bank = banksMap.get(targetBank.toBase58());\n        if (!bank) {\n          throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n        }\n\n        const assetShareValueMultiplier =\n          assetShareValueMultiplierByBank.get(targetBank.toBase58()) ?? BigNumber(1);\n\n        // For integrated protocols: convert underlying token amount to cToken amount\n        // For regular banks: multiplier is 1, so this is a no-op\n        const cTokenAmount = depositTokenAmount.div(assetShareValueMultiplier);\n\n        // Convert cToken amount to shares using bank's share value\n        const depositShares = getAssetShares(bank, cTokenAmount);\n        targetBalance.assetShares = targetBalance.assetShares.plus(depositShares);\n        break;\n      }\n\n      case \"lendingAccountBorrow\": {\n        const targetBank = new PublicKey(ix.keys[3].pubkey);\n        impactedLiabilityBanks.add(targetBank.toBase58());\n\n        let targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n        if (!targetBalance) {\n          // Need to activate a new balance slot\n          const firstInactiveBalanceIndex = projectedBalances.findIndex((b) => !b.active);\n\n          if (firstInactiveBalanceIndex === -1 || !projectedBalances[firstInactiveBalanceIndex]) {\n            throw Error(\"No inactive balance found\");\n          }\n\n          targetBalance = projectedBalances[firstInactiveBalanceIndex];\n          targetBalance.active = true;\n          targetBalance.bankPk = targetBank;\n          targetBalance.assetShares = new BigNumber(0);\n          targetBalance.liabilityShares = new BigNumber(0);\n        }\n\n        // Convert token amount to shares and add to liability shares\n        const borrowTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n        const bank = banksMap.get(targetBank.toBase58());\n        if (!bank) {\n          throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n        }\n        const borrowShares = getLiabilityShares(bank, borrowTokenAmount);\n        targetBalance.liabilityShares = targetBalance.liabilityShares.plus(borrowShares);\n        break;\n      }\n\n      // Instructions that reduce or close positions\n      case \"lendingAccountRepay\": {\n        const targetBank = new PublicKey(ix.keys[3].pubkey);\n        impactedLiabilityBanks.add(targetBank.toBase58());\n\n        const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n        if (!targetBalance) {\n          throw Error(\n            `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n              decoded.name\n            }))`\n          );\n        }\n\n        // Check if this is a full repay\n        if (ixArgs.repayAll) {\n          targetBalance.liabilityShares = new BigNumber(0);\n\n          // If no assets and no liabilities, close the balance\n          if (targetBalance.assetShares.eq(0)) {\n            targetBalance.active = false;\n            targetBalance.bankPk = PublicKey.default;\n          }\n        } else {\n          // Convert token amount to shares and subtract from liability shares\n          const repayTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n          const bank = banksMap.get(targetBank.toBase58());\n          if (!bank) {\n            throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n          }\n          const repayShares = getLiabilityShares(bank, repayTokenAmount);\n          targetBalance.liabilityShares = BigNumber.max(\n            0,\n            targetBalance.liabilityShares.minus(repayShares)\n          );\n\n          // If fully repaid and no assets, close the balance\n          if (targetBalance.liabilityShares.eq(0) && targetBalance.assetShares.eq(0)) {\n            targetBalance.active = false;\n            targetBalance.bankPk = PublicKey.default;\n          }\n        }\n        break;\n      }\n\n      case \"lendingAccountWithdraw\":\n      case \"driftWithdraw\":\n      case \"solendWithdraw\":\n      case \"kaminoWithdraw\":\n      case \"juplendWithdraw\": {\n        const targetBank = new PublicKey(ix.keys[3].pubkey);\n        impactedAssetsBanks.add(targetBank.toBase58());\n        withdrawnBanks.add(targetBank.toBase58());\n\n        const targetBalance = projectedBalances.find((b) => b.bankPk.equals(targetBank));\n\n        if (!targetBalance) {\n          throw Error(\n            `Balance for bank ${targetBank.toBase58()} should be projected active at this point (ix ${index}: ${\n              decoded.name\n            }))`\n          );\n        }\n\n        // Check if this is a full withdraw\n        // (kaminoWithdraw packs withdraw-all as bit 0 of its `flags` arg since 0.1.9)\n        const isWithdrawAll =\n          decoded.name === \"kaminoWithdraw\"\n            ? ((ixArgs.flags ?? 0) & 1) > 0\n            : Boolean(ixArgs.withdrawAll);\n        if (isWithdrawAll) {\n          targetBalance.assetShares = new BigNumber(0);\n\n          // If no assets and no liabilities, close the balance\n          if (targetBalance.liabilityShares.eq(0)) {\n            targetBalance.active = false;\n            targetBalance.bankPk = PublicKey.default;\n          }\n        } else {\n          const withdrawTokenAmount = new BigNumber(ixArgs.amount?.toString() || \"0\");\n          const bank = banksMap.get(targetBank.toBase58());\n          if (!bank) {\n            throw Error(`Bank ${targetBank.toBase58()} not found in bankMap`);\n          }\n          // Per-venue amount semantics:\n          // - kaminoWithdraw: amount is already in cToken units → no multiplier\n          // - lendingAccountWithdraw / driftWithdraw / solendWithdraw / juplendWithdraw:\n          //   amount is in underlying units → divide by multiplier to get cToken units\n          //   (multiplier is 1 for regular banks, ≠ 1 for drift / juplend integrations)\n          const isKaminoWithdraw = decoded.name === \"kaminoWithdraw\";\n          const assetShareValueMultiplier = isKaminoWithdraw\n            ? new BigNumber(1)\n            : (assetShareValueMultiplierByBank.get(targetBank.toBase58()) ?? new BigNumber(1));\n          const cTokenAmount = withdrawTokenAmount.div(assetShareValueMultiplier);\n          const withdrawShares = getAssetShares(bank, cTokenAmount);\n          targetBalance.assetShares = BigNumber.max(\n            0,\n            targetBalance.assetShares.minus(withdrawShares)\n          );\n\n          // If fully withdrawn and no liabilities, close the balance\n          if (targetBalance.assetShares.eq(0) && targetBalance.liabilityShares.eq(0)) {\n            targetBalance.active = false;\n            targetBalance.bankPk = PublicKey.default;\n          }\n        }\n        break;\n      }\n\n      default: {\n        // Ignore other instructions\n        continue;\n      }\n    }\n  }\n\n  return {\n    projectedBalances,\n    impactedAssetsBanks: Array.from(impactedAssetsBanks),\n    impactedLiabilityBanks: Array.from(impactedLiabilityBanks),\n    withdrawnBanks: Array.from(withdrawnBanks),\n  };\n}\n","import { AccountInfo, Connection, GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\n\nimport { simulateAccountHealthCache } from \"../services\";\nimport {\n  BalanceType,\n  HealthCacheSimulationError,\n  MarginfiAccountRaw,\n  MarginfiAccountType,\n} from \"../types\";\n\nimport { parseMarginfiAccountRaw } from \"./deserialize.utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { AccountType, BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\nimport { deriveMarginfiAccount } from \"~/utils\";\n\nexport const fetchMarginfiAccountAddresses = async (\n  program: MarginfiProgram,\n  authority: PublicKey,\n  group: PublicKey\n): Promise<PublicKey[]> => {\n  const marginfiAccounts = (\n    await program.account.marginfiAccount.all([\n      {\n        memcmp: {\n          bytes: group.toBase58(),\n          offset: 8, // marginfiGroup is the first field in the account, so only offset is the discriminant\n        },\n      },\n      {\n        memcmp: {\n          bytes: authority.toBase58(),\n          offset: 8 + 32, // authority is the second field in the account after the authority, so offset by the discriminant and a pubkey\n        },\n      },\n    ])\n  ).map((a) => a.publicKey);\n\n  return marginfiAccounts;\n};\n\n// MarginfiAccount (bytemuck, repr(C)) byte layout — see src/idl/marginfi_0.1.11.json.\nconst MARGINFI_ACCOUNT_DISCRIMINATOR = Buffer.from([67, 178, 130, 109, 126, 114, 28, 42]);\nconst GROUP_OFFSET = 8; // after the 8-byte discriminator\nconst BALANCES_OFFSET = 72; // 8 discriminator + 32 group + 32 authority\nconst BALANCE_SIZE = 104; // one Balance struct (repr(C), align 8)\nconst BANK_PK_OFFSET_IN_BALANCE = 1; // active: u8 at +0, bankPk: pubkey at +1\nconst MAX_BALANCES = 16; // LendingAccount holds a fixed [Balance; 16]\n\n/**\n * Scans the group for every marginfi account holding `bank` in one of its 16 balance slots.\n *\n * A marginfi account stores up to 16 balance slots, sorted descending by `bankPk`, so the\n * target bank can sit at any slot (each at a different byte offset). memcmp filters are AND-ed,\n * so we can't OR across slots in one call — instead we issue one filtered `getProgramAccounts`\n * per balance slot and union the results. Inactive slots have a zeroed `bankPk`, so matching a\n * real bank pubkey only ever hits active holdings.\n *\n * Pass `dataSlice: { offset: 0, length: 0 }` when you only need addresses (no data transferred);\n * omit it to get full account data for decoding. Results are deduped by address (a bank appears\n * in at most one slot per account, but we dedupe for safety).\n */\nconst scanBankSlots = async (\n  program: MarginfiProgram,\n  group: PublicKey,\n  bank: PublicKey,\n  options: {\n    concurrency?: number;\n    dataSlice?: { offset: number; length: number };\n  }\n): Promise<Map<string, AccountInfo<Buffer>>> => {\n  const connection = program.provider.connection;\n  const programId = program.programId;\n\n  const discriminatorBytes = bs58.encode(MARGINFI_ACCOUNT_DISCRIMINATOR);\n  const groupBytes = group.toBase58();\n  const bankBytes = bank.toBase58();\n\n  const slotOffsets = Array.from(\n    { length: MAX_BALANCES },\n    (_, n) => BALANCES_OFFSET + BANK_PK_OFFSET_IN_BALANCE + n * BALANCE_SIZE\n  );\n\n  const scanSlot = (offset: number) => {\n    const filters: GetProgramAccountsFilter[] = [\n      { memcmp: { offset: 0, bytes: discriminatorBytes } },\n      { memcmp: { offset: GROUP_OFFSET, bytes: groupBytes } },\n      { memcmp: { offset, bytes: bankBytes } },\n    ];\n    return connection.getProgramAccounts(programId, {\n      filters,\n      dataSlice: options.dataSlice,\n    });\n  };\n\n  const byAddress = new Map<string, AccountInfo<Buffer>>();\n  const collect = (slotResults: Awaited<ReturnType<typeof scanSlot>>) => {\n    for (const { pubkey, account } of slotResults) {\n      byAddress.set(pubkey.toBase58(), account);\n    }\n  };\n\n  const concurrency = options.concurrency;\n  if (concurrency === undefined || concurrency >= slotOffsets.length) {\n    // Fire all slot scans at once.\n    (await Promise.all(slotOffsets.map(scanSlot))).forEach(collect);\n  } else {\n    // Batch the slot scans to stay under the concurrency limit.\n    const batchSize = Math.max(1, Math.floor(concurrency));\n    for (let i = 0; i < slotOffsets.length; i += batchSize) {\n      const batch = slotOffsets.slice(i, i + batchSize);\n      (await Promise.all(batch.map(scanSlot))).forEach(collect);\n    }\n  }\n\n  return byAddress;\n};\n\n/**\n * Fetches the addresses of every marginfi account in a group that holds a position in a\n * specific bank. Returns only addresses (uses `dataSlice` length 0 so no account data is\n * transferred or decoded) — important at the ~500k account scale of the group.\n *\n * @param program - The marginfi Anchor program (connection is taken from its provider)\n * @param group - The marginfi group public key\n * @param bank - The bank public key to search for in account balances\n * @param options - Optional settings:\n *   - `concurrency`: max number of the 16 slot scans to run at once. Omit (or pass a value\n *     >= 16) to fire all 16 in parallel via `Promise.all`; pass a smaller value (e.g. 4) to\n *     batch them and avoid RPC rate limits.\n * @returns Deduplicated array of account addresses holding the bank\n */\nexport const fetchMarginfiAccountAddressesHoldingBank = async (\n  program: MarginfiProgram,\n  group: PublicKey,\n  bank: PublicKey,\n  options?: { concurrency?: number }\n): Promise<PublicKey[]> => {\n  const byAddress = await scanBankSlots(program, group, bank, {\n    concurrency: options?.concurrency,\n    dataSlice: { offset: 0, length: 0 },\n  });\n  return Array.from(byAddress.keys(), (a) => new PublicKey(a));\n};\n\n/** One account's active balance position in a specific bank. */\nexport type AccountActiveBalanceForBank = {\n  accountAddress: PublicKey;\n  authority: PublicKey;\n  balance: BalanceType;\n};\n\n/**\n * Fetches every marginfi account in a group that holds `bank`, along with its authority and the\n * active balance (shares) it holds in that bank.\n *\n * Unlike {@link fetchMarginfiAccountAddressesHoldingBank}, this fetches full account data so it\n * can decode the authority and balance shares — heavier, but a single round trip (no separate\n * hydration). The returned `balance` holds raw asset/liability shares; convert to token amounts\n * with the bank's share multiplier (e.g. `Balance.computeQuantityUi(bank, multiplier)`).\n *\n * @param program - The marginfi Anchor program (connection is taken from its provider)\n * @param group - The marginfi group public key\n * @param bank - The bank public key to search for in account balances\n * @param options - Optional settings:\n *   - `concurrency`: max number of the 16 slot scans to run at once (see above).\n * @returns One entry per account holding the bank, with authority and the matching balance\n */\nexport const fetchMarginfiAccountActiveBalancesForBank = async (\n  program: MarginfiProgram,\n  group: PublicKey,\n  bank: PublicKey,\n  options?: { concurrency?: number }\n): Promise<AccountActiveBalanceForBank[]> => {\n  // Omit dataSlice so we get full account data to decode authority + balance shares.\n  const byAddress = await scanBankSlots(program, group, bank, {\n    concurrency: options?.concurrency,\n  });\n\n  const results: AccountActiveBalanceForBank[] = [];\n  for (const [address, account] of byAddress) {\n    const accountAddress = new PublicKey(address);\n    const raw = program.coder.accounts.decode<MarginfiAccountRaw>(\n      AccountType.MarginfiAccount,\n      account.data\n    );\n    const parsed = parseMarginfiAccountRaw(accountAddress, raw);\n    const balance = parsed.balances.find((b) => b.active && b.bankPk.equals(bank));\n    // Defensive: the memcmp matched this bank, so an active balance should exist. Skip if the\n    // slot was deactivated between the scan and decode.\n    if (!balance) continue;\n    results.push({ accountAddress, authority: parsed.authority, balance });\n  }\n\n  return results;\n};\n\nexport const fetchMarginfiAccountData = async (\n  program: MarginfiProgram,\n  marginfiAccountPk: PublicKey,\n  banksMap: Map<string, BankType>,\n  bankIntegrationMap?: BankIntegrationMetadataMap\n): Promise<{\n  marginfiAccount: MarginfiAccountType;\n  error?: HealthCacheSimulationError;\n}> => {\n  const marginfiAccountRaw: MarginfiAccountRaw = await program.account.marginfiAccount.fetch(\n    marginfiAccountPk,\n    \"confirmed\"\n  );\n  const marginfiAccount = parseMarginfiAccountRaw(marginfiAccountPk, marginfiAccountRaw);\n\n  try {\n    const simulatedAccount = await simulateAccountHealthCache({\n      program,\n      banksMap,\n      marginfiAccount,\n      bankIntegrationMap,\n    });\n\n    const marginfiAccountWithCache = parseMarginfiAccountRaw(marginfiAccountPk, simulatedAccount);\n\n    return { marginfiAccount: marginfiAccountWithCache };\n  } catch (e) {\n    console.error(\"Error simulating account health cache\", e);\n    if (e instanceof HealthCacheSimulationError) {\n      return { marginfiAccount, error: e };\n    }\n    return { marginfiAccount };\n  }\n};\n\nfunction randomDistinctIndices(count: number, maxExclusive: number): number[] {\n  const chosen = new Set<number>();\n  while (chosen.size < count) {\n    chosen.add(Math.floor(Math.random() * maxExclusive));\n  }\n  return [...chosen];\n}\n\n/**\n * Generates a random available account index that doesn't collide with existing accounts.\n * Account indices are 0-255 (u8 range).\n *\n * @param connection - Solana connection\n * @param programId - MarginFi program ID\n * @param group - MarginFi group public key\n * @param authority - User's wallet public key\n * @param thirdPartyId - Third party ID (default 0)\n * @returns A random available account index (0-255)\n */\nexport async function findRandomAvailableAccountIndex(\n  connection: Connection,\n  programId: PublicKey,\n  group: PublicKey,\n  authority: PublicKey,\n  thirdPartyId: number = 0\n): Promise<number> {\n  const MAX_INDEX = 255; // u8 range: 0-255\n  const BATCH_SIZE = 16; // 16 or 32 is fine\n  const MAX_ATTEMPTS = 8; // realisticly all accounts will be found in the first attempt\n\n  for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n    // 1. Pick a random batch of distinct indices in [0, 255]\n    const indices = randomDistinctIndices(Math.min(BATCH_SIZE, MAX_INDEX), MAX_INDEX);\n\n    // 2. Derive PDAs for these indices\n    const pdas = indices.map(\n      (i) => deriveMarginfiAccount(programId, group, authority, i, thirdPartyId)[0]\n    );\n\n    // 3. Check which PDAs exist on-chain\n    const accountInfos = await connection.getMultipleAccountsInfo(pdas);\n\n    // 4. Find the first index whose PDA doesn't exist yet\n    for (let i = 0; i < indices.length; i++) {\n      const indice = indices[i];\n      if (accountInfos[i] === null && indice !== undefined) {\n        // This index is free right now\n        return indice;\n      }\n    }\n  }\n\n  // If we get here, indices are taken, (create custom error)\n  throw new Error(\"Unable to find free index after many attempts\");\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { MarginfiAccountType, MarginRequirementType } from \"../types\";\n\nimport {\n  computeFreeCollateralFromCache,\n  computeFreeCollateralFromBalances,\n  computeHealthComponentsFromCache,\n  computeQuantityUi,\n  getActiveBalances,\n  getBalance,\n} from \"./compute\";\n\nimport {\n  ActiveEmodePair,\n  AssetTag,\n  BankRateLimiterType,\n  BankType,\n  computeAssetUsdValue,\n  computeBankBorrowCapRemaining,\n  computeBankProjectedAvailableLiquidity,\n  computeBankDepositCapRemaining,\n  computeBankRateLimitRemaining,\n  computeGroupRateLimitRemainingUsd,\n  computeVenueAvailableLiquidity,\n  BankVenueStates,\n  EmodeImpactStatus,\n  getAssetWeight,\n  getLiabilityWeight,\n  RiskTier,\n} from \"~/services/bank\";\nimport { getPrice, OraclePrice, PriceBias } from \"~/services/price\";\n\n/**\n * Configuration for computing maximum borrow amount for a bank\n */\nexport interface ComputeMaxBorrowForBankParams {\n  /** The marginfi account to compute max borrow for */\n  account: MarginfiAccountType;\n  /** Map of banks by their address */\n  banksMap: Map<string, BankType>;\n  /** Map of oracle prices by bank address */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** The bank address to compute max borrow for */\n  bankAddress: PublicKey;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** E-mode impact status (determines whether to use cache or compute from balances) */\n  emodeImpactStatus?: EmodeImpactStatus;\n  /** Volatility factor to apply to free collateral (default: 1) */\n  volatilityFactor?: number;\n  /** Active e-mode pair for applying e-mode weights */\n  activePair?: ActiveEmodePair;\n  /**\n   * Group-level rate limiter (USD windows). When provided and enabled, the result is also clamped\n   * to the group's remaining outflow capacity converted at the unbiased realtime price.\n   */\n  groupRateLimiter?: BankRateLimiterType;\n  /**\n   * Skip the bank-level clamps (remaining borrow cap, available liquidity, bank/group rate\n   * limiters) and return the purely health-based amount (default: false)\n   */\n  ignoreBankLimits?: boolean;\n}\n\n/**\n * Calculates the maximum amount that can be borrowed from a bank.\n *\n * This function computes the borrowing capacity based on:\n * - **Free collateral**: Available collateral not backing existing liabilities\n * - **Isolated tier constraints**: Isolated assets cannot be borrowed with active debt\n * - **E-mode weights**: Enhanced weights for assets in the same e-mode category\n * - **Oracle prices**: Conservative pricing (lowest for assets, highest for liabilities)\n * - **Bank limits**: Remaining borrow cap (`borrowLimit - totalBorrows`, interest-buffered),\n *   available liquidity (`totalDeposits - totalBorrows`), the bank's net-outflow rate limiter and\n *   (if `groupRateLimiter` is provided) the group's USD rate limiter — unless `ignoreBankLimits`\n *\n * **Isolated Asset Rules:**\n * - Cannot borrow isolated assets if other liabilities exist\n * - Cannot borrow new assets if existing debt is in isolated tier\n *\n * **Calculation Formula:**\n * ```\n * If assetWeight > 0:\n *   maxBorrow = (min(fc, ucb) / (price_lowest * asset_weight)) +\n *               ((fc - min(fc, ucb)) / (price_highest * liab_weight))\n * Else:\n *   maxBorrow = existingAssets + ((fc - ucb) / (price_highest * liab_weight))\n *\n * maxBorrow = min(maxBorrow, remainingBorrowCap, availableLiquidity, rateLimitRemaining)\n * ```\n * All liability-denominated terms are divided by `(1 + protocolOriginationFee)` because the\n * program books the origination fee as additional borrowed liability.\n * Where:\n * - `fc` = free collateral (with volatility factor)\n * - `ucb` = untied collateral for bank (existing deposits)\n *\n * @param params - Configuration object for max borrow computation\n * @returns Maximum amount that can be borrowed (in UI units)\n *\n * @example\n * ```typescript\n * const maxBorrow = computeMaxBorrowForBank({\n *   account,\n *   banks: client.bankMap,\n *   oraclePrices: client.oraclePriceByBank,\n *   bankAddress: usdcBankPk,\n *   volatilityFactor: 0.95, // 5% safety margin\n *   emodeImpactStatus: EmodeImpactStatus.InactiveEmode,\n * });\n * console.log(`Can borrow up to ${maxBorrow.toFixed(2)} USDC`);\n * ```\n */\nexport function computeMaxBorrowForBank(params: ComputeMaxBorrowForBankParams): BigNumber {\n  const {\n    account,\n    banksMap,\n    oraclePricesByBank,\n    bankAddress,\n    assetShareValueMultiplierByBank,\n    emodeImpactStatus,\n    volatilityFactor,\n    activePair,\n    groupRateLimiter,\n    ignoreBankLimits,\n  } = params;\n  const bank = banksMap.get(bankAddress.toBase58());\n\n  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n\n  // Build Map of e-mode collateral banks if activePair exists\n  const activeEmodeWeightsByBank =\n    activePair?.collateralBanks.reduce((map, bankPk) => {\n      const bank = banksMap.get(bankPk.toBase58());\n      if (bank) {\n        map.set(bankPk.toBase58(), {\n          assetWeightMaint: activePair.assetWeightMaint,\n          assetWeightInit: activePair.assetWeightInit,\n        });\n      }\n      return map;\n    }, new Map<string, { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }>()) ??\n    new Map<string, { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }>();\n\n  const activeEmodeWeightsForBank = activeEmodeWeightsByBank.get(bankAddress.toBase58());\n  const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());\n\n  const oraclePrice = oraclePricesByBank.get(bankAddress.toBase58());\n  if (!oraclePrice) throw Error(`Oracle price for ${bankAddress.toBase58()} not found`);\n\n  const activeBalances = getActiveBalances(account.balances);\n\n  // -------------------------- //\n  // isolated asset constraints //\n  // -------------------------- //\n\n  const hasLiabilitiesAlready =\n    activeBalances.filter((b) => b.liabilityShares.gt(0) && !b.bankPk.equals(bankAddress)).length >\n    0;\n\n  const attemptingToBorrowIsolatedAssetWithActiveDebt =\n    bank.config.riskTier === RiskTier.Isolated && hasLiabilitiesAlready;\n\n  const existingLiabilityBanks = activeBalances\n    .filter((b) => b.liabilityShares.gt(0))\n    .map((b) => banksMap.get(b.bankPk.toBase58())!);\n\n  const attemptingToBorrowNewAssetWithExistingIsolatedDebt = existingLiabilityBanks.some(\n    (b) => b.config.riskTier === RiskTier.Isolated && !b.address.equals(bankAddress)\n  );\n\n  if (\n    attemptingToBorrowIsolatedAssetWithActiveDebt ||\n    attemptingToBorrowNewAssetWithExistingIsolatedDebt\n  ) {\n    // Cannot borrow due to isolated tier constraints\n    return new BigNumber(0);\n  }\n\n  // ------------- //\n  // FC-based calc //\n  // ------------- //\n\n  const _volatilityFactor = volatilityFactor ?? 1;\n\n  const balance = getBalance(bankAddress, activeBalances);\n\n  const useCache =\n    emodeImpactStatus === EmodeImpactStatus.InactiveEmode ||\n    emodeImpactStatus === EmodeImpactStatus.ExtendEmode;\n\n  const freeCollateral = useCache\n    ? computeFreeCollateralFromCache(account).times(_volatilityFactor)\n    : computeFreeCollateralFromBalances({\n        activeBalances,\n        banksMap,\n        oraclePricesByBank,\n        activeEmodeWeightsByBank,\n        assetShareValueMultiplierByBank,\n      }).times(_volatilityFactor);\n\n  const untiedCollateralForBank = BigNumber.min(\n    computeAssetUsdValue({\n      bank,\n      oraclePrice,\n      assetShares: balance.assetShares,\n      marginRequirement: MarginRequirementType.Initial,\n      priceBias: PriceBias.Lowest,\n      activeEmodeWeights: activeEmodeWeightsForBank,\n      assetShareValueMultiplier,\n    }),\n    freeCollateral\n  );\n\n  const priceLowestBias = getPrice(oraclePrice, PriceBias.Lowest, true);\n  const priceHighestBias = getPrice(oraclePrice, PriceBias.Highest, true);\n  const assetWeight = getAssetWeight({\n    bank,\n    marginRequirement: MarginRequirementType.Initial,\n    oraclePrice,\n    activeEmodeWeights: activeEmodeWeightsForBank,\n    assetShareValueMultiplier,\n  });\n  const liabWeight = getLiabilityWeight(bank.config, MarginRequirementType.Initial);\n\n  // The program books `amount * (1 + protocol_origination_fee)` as the new liability (the fee is\n  // borrowed on the user's behalf), so every liability-denominated bound is divided by it.\n  const originationFeeFactor = new BigNumber(1).plus(\n    bank.config.interestRateConfig.protocolOriginationFee\n  );\n  const liabPriceWeighted = priceHighestBias.times(liabWeight).times(originationFeeFactor);\n\n  const healthMaxBorrow = assetWeight.eq(0)\n    ? computeQuantityUi(balance, bank, assetShareValueMultiplier).assets.plus(\n        freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted)\n      )\n    : untiedCollateralForBank\n        .div(priceLowestBias.times(assetWeight))\n        .plus(freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted));\n\n  if (ignoreBankLimits) return healthMaxBorrow;\n\n  // ----------------- //\n  // bank-level clamps //\n  // ----------------- //\n\n  // borrow cap: total_liabilities + amount * (1 + fee) < borrow_limit\n  const borrowCapRemaining = new BigNumber(computeBankBorrowCapRemaining(bank)).div(\n    originationFeeFactor\n  );\n  // utilization: total_assets >= total_liabilities + amount * (1 + fee) (after interest accrual)\n  const availableLiquidity = computeBankProjectedAvailableLiquidity(\n    bank,\n    assetShareValueMultiplier\n  ).div(originationFeeFactor);\n  // rate limiters record the pre-fee `amount` only\n  const rateLimitRemaining = computeOutflowRateLimitRemaining(\n    bank,\n    oraclePrice,\n    groupRateLimiter,\n    assetShareValueMultiplier\n  );\n\n  return BigNumber.max(\n    0,\n    BigNumber.min(healthMaxBorrow, borrowCapRemaining, availableLiquidity, rateLimitRemaining)\n  );\n}\n\n/**\n * Remaining outflow (withdraw/borrow) allowed by the bank-level rate limiter (native tokens) and,\n * if provided, the group-level rate limiter (USD, converted at the unbiased realtime price —\n * mirroring the program's `record_withdrawal_outflow`). Returns +Infinity when no limiter is\n * enabled so it is a no-op inside `BigNumber.min`.\n *\n * The result is in underlying UI units to match the other max-amount clamps. The bank-level\n * limiter records the withdraw instruction's own denomination, which differs per venue:\n * - DEFAULT / DRIFT / JUPLEND: underlying token amount (Drift records `token_amount`, JupLend\n *   `native_outflow`, not their internal scaled/share balances) — already underlying, no\n *   conversion.\n * - KAMINO: cToken collateral amount (the instruction's `amount` is denominated in collateral\n *   tokens) — multiplied by the cToken exchange rate.\n * - STAKED: LST amount (the bank mint) — multiplied by the LST→SOL rate to reach the SDK's\n *   SOL-equivalent underlying space.\n */\nfunction computeOutflowRateLimitRemaining(\n  bank: BankType,\n  oraclePrice: OraclePrice,\n  groupRateLimiter?: BankRateLimiterType,\n  assetShareValueMultiplier?: BigNumber\n): BigNumber {\n  const nowSeconds = Date.now() / 1000;\n  let remaining = new BigNumber(Infinity);\n\n  let bankRemaining = computeBankRateLimitRemaining(bank, nowSeconds);\n  if (bankRemaining !== null) {\n    const limiterInBankMintUnits =\n      bank.config.assetTag === AssetTag.KAMINO || bank.config.assetTag === AssetTag.STAKED;\n    if (limiterInBankMintUnits && assetShareValueMultiplier?.gt(0)) {\n      bankRemaining = bankRemaining.times(assetShareValueMultiplier);\n    }\n    remaining = BigNumber.min(remaining, bankRemaining);\n  }\n\n  // Program: `calc_value(amount, unbiased realtime price).to_num::<i64>() > remaining` fails.\n  const groupRemainingUsd = computeGroupRateLimitRemainingUsd(groupRateLimiter, nowSeconds);\n  if (groupRemainingUsd !== null) {\n    const price = getPrice(oraclePrice, PriceBias.None, false);\n    if (price.gt(0)) remaining = BigNumber.min(remaining, groupRemainingUsd.div(price));\n  }\n\n  return remaining;\n}\n\n/**\n * Configuration for computing maximum withdraw amount for a bank\n */\nexport interface ComputeMaxWithdrawForBankParams {\n  /** The marginfi account to compute max withdraw for */\n  account: MarginfiAccountType;\n  /** Map of banks by their address */\n  banksMap: Map<string, BankType>;\n  /** Map of oracle prices by bank address */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** The bank address to compute max withdraw for */\n  bankAddress: PublicKey;\n  /** Volatility factor to apply to free collateral (default: 1) */\n  volatilityFactor?: number;\n  /** Active e-mode pair for applying e-mode weights */\n  activePair?: ActiveEmodePair;\n  /**\n   * Group-level rate limiter (USD windows). When provided and enabled, the result is also clamped\n   * to the group's remaining outflow capacity converted at the unbiased realtime price.\n   */\n  groupRateLimiter?: BankRateLimiterType;\n  /**\n   * Venue-side account states for integrated banks (Kamino/Drift/JupLend), e.g.\n   * `client.bankIntegrationMap[bankAddress]`. When provided, the result is also clamped to the\n   * venue's own idle liquidity — the marginfi-level totals only describe what marginfi has\n   * delegated, so a fully utilized venue reserve correctly reports 0 withdrawable.\n   */\n  venueStates?: BankVenueStates;\n  /**\n   * Skip the bank-level clamps (available liquidity, venue liquidity, bank/group rate limiters)\n   * and return the purely health-based amount (default: false)\n   */\n  ignoreBankLimits?: boolean;\n}\n\n/**\n * Calculates the maximum amount that can be withdrawn from a bank.\n *\n * This function computes the withdrawal capacity based on:\n * - **Free collateral**: Available collateral after maintaining required margins\n * - **Asset weights**: Risk-adjusted value of deposits (Initial and Maintenance)\n * - **E-mode weights**: Enhanced weights for assets in the same e-mode category\n * - **Oracle prices**: Conservative pricing to ensure safe withdrawals\n * - **Bank limits**: Result is clamped to available liquidity (`totalDeposits - totalBorrows`),\n *   the bank's net-outflow rate limiter, (if `groupRateLimiter` is provided) the group's USD\n *   rate limiter and (if `venueStates` is provided) the integrated venue's idle liquidity —\n *   unless `ignoreBankLimits` is set\n *\n * **Key Differences from Max Borrow:**\n * - Uses both Initial and Maintenance asset weights\n * - No isolated tier constraints (can always withdraw your own assets)\n * - Calculates based on existing deposits, not new positions\n *\n * **Safety Mechanism:**\n * The volatility factor (default: 1.0) can be reduced to add a safety buffer,\n * preventing withdrawals that would leave the account close to liquidation.\n *\n * @param params - Configuration object for max withdraw computation\n * @returns Maximum amount that can be withdrawn (in UI units)\n *\n * @example\n * ```typescript\n * const maxWithdraw = computeMaxWithdrawForBank({\n *   account,\n *   banksMap: client.bankMap,\n *   oraclePricesByBank: client.oraclePriceByBank,\n *   bankAddress: usdcBankPk,\n *   volatilityFactor: 0.98, // 2% safety margin\n *   assetShareValueMultiplierByBank: client.assetShareValueMultiplierByBank,\n * });\n * console.log(`Can withdraw up to ${maxWithdraw.toFixed(2)} USDC`);\n * ```\n */\nexport function computeMaxWithdrawForBank(params: ComputeMaxWithdrawForBankParams): BigNumber {\n  const {\n    banksMap,\n    bankAddress,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    groupRateLimiter,\n    venueStates,\n    ignoreBankLimits,\n  } = params;\n  const bank = banksMap.get(bankAddress.toBase58());\n  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n\n  const healthMaxWithdraw = computeHealthMaxWithdrawForBank(params);\n  if (ignoreBankLimits) return healthMaxWithdraw;\n\n  // ----------------- //\n  // bank-level clamps //\n  // ----------------- //\n\n  const oraclePrice = oraclePricesByBank.get(bankAddress.toBase58());\n  if (!oraclePrice) throw Error(`Oracle price for ${bankAddress.toBase58()} not found`);\n\n  const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());\n  // utilization: total_assets - amount >= total_liabilities (after interest accrual)\n  const availableLiquidity = computeBankProjectedAvailableLiquidity(\n    bank,\n    assetShareValueMultiplier\n  );\n  const rateLimitRemaining = computeOutflowRateLimitRemaining(\n    bank,\n    oraclePrice,\n    groupRateLimiter,\n    assetShareValueMultiplier\n  );\n\n  const clamps = [healthMaxWithdraw, availableLiquidity, rateLimitRemaining];\n  const venueLiquidity = computeVenueAvailableLiquidity(bank, venueStates);\n  if (venueLiquidity !== undefined) clamps.push(venueLiquidity);\n\n  return BigNumber.max(0, BigNumber.min(...clamps));\n}\n\n/**\n * Health-based max withdraw (no bank-level clamps). See {@link computeMaxWithdrawForBank}.\n */\nfunction computeHealthMaxWithdrawForBank(params: ComputeMaxWithdrawForBankParams): BigNumber {\n  const {\n    account,\n    banksMap,\n    oraclePricesByBank,\n    assetShareValueMultiplierByBank,\n    bankAddress,\n    volatilityFactor,\n    activePair,\n  } = params;\n  const opts = { volatilityFactor, activePair };\n\n  const bank = banksMap.get(bankAddress.toBase58());\n  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n\n  // Build Map of e-mode collateral banks if activePair exists\n  const activeEmodeWeightsByBank =\n    activePair?.collateralBanks.reduce((map, bankPk) => {\n      const bank = banksMap.get(bankPk.toBase58());\n      if (bank) {\n        map.set(bankPk.toBase58(), {\n          assetWeightMaint: activePair.assetWeightMaint,\n          assetWeightInit: activePair.assetWeightInit,\n        });\n      }\n      return map;\n    }, new Map<string, { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }>()) ??\n    new Map<string, { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }>();\n\n  const activeEmodeWeightsForBank = activeEmodeWeightsByBank.get(bankAddress.toBase58());\n  const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());\n\n  const oraclePrice = oraclePricesByBank.get(bankAddress.toBase58());\n  if (!oraclePrice) throw Error(`Oracle price for ${bankAddress.toBase58()} not found`);\n\n  const _volatilityFactor = opts?.volatilityFactor ?? 1;\n\n  // Get weights - they'll use emode weights if bank was modified\n  const initAssetWeight = getAssetWeight({\n    bank,\n    marginRequirement: MarginRequirementType.Initial,\n    oraclePrice,\n    activeEmodeWeights: activeEmodeWeightsForBank,\n    assetShareValueMultiplier,\n    ignoreSoftLimits: false,\n  });\n  const maintAssetWeight = getAssetWeight({\n    bank,\n    marginRequirement: MarginRequirementType.Maintenance,\n    oraclePrice,\n    activeEmodeWeights: activeEmodeWeightsForBank,\n    assetShareValueMultiplier,\n    ignoreSoftLimits: false,\n  });\n  const activeBalances = getActiveBalances(account.balances);\n  const balance = getBalance(bankAddress, activeBalances);\n\n  // Recalculate free collateral if emode weights were applied\n  const freeCollateral = opts?.activePair\n    ? computeFreeCollateralFromBalances({\n        activeBalances,\n        banksMap,\n        oraclePricesByBank,\n        activeEmodeWeightsByBank,\n        assetShareValueMultiplierByBank,\n      })\n    : computeFreeCollateralFromCache(account);\n\n  const initCollateralForBank = computeAssetUsdValue({\n    bank,\n    oraclePrice,\n    assetShares: balance.assetShares,\n    marginRequirement: MarginRequirementType.Initial,\n    priceBias: PriceBias.Lowest,\n    activeEmodeWeights: activeEmodeWeightsForBank,\n    assetShareValueMultiplier,\n  });\n\n  const entireBalance = computeQuantityUi(balance, bank, assetShareValueMultiplier).assets;\n\n  const { liabilities: liabilitiesInit } = computeHealthComponentsFromCache(\n    account,\n    MarginRequirementType.Initial\n  );\n\n  // -------------------------------------------------- //\n  // isolated bank (=> init weight = maint weight = 0)  //\n  // or collateral bank with 0-weights (does not happen //\n  // in practice)                                       //\n  // -------------------------------------------------- //\n\n  if (\n    bank.config.riskTier === RiskTier.Isolated ||\n    (initAssetWeight.isZero() && maintAssetWeight.isZero())\n  ) {\n    if (freeCollateral.isZero() && !liabilitiesInit.isZero()) {\n      // if account is already below init requirements and has active debt, prevent any withdrawal even if those don't count as collateral\n      // inefficient, but reflective of contract which does not look at action delta, but only end state atm\n      return new BigNumber(0);\n    } else {\n      return entireBalance;\n    }\n  }\n\n  // ----------------------------- //\n  // collateral bank being retired //\n  // ----------------------------- //\n\n  if (initAssetWeight.isZero() && !maintAssetWeight.isZero()) {\n    if (liabilitiesInit.eq(0)) {\n      return entireBalance;\n    } else if (freeCollateral.isZero()) {\n      return new BigNumber(0); // inefficient, but reflective of contract which does not look at action delta, but only end state\n    } else {\n      const { liabilities: maintLiabilities, assets: maintAssets } =\n        computeHealthComponentsFromCache(account, MarginRequirementType.Maintenance);\n      const maintUntiedCollateral = maintAssets.minus(maintLiabilities);\n\n      const priceLowestBias = getPrice(oraclePrice, PriceBias.Lowest, true);\n      const maintWeightedPrice = priceLowestBias.times(maintAssetWeight);\n\n      return maintUntiedCollateral.div(maintWeightedPrice);\n    }\n  }\n\n  // ------------------------------------- //\n  // collateral bank with positive weights //\n  // ------------------------------------- //\n  // bypass volatility factor if no liabilities or if all collateral is untied\n  if (liabilitiesInit.isZero() || initCollateralForBank.lte(freeCollateral)) {\n    return entireBalance;\n  }\n\n  // apply volatility factor to avoid failure due to price volatility / slippage\n  const initUntiedCollateralForBank = freeCollateral.times(_volatilityFactor);\n\n  const priceLowestBias = getPrice(oraclePrice, PriceBias.Lowest, true);\n  const initWeightedPrice = priceLowestBias.times(initAssetWeight);\n  const maxWithdraw = initUntiedCollateralForBank.div(initWeightedPrice);\n\n  return maxWithdraw;\n}\n\n/**\n * Configuration for computing maximum deposit amount for a bank\n */\nexport interface ComputeMaxDepositForBankParams {\n  /** Map of banks by their address */\n  banksMap: Map<string, BankType>;\n  /** The bank address to compute max deposit for */\n  bankAddress: PublicKey;\n  /**\n   * Asset share value multipliers by bank address (for integrated protocols like Kamino/Drift and\n   * staked-collateral banks). The bank's `depositLimit` is denominated in its native share units;\n   * the multiplier converts the remaining capacity to underlying UI units.\n   */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Wallet token balance in UI units; if provided, the result is capped to it */\n  walletBalance?: BigNumber | number;\n}\n\n/**\n * Calculates the maximum amount that can be deposited into a bank.\n *\n * Deposits are not constrained by account health, only by the bank's deposit cap\n * (`depositLimit - totalDeposits`, buffered for interest accrued since the last update)\n * and, optionally, the caller's wallet balance.\n *\n * @param params - Configuration object for max deposit computation\n * @returns Maximum amount that can be deposited (in UI units)\n *\n * @example\n * ```typescript\n * const maxDeposit = computeMaxDepositForBank({\n *   banksMap: client.bankMap,\n *   bankAddress: usdcBankPk,\n *   assetShareValueMultiplierByBank: client.assetShareValueMultiplierByBank,\n *   walletBalance: 1_000, // UI units\n * });\n * ```\n */\nexport function computeMaxDepositForBank(params: ComputeMaxDepositForBankParams): BigNumber {\n  const { banksMap, bankAddress, assetShareValueMultiplierByBank, walletBalance } = params;\n  const bank = banksMap.get(bankAddress.toBase58());\n  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);\n\n  const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());\n  const depositCapRemaining = new BigNumber(computeBankDepositCapRemaining(bank)).times(\n    assetShareValueMultiplier ?? 1\n  );\n  if (walletBalance === undefined) return depositCapRemaining;\n\n  return BigNumber.max(0, BigNumber.min(depositCapRemaining, new BigNumber(walletBalance)));\n}\n","// Minimal Titan V1 WebSocket client — vendored from @titanexchange/sdk-ts\n// Source: https://github.com/Titan-Pathfinder/titan-sdk-ts (MIT)\n//\n// Differences from upstream:\n// - No compression (negotiates only \"v1.api.titan.ag\" subprotocol)\n// - Uses `ws` package instead of `websocket`\n// - Only implements connect, newSwapQuoteStream, stopStream, close\n\nimport { Encoder, Decoder } from \"@msgpack/msgpack\";\nimport WebSocket from \"ws\";\n\nimport type {\n  ClientRequest,\n  SwapQuoteRequest,\n  ServerMessage,\n  ResponseSuccess,\n  ResponseError,\n  StreamData,\n  StreamEnd,\n  SwapQuotes,\n  QuoteSwapStreamResponse,\n  StopStreamResponse,\n} from \"./types\";\n\nconst SUBPROTOCOL = \"v1.api.titan.ag\";\nconst UINT64_MAX = (1n << 64n) - 1n;\n\nfunction toBigInt(value: number | bigint): bigint {\n  if (typeof value === \"bigint\") {\n    if (value < 0n || value > UINT64_MAX) {\n      throw new RangeError(`Amount out of uint64 range: ${value}`);\n    }\n    return value;\n  }\n  if (!Number.isInteger(value)) {\n    throw new TypeError(`Amount must be a whole number, got ${value}`);\n  }\n  if (value < 0) {\n    throw new RangeError(`Amount must be non-negative, got ${value}`);\n  }\n  return BigInt(value);\n}\n\n// --- Error classes ---\n\nexport class ConnectionClosed extends Error {\n  code: number;\n  reason: string;\n\n  constructor(code: number, reason: string) {\n    super(`Client WebSocket closed with code ${code}: ${reason}`);\n    this.name = \"ConnectionClosed\";\n    Object.setPrototypeOf(this, ConnectionClosed.prototype);\n    this.code = code;\n    this.reason = reason;\n  }\n}\n\nexport class ErrorResponse extends Error {\n  response: ResponseError;\n\n  constructor(response: ResponseError) {\n    super(`Request ${response.requestId} failed with code ${response.code}: ${response.message}`);\n    this.name = \"ErrorResponse\";\n    Object.setPrototypeOf(this, ErrorResponse.prototype);\n    this.response = response;\n  }\n}\n\nexport class StreamError extends Error {\n  streamId: number;\n  errorCode: number;\n  errorMessage: string;\n\n  constructor(packet: StreamEnd) {\n    const code = packet.errorCode ?? 0;\n    const message = packet.errorMessage ?? \"\";\n    super(`Stream ${packet.id} ended with error code ${code}: ${message}`);\n    this.name = \"StreamError\";\n    Object.setPrototypeOf(this, StreamError.prototype);\n    this.streamId = packet.id;\n    this.errorCode = code;\n    this.errorMessage = message;\n  }\n}\n\n// --- Response handler types ---\n\nexport interface ResponseWithStream<T, D> {\n  response: T;\n  stream: ReadableStream<D>;\n  streamId: number;\n}\n\ntype Resolver<T> = (value: T | PromiseLike<T>) => void;\ntype Rejector = (reason?: unknown) => void;\n\ninterface PendingRequest {\n  resolve: Resolver<unknown>;\n  reject: Rejector;\n  kind: \"NewSwapQuoteStream\" | \"StopStream\";\n}\n\n// --- Codec (msgpack, no compression) ---\n\nconst encoder = new Encoder({ useBigInt64: true });\nconst decoder = new Decoder({ useBigInt64: true });\n\n// --- V1Client ---\n\nexport class V1Client {\n  private socket: WebSocket;\n  private nextId = 0;\n  private _closed = false;\n  private _closing = false;\n\n  private pending = new Map<number, PendingRequest>();\n  private streams = new Map<number, ReadableStreamDefaultController<SwapQuotes>>();\n  private streamStopping = new Map<number, boolean>();\n  private closeListeners: { resolve: Resolver<void>; reject: Rejector }[] = [];\n\n  // --- Static connect ---\n\n  static connect(url: string): Promise<V1Client> {\n    return new Promise<V1Client>((resolve, reject) => {\n      const ws = new WebSocket(url, [SUBPROTOCOL]);\n\n      ws.binaryType = \"arraybuffer\";\n\n      const onOpen = () => {\n        // ws doesn't populate .protocol when using the `ws` library in Node\n        // but since we only offer one subprotocol, the server must accept it.\n        ws.off(\"error\", onError);\n        ws.off(\"close\", onClose);\n        resolve(new V1Client(ws));\n      };\n      const onError = (err: Error) => {\n        ws.off(\"open\", onOpen);\n        ws.off(\"close\", onClose);\n        reject(err);\n      };\n      // Guard against the socket closing before `open` fires without a\n      // preceding `error` (e.g. a clean close during handshake). Without this\n      // the promise would hang forever.\n      const onClose = (code: number, reason: Buffer) => {\n        ws.off(\"open\", onOpen);\n        ws.off(\"error\", onError);\n        reject(\n          new Error(\n            `WebSocket closed before open (code=${code}${\n              reason.length ? `, reason=${reason.toString()}` : \"\"\n            })`\n          )\n        );\n      };\n\n      ws.once(\"open\", onOpen);\n      ws.once(\"error\", onError);\n      ws.once(\"close\", onClose);\n    });\n  }\n\n  // --- Constructor ---\n\n  private constructor(socket: WebSocket) {\n    this.socket = socket;\n\n    this.socket.on(\"message\", (data: WebSocket.RawData) => {\n      this.handleMessage(data);\n    });\n    this.socket.on(\"close\", (code: number, reason: Buffer) => {\n      this.handleClose(code, reason.toString());\n    });\n    this.socket.on(\"error\", (err: Error) => {\n      this.handleError(err);\n    });\n  }\n\n  private nextRequestId(): number {\n    return this.nextId++;\n  }\n\n  // --- Public API ---\n\n  public get closed(): boolean {\n    return this._closed;\n  }\n\n  public close(): Promise<void> {\n    if (this._closed) return Promise.resolve();\n    return new Promise<void>((resolve, reject) => {\n      this.closeListeners.push({ resolve, reject });\n      if (!this._closing) {\n        this._closing = true;\n        this.socket.close();\n      }\n    });\n  }\n\n  public newSwapQuoteStream(\n    params: SwapQuoteRequest\n  ): Promise<ResponseWithStream<QuoteSwapStreamResponse, SwapQuotes>> {\n    const requestId = this.nextRequestId();\n\n    const promise = new Promise<ResponseWithStream<QuoteSwapStreamResponse, SwapQuotes>>(\n      (resolve, reject) => {\n        this.pending.set(requestId, {\n          resolve: resolve as Resolver<unknown>,\n          reject,\n          kind: \"NewSwapQuoteStream\",\n        });\n      }\n    );\n\n    const normalized: SwapQuoteRequest = {\n      ...params,\n      swap: { ...params.swap, amount: toBigInt(params.swap.amount) },\n    };\n\n    const message: ClientRequest = {\n      id: requestId,\n      data: { NewSwapQuoteStream: normalized },\n    };\n    this.send(message);\n\n    return promise;\n  }\n\n  public stopStream(streamId: number): Promise<StopStreamResponse> {\n    const requestId = this.nextRequestId();\n\n    const promise = new Promise<StopStreamResponse>((resolve, reject) => {\n      this.pending.set(requestId, {\n        resolve: resolve as Resolver<unknown>,\n        reject,\n        kind: \"StopStream\",\n      });\n    });\n\n    const message: ClientRequest = {\n      id: requestId,\n      data: { StopStream: { id: streamId } },\n    };\n    this.send(message);\n\n    return promise;\n  }\n\n  // --- Send ---\n\n  private send(message: ClientRequest): void {\n    try {\n      const encoded = encoder.encode(message);\n      this.socket.send(encoded);\n    } catch (err) {\n      const req = this.pending.get(message.id);\n      if (req) {\n        this.pending.delete(message.id);\n        req.reject(err);\n      }\n    }\n  }\n\n  // --- Message handling ---\n\n  private handleMessage(raw: WebSocket.RawData): void {\n    let buf: Uint8Array;\n    if (raw instanceof ArrayBuffer) {\n      buf = new Uint8Array(raw);\n    } else if (Buffer.isBuffer(raw)) {\n      buf = new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength);\n    } else if (Array.isArray(raw)) {\n      buf = new Uint8Array(Buffer.concat(raw));\n    } else {\n      return;\n    }\n\n    let message: ServerMessage;\n    try {\n      message = decoder.decode(buf) as ServerMessage;\n    } catch {\n      this.socket.close(3002, \"failed to decode message\");\n      return;\n    }\n\n    if (\"Response\" in message) {\n      this.handleResponse(message.Response);\n    } else if (\"Error\" in message) {\n      this.handleResponseError(message.Error);\n    } else if (\"StreamData\" in message) {\n      this.handleStreamData(message.StreamData);\n    } else if (\"StreamEnd\" in message) {\n      this.handleStreamEnd(message.StreamEnd);\n    }\n  }\n\n  private handleResponse(msg: ResponseSuccess): void {\n    const req = this.pending.get(msg.requestId);\n    if (!req) return;\n    this.pending.delete(msg.requestId);\n\n    if (\"NewSwapQuoteStream\" in msg.data && req.kind === \"NewSwapQuoteStream\") {\n      const streamInfo = msg.stream;\n      if (!streamInfo) {\n        req.reject(new Error(\"No stream associated with NewSwapQuoteStream response\"));\n        return;\n      }\n      const stream = new ReadableStream<SwapQuotes>({\n        start: (controller) => {\n          this.streams.set(streamInfo.id, controller);\n        },\n        cancel: () => {\n          return this.cancelStream(streamInfo.id);\n        },\n      });\n      const result: ResponseWithStream<QuoteSwapStreamResponse, SwapQuotes> = {\n        response: msg.data.NewSwapQuoteStream,\n        stream,\n        streamId: streamInfo.id,\n      };\n      req.resolve(result);\n    } else if (\"StreamStopped\" in msg.data && req.kind === \"StopStream\") {\n      req.resolve(msg.data.StreamStopped);\n    } else {\n      req.reject(new Error(`Unexpected response type for ${req.kind}`));\n    }\n  }\n\n  private handleResponseError(error: ResponseError): void {\n    const req = this.pending.get(error.requestId);\n    if (!req) return;\n    this.pending.delete(error.requestId);\n    req.reject(new ErrorResponse(error));\n  }\n\n  private handleStreamData(packet: StreamData): void {\n    const controller = this.streams.get(packet.id);\n    if (!controller) return;\n    if (packet.payload.SwapQuotes !== undefined) {\n      controller.enqueue(packet.payload.SwapQuotes);\n    }\n  }\n\n  private handleStreamEnd(packet: StreamEnd): void {\n    const controller = this.streams.get(packet.id);\n    if (!controller) return;\n    this.streams.delete(packet.id);\n    this.streamStopping.delete(packet.id);\n\n    if (packet.errorCode !== undefined) {\n      controller.error(new StreamError(packet));\n    } else {\n      controller.close();\n    }\n  }\n\n  private async cancelStream(streamId: number): Promise<void> {\n    if (this.streamStopping.get(streamId) || !this.streams.has(streamId)) return;\n    this.streamStopping.set(streamId, true);\n    await this.stopStream(streamId);\n  }\n\n  // --- Connection lifecycle ---\n\n  private rejectAll(error: Error): void {\n    for (const req of this.pending.values()) {\n      req.reject(error);\n    }\n    this.pending.clear();\n    for (const controller of this.streams.values()) {\n      controller.error(error);\n    }\n    this.streams.clear();\n    this.streamStopping.clear();\n  }\n\n  private handleClose(code: number, reason: string): void {\n    this._closed = true;\n    this.rejectAll(new ConnectionClosed(code, reason));\n    for (const listener of this.closeListeners) {\n      listener.resolve();\n    }\n    this.closeListeners = [];\n  }\n\n  private handleError(err: Error): void {\n    this.rejectAll(err);\n    this.socket.close(3002);\n  }\n}\n","// Shared Titan proxy response helpers — used by both SDK and web app\n// to deserialize, select, and build results from the HTTP proxy's\n// base64-serialized responses.\n\nimport {\n  AddressLookupTableAccount,\n  Connection,\n  PublicKey,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\n\n// --- Serialized (base64) types from the HTTP proxy ---\n\nexport interface SerializedInstruction {\n  p: string; // base64 program id\n  a: { p: string; s: boolean; w: boolean }[]; // base64 accounts\n  d: string; // base64 data\n}\n\nexport interface SerializedSwapRoute {\n  inAmount: number;\n  outAmount: number;\n  slippageBps: number;\n  platformFee?: { amount: number; fee_bps: number };\n  instructions: SerializedInstruction[];\n  addressLookupTables: string[]; // base64 encoded pubkeys\n  contextSlot?: number;\n  timeTaken?: number;\n}\n\nexport interface TitanProxySwapQuoteResponse {\n  quotes: { [providerId: string]: SerializedSwapRoute };\n  inputMint: string; // base64\n  outputMint: string; // base64\n  swapMode: string;\n  amount: number;\n}\n\nexport interface TitanProxyExactOutResponse {\n  inAmount: number;\n  outAmount: number;\n  otherAmountThreshold: string;\n  slippageBps: number;\n}\n\n// --- Deserialization ---\n\n/**\n * Titan's router stamps a read-only `jitodontfront…` MEV-guard account onto the\n * swap instruction. Jito refuses to bundle any transaction that touches a `jito*`\n * marker, so we drop it to keep the swap landable inside a Jito bundle (our\n * flashloan swaps are bundled).\n */\nexport const isJitoDontFront = (pubkey: PublicKey) =>\n  pubkey.toBase58().startsWith(\"jitodontfront\");\n\nexport function deserializeSerializedInstruction(\n  ix: SerializedInstruction,\n): TransactionInstruction {\n  return new TransactionInstruction({\n    programId: new PublicKey(Buffer.from(ix.p, \"base64\")),\n    keys: ix.a\n      .map((account) => ({\n        pubkey: new PublicKey(Buffer.from(account.p, \"base64\")),\n        isSigner: account.s,\n        isWritable: account.w,\n      }))\n      .filter((key) => !isJitoDontFront(key.pubkey)),\n    data: Buffer.from(ix.d, \"base64\"),\n  });\n}\n\n// --- Route selection ---\n\nexport function selectBestRoute<T extends { inAmount: number; outAmount: number }>(\n  quotes: { [id: string]: T },\n  swapMode: \"ExactIn\" | \"ExactOut\",\n): T | null {\n  const routes = Object.values(quotes);\n  if (routes.length === 0) return null;\n  return routes.reduce((best, route) => {\n    if (swapMode === \"ExactIn\") {\n      return route.outAmount > best.outAmount ? route : best;\n    } else {\n      return route.inAmount < best.inAmount ? route : best;\n    }\n  });\n}\n\n// --- Quote result builder ---\n\nexport interface TitanSwapQuoteResult {\n  inAmount: string;\n  outAmount: string;\n  otherAmountThreshold: string;\n  slippageBps: number;\n  platformFee?: { amount: string; feeBps: number };\n  contextSlot?: number;\n  timeTaken?: number;\n}\n\nexport function buildSwapQuoteResult(\n  route: {\n    inAmount: number | bigint;\n    outAmount: number | bigint;\n    slippageBps: number;\n    platformFee?: { amount: number | bigint; fee_bps: number };\n    contextSlot?: number;\n    timeTaken?: number;\n  },\n  swapMode: \"ExactIn\" | \"ExactOut\",\n): TitanSwapQuoteResult {\n  const slippageBps = route.slippageBps;\n  // The WebSocket/protobuf path decodes int64 amounts as BigInt; token amounts fit safely in a\n  // JS number, so coerce for the slippage float math (BigInt × number throws).\n  const outAmount = Number(route.outAmount);\n  const inAmount = Number(route.inAmount);\n\n  let otherAmountThreshold: string;\n  if (swapMode === \"ExactIn\") {\n    otherAmountThreshold = String(Math.floor(outAmount * (1 - slippageBps / 10000)));\n  } else {\n    otherAmountThreshold = String(Math.ceil(inAmount * (1 + slippageBps / 10000)));\n  }\n\n  return {\n    inAmount: String(route.inAmount),\n    outAmount: String(route.outAmount),\n    otherAmountThreshold,\n    slippageBps,\n    platformFee: route.platformFee\n      ? {\n          amount: String(route.platformFee.amount),\n          feeBps: route.platformFee.fee_bps,\n        }\n      : undefined,\n    contextSlot: route.contextSlot,\n    timeTaken: route.timeTaken,\n  };\n}\n\n// --- LUT resolution ---\n\nexport async function resolveLookupTables(\n  connection: Connection,\n  lutPubkeys: PublicKey[],\n): Promise<AddressLookupTableAccount[]> {\n  if (lutPubkeys.length === 0) return [];\n\n  const lutAccountsRaw = await connection.getMultipleAccountsInfo(lutPubkeys);\n\n  return lutAccountsRaw\n    .map((accountInfo, index) => {\n      if (!accountInfo) return null;\n      return new AddressLookupTableAccount({\n        key: lutPubkeys[index],\n        state: AddressLookupTableAccount.deserialize(accountInfo.data),\n      });\n    })\n    .filter((account): account is AddressLookupTableAccount => account !== null);\n}\n","// Titan Swap V3 gateway (REST) helpers.\n//\n// Unlike the legacy HTTP proxy path (which posts JSON to an app-side proxy that\n// translates to/from msgpack), this talks to the Titan gateway directly using\n// the msgpack wire protocol. It is meant to run server-side where the Titan API\n// key is available. V3 (`titanSwapVersion: 3`) + `transactionTemplate` let the\n// router size routes against the footprint of the rest of the transaction.\n//\n// Docs: developer-doc/swap-api/guides/transaction-template\n//       developer-doc/swap-api/reference/gateway/gateway-quote-swap\n\nimport { Encoder, decode } from \"@msgpack/msgpack\";\nimport { AddressLookupTableAccount, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { isJitoDontFront } from \"./helpers\";\nimport type { Instruction as TitanWireInstruction, SwapRoute } from \"./types\";\n\nconst msgpackEncoder = new Encoder({ useBigInt64: true });\n\n// --- Transaction template (wire format) ---\n//\n// Single-letter field names, raw bytes for pubkeys + instruction data. See the\n// \"Transaction Template\" guide. `i` = instructions sharing the tx, `a` = ALTs\n// already referenced (order is load-bearing), `m` = extra account metas.\n\nexport interface TitanTemplateLut {\n  /** ALT account address (32 raw bytes). */\n  p: Uint8Array;\n  /** Addresses stored inside the ALT, in order (32 raw bytes each). */\n  a: Uint8Array[];\n}\n\nexport interface TitanTransactionTemplate {\n  i: TitanWireInstruction[];\n  a: TitanTemplateLut[];\n  m: { p: Uint8Array; s: boolean; w: boolean }[];\n}\n\n/** Convert a web3.js instruction into Titan wire format (raw bytes). */\nexport function instructionToTitanWire(ix: TransactionInstruction): TitanWireInstruction {\n  return {\n    p: ix.programId.toBytes(),\n    a: ix.keys.map((k) => ({\n      p: k.pubkey.toBytes(),\n      s: k.isSigner,\n      w: k.isWritable,\n    })),\n    d: Uint8Array.from(ix.data),\n  };\n}\n\n/** Convert a web3.js ALT into Titan wire format (key + inner addresses). */\nexport function lutToTitanWire(lut: AddressLookupTableAccount): TitanTemplateLut {\n  return {\n    p: lut.key.toBytes(),\n    a: lut.state.addresses.map((a) => a.toBytes()),\n  };\n}\n\n/**\n * Build a Titan `transactionTemplate` from the surrounding (non-swap) footprint.\n * ALT order is preserved — pass them in the order the final message will use.\n */\nexport function buildTitanTemplate(footprint: {\n  instructions: TransactionInstruction[];\n  luts: AddressLookupTableAccount[];\n  extraAccountMetas?: { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }[];\n}): TitanTransactionTemplate {\n  return {\n    i: footprint.instructions.map(instructionToTitanWire),\n    a: footprint.luts.map(lutToTitanWire),\n    m: (footprint.extraAccountMetas ?? []).map((m) => ({\n      p: m.pubkey.toBytes(),\n      s: m.isSigner,\n      w: m.isWritable,\n    })),\n  };\n}\n\n/** msgpack-encode then base64 a template for the gateway query string. */\nexport function encodeTitanTemplate(template: TitanTransactionTemplate): string {\n  return Buffer.from(msgpackEncoder.encode(template)).toString(\"base64\");\n}\n\n// --- Gateway quote/swap (V3) ---\n\nexport interface TitanGatewayQuoteParams {\n  /** Gateway base path, e.g. `https://<host>/api/v1`. `/quote/swap` is appended. */\n  basePath: string;\n  apiKey?: string;\n  headers?: Record<string, string>;\n\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  userPublicKey: string;\n  outputAccount: string;\n  slippageBps?: number;\n  swapMode?: \"ExactIn\" | \"ExactOut\";\n  dexes?: string[];\n  excludeDexes?: string[];\n  onlyDirectRoutes?: boolean;\n  /** Allowlist of quote providers by id. The gateway has no exclude-list, so to\n   *  drop a provider (e.g. Titan-DART) we list the ones we want. */\n  providers?: string[];\n\n  /** msgpack+base64 template. Mutually exclusive with the size/account limits\n   *  below. Note: sent as a query-string value, so a template that embeds large\n   *  ALTs can exceed the gateway's URI limit (414) — prefer the numeric limits\n   *  for flashloan footprints that reference big lookup tables. */\n  transactionTemplate?: string;\n\n  /** Numeric sizing (small query params; safe for LUT-heavy footprints). */\n  addSizeConstraint?: boolean;\n  sizeConstraint?: number;\n  accountsLimitTotal?: number;\n  accountsLimitWritable?: number;\n\n  feeBps?: number;\n  feeAccount?: string;\n}\n\nexport interface TitanGatewayQuoteResponse {\n  quotes: { [id: string]: SwapRoute };\n  metadata?: { ExpectedWinner?: string };\n}\n\n/**\n * Fetch a V3 quote/swap from the Titan gateway and return the best route.\n * Honors the gateway's `ExpectedWinner` when present, otherwise falls back to\n * `selectBestRoute` semantics (max out for ExactIn, min in for ExactOut).\n */\nexport async function fetchTitanQuoteSwapV3(\n  params: TitanGatewayQuoteParams\n): Promise<{ route: SwapRoute; raw: TitanGatewayQuoteResponse }> {\n  const {\n    basePath,\n    apiKey,\n    headers,\n    inputMint,\n    outputMint,\n    amount,\n    userPublicKey,\n    outputAccount,\n    slippageBps,\n    swapMode,\n    dexes,\n    excludeDexes,\n    onlyDirectRoutes,\n    providers,\n    transactionTemplate,\n    addSizeConstraint,\n    sizeConstraint,\n    accountsLimitTotal,\n    accountsLimitWritable,\n    feeBps,\n    feeAccount,\n  } = params;\n\n  const query = new URLSearchParams({\n    inputMint,\n    outputMint,\n    amount: String(amount),\n    userPublicKey,\n    outputAccount,\n    titanSwapVersion: \"3\",\n    simulate: \"false\",\n  });\n  if (slippageBps !== undefined) query.set(\"slippageBps\", String(slippageBps));\n  if (swapMode) query.set(\"swapMode\", swapMode);\n  if (dexes?.length) query.set(\"dexes\", dexes.join(\",\"));\n  if (excludeDexes?.length) query.set(\"excludeDexes\", excludeDexes.join(\",\"));\n  if (providers?.length) query.set(\"providers\", providers.join(\",\"));\n  if (onlyDirectRoutes) query.set(\"onlyDirectRoutes\", \"true\");\n  if (transactionTemplate) {\n    query.set(\"transactionTemplate\", transactionTemplate);\n  } else {\n    // Numeric sizing (mutually exclusive with the template).\n    if (addSizeConstraint) query.set(\"addSizeConstraint\", \"true\");\n    if (sizeConstraint !== undefined) query.set(\"sizeConstraint\", String(sizeConstraint));\n    if (accountsLimitTotal !== undefined) {\n      query.set(\"accountsLimitTotal\", String(accountsLimitTotal));\n    }\n    if (accountsLimitWritable !== undefined) {\n      query.set(\"accountsLimitWritable\", String(accountsLimitWritable));\n    }\n  }\n  if (feeBps !== undefined && feeAccount) {\n    query.set(\"feeBps\", String(feeBps));\n    query.set(\"feeAccount\", feeAccount);\n  }\n\n  const response = await fetch(`${basePath}/quote/swap?${query.toString()}`, {\n    method: \"GET\",\n    headers: {\n      Accept: \"application/vnd.msgpack\",\n      ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n      ...(headers ?? {}),\n    },\n  });\n\n  if (!response.ok) {\n    const text = await response.text().catch(() => \"\");\n    throw new Error(`Titan gateway error (${response.status}): ${text || response.statusText}`);\n  }\n\n  // The gateway occasionally returns a truncated / non-msgpack body (e.g. an\n  // empty \"no route\" response); decode it defensively so callers get a clean\n  // error instead of an opaque msgpack RangeError.\n  let raw: TitanGatewayQuoteResponse;\n  try {\n    raw = decode(new Uint8Array(await response.arrayBuffer())) as TitanGatewayQuoteResponse;\n  } catch {\n    throw new Error(\n      `Titan gateway returned an undecodable response for ${inputMint} -> ${outputMint}`\n    );\n  }\n\n  const route = selectGatewayRoute(raw, swapMode ?? \"ExactIn\");\n  if (!route) {\n    throw new Error(`No Titan V3 route found for ${inputMint} -> ${outputMint}`);\n  }\n  return { route, raw };\n}\n\n/**\n * A route is only usable if it quotes a real amount. Titan occasionally returns\n * a single `Titan-DART` (RFQ / private-swap) route that quotes `outAmount: 0` —\n * DART settles via a separate auction/signature and isn't composable inside a\n * flashloan, so we treat zero-amount routes as non-viable.\n */\nfunction isViableRoute(route: SwapRoute, swapMode: \"ExactIn\" | \"ExactOut\"): boolean {\n  return swapMode === \"ExactIn\" ? route.outAmount > 0 : route.inAmount > 0;\n}\n\n/**\n * Pick the best usable route from a quotes map, honoring Titan's\n * `ExpectedWinner` when present and skipping non-viable (zero-amount) routes.\n * Shared by the gateway REST path and the WebSocket adapter.\n */\nexport function selectGatewayRoute(\n  raw: TitanGatewayQuoteResponse,\n  swapMode: \"ExactIn\" | \"ExactOut\"\n): SwapRoute | null {\n  const viable = Object.values(raw.quotes ?? {}).filter((r) => isViableRoute(r, swapMode));\n  if (viable.length === 0) return null;\n\n  // Honor Titan's recommended winner only when it is itself a viable route.\n  const winnerId = raw.metadata?.ExpectedWinner;\n  if (winnerId) {\n    const winner = raw.quotes[winnerId];\n    if (winner && isViableRoute(winner, swapMode)) return winner;\n  }\n\n  return viable.reduce((best, route) =>\n    swapMode === \"ExactIn\"\n      ? route.outAmount > best.outAmount\n        ? route\n        : best\n      : route.inAmount < best.inAmount\n        ? route\n        : best\n  );\n}\n\n/** Deserialize a Titan wire instruction (raw bytes) into a web3.js instruction. */\nexport function deserializeTitanWireInstruction(ix: TitanWireInstruction): TransactionInstruction {\n  return new TransactionInstruction({\n    programId: new PublicKey(ix.p),\n    keys: ix.a\n      .map((account) => ({\n        pubkey: new PublicKey(account.p),\n        isSigner: account.s,\n        isWritable: account.w,\n      }))\n      .filter((key) => !isJitoDontFront(key.pubkey)),\n    data: Buffer.from(ix.d),\n  });\n}\n","import { Connection, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { SwapApiConfig, SwapIxsResult, SwapProvider, SwapQuoteResult } from \"../types\";\n\nimport { getAssociatedTokenAddressSync } from \"~/vendor/spl\";\nimport {\n  V1Client,\n  type Instruction as TitanInstruction,\n  type SwapQuotes as TitanSwapQuotes,\n  type TitanProxySwapQuoteResponse,\n  type TitanProxyExactOutResponse,\n  deserializeSerializedInstruction,\n  isJitoDontFront,\n  selectBestRoute,\n  buildSwapQuoteResult,\n  resolveLookupTables,\n  SwapMode,\n} from \"~/vendor/titan\";\n\n// --- Constants ---\n\nconst TITAN_FEE_WALLET = new PublicKey(\"FEES6XLN7dMz2iBwKab9Hri9Kwc4WJ6TmDAiT4BNhyej\");\n\n// --- Fee account helpers ---\n\nconst getTitanFeeAccount = (mint: PublicKey): PublicKey => {\n  return getAssociatedTokenAddressSync(mint, TITAN_FEE_WALLET, true);\n};\n\nexport const checkTitanFeeAccount = async (\n  connection: Connection,\n  mint: PublicKey\n): Promise<{ feeAccount: PublicKey; hasFeeAccount: boolean; feeWallet: PublicKey }> => {\n  const feeAccount = getTitanFeeAccount(mint);\n  const hasFeeAccount = !!(await connection.getAccountInfo(feeAccount));\n  return { feeAccount, hasFeeAccount, feeWallet: TITAN_FEE_WALLET };\n};\n\n// --- Instruction deserializer ---\n\nfunction deserializeTitanInstruction(ix: TitanInstruction): TransactionInstruction {\n  return new TransactionInstruction({\n    programId: new PublicKey(ix.p),\n    keys: ix.a\n      .map((account) => ({\n        pubkey: new PublicKey(account.p),\n        isSigner: account.s,\n        isWritable: account.w,\n      }))\n      .filter((key) => !isJitoDontFront(key.pubkey)),\n    data: Buffer.from(ix.d),\n  });\n}\n\n// --- Params types ---\n\nexport type TitanQuoteParams = {\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  swapMode: \"ExactIn\" | \"ExactOut\";\n  slippageBps?: number;\n  platformFeeBps?: number;\n  directRoutesOnly?: boolean;\n  sizeConstraint?: number;\n  maxSwapAccounts?: number;\n  maxSwapTotalAccounts?: number;\n};\n\nexport type GetTitanSwapIxsParams = {\n  quoteParams: TitanQuoteParams;\n  authority: PublicKey;\n  connection: Connection;\n  destinationTokenAccount: PublicKey;\n  apiConfig?: SwapApiConfig;\n};\n\nexport type GetTitanExactOutEstimateParams = {\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  slippageBps?: number;\n  apiConfig?: SwapApiConfig;\n};\n\nexport const getTitanSwapIxsForFlashloan = async ({\n  quoteParams,\n  authority,\n  connection,\n  destinationTokenAccount,\n  apiConfig,\n}: GetTitanSwapIxsParams): Promise<SwapIxsResult> => {\n  const basePath = apiConfig?.basePath ?? \"\";\n\n  // Only attach a platform fee / feeAccount when both:\n  //   1. the on-chain referral ATA exists, AND\n  //   2. the caller actually requested a non-zero platformFeeBps.\n  // Mirrors the Jupiter path so callers get consistent behaviour and Titan\n  // never receives a `feeAccount` paired with a 0/undefined `feeBps`.\n  const feeMint = new PublicKey(\n    quoteParams.swapMode === \"ExactIn\" ? quoteParams.outputMint : quoteParams.inputMint\n  );\n  const { feeAccount, hasFeeAccount } = await checkTitanFeeAccount(connection, feeMint);\n  const useFeeAccount = hasFeeAccount && !!quoteParams.platformFeeBps;\n\n  let finalQuoteParams = quoteParams;\n  if (!useFeeAccount) {\n    if (!hasFeeAccount) {\n      console.warn(\"Warning: Titan fee account ATA does not exist, disabling platform fee\");\n    }\n    finalQuoteParams = {\n      ...quoteParams,\n      platformFeeBps: undefined,\n    };\n  }\n\n  const effectiveFeeAccount = useFeeAccount ? feeAccount : undefined;\n\n  if (basePath.startsWith(\"wss://\") || basePath.startsWith(\"ws://\")) {\n    return getTitanSwapIxsViaWebSocket(\n      { quoteParams: finalQuoteParams, authority, connection, destinationTokenAccount, apiConfig },\n      effectiveFeeAccount\n    );\n  } else {\n    return getTitanSwapIxsViaHttpProxy(\n      { quoteParams: finalQuoteParams, authority, connection, destinationTokenAccount, apiConfig },\n      effectiveFeeAccount\n    );\n  }\n};\n\n// --- Swap IXs: WebSocket path ---\n\nasync function getTitanSwapIxsViaWebSocket(\n  params: GetTitanSwapIxsParams,\n  feeAccount?: PublicKey\n): Promise<SwapIxsResult> {\n  const { quoteParams, authority, connection, destinationTokenAccount, apiConfig } = params;\n  const {\n    inputMint,\n    outputMint,\n    amount,\n    swapMode,\n    slippageBps,\n    platformFeeBps,\n    directRoutesOnly,\n    sizeConstraint,\n    maxSwapAccounts,\n    maxSwapTotalAccounts,\n  } = quoteParams;\n\n  const wsUrl = apiConfig?.basePath;\n  if (!wsUrl) {\n    throw new Error(\"Titan WebSocket URL is required (apiConfig.basePath)\");\n  }\n\n  const txParams: Record<string, unknown> = {\n    userPublicKey: authority.toBytes(),\n    outputAccount: destinationTokenAccount.toBytes(),\n  };\n  if (feeAccount && platformFeeBps) {\n    txParams.feeBps = platformFeeBps;\n    txParams.feeAccount = feeAccount.toBytes();\n  }\n\n  const client = await V1Client.connect(wsUrl);\n\n  try {\n    const { stream } = await client.newSwapQuoteStream({\n      swap: {\n        inputMint: new PublicKey(inputMint).toBytes(),\n        outputMint: new PublicKey(outputMint).toBytes(),\n        amount,\n        swapMode,\n        slippageBps,\n        onlyDirectRoutes: directRoutesOnly,\n        addSizeConstraint: sizeConstraint !== undefined,\n        sizeConstraint,\n        accountsLimitWritable: maxSwapAccounts,\n        accountsLimitTotal: maxSwapTotalAccounts,\n      },\n      transaction: txParams,\n      update: {\n        num_quotes: 3,\n      },\n    } as unknown as Parameters<typeof client.newSwapQuoteStream>[0]);\n\n    const reader = stream.getReader();\n    const { value: swapQuotes, done } = await reader.read();\n    reader.releaseLock();\n\n    if (done || !swapQuotes) {\n      throw new Error(\"Titan swap quote stream ended without data\");\n    }\n\n    const quotes = swapQuotes as unknown as TitanSwapQuotes;\n    const bestRoute = selectBestRoute(quotes.quotes, swapMode);\n    if (!bestRoute) {\n      throw new Error(`No Titan swap routes found for ${inputMint} -> ${outputMint}`);\n    }\n\n    // Deserialize instructions\n    const swapInstructions = bestRoute.instructions.map(deserializeTitanInstruction);\n\n    // Resolve LUTs\n    const lutPubkeys = bestRoute.addressLookupTables.map((lutBytes) => new PublicKey(lutBytes));\n    const addressLookupTableAddresses = await resolveLookupTables(connection, lutPubkeys);\n\n    // Build quote result\n    const quoteResponse = {\n      ...buildSwapQuoteResult(bestRoute, swapMode),\n      provider: SwapProvider.TITAN,\n    };\n\n    return {\n      swapInstructions,\n      setupInstructions: [],\n      addressLookupTableAddresses,\n      quoteResponse,\n    };\n  } finally {\n    if (!client.closed) {\n      await client.close();\n    }\n  }\n}\n\n// --- Swap IXs: HTTP proxy path ---\n\nasync function getTitanSwapIxsViaHttpProxy(\n  params: GetTitanSwapIxsParams,\n  feeAccount?: PublicKey\n): Promise<SwapIxsResult> {\n  const { quoteParams, authority, connection, destinationTokenAccount, apiConfig } = params;\n  const {\n    inputMint,\n    outputMint,\n    amount,\n    swapMode,\n    slippageBps,\n    platformFeeBps,\n    directRoutesOnly,\n    sizeConstraint,\n    maxSwapAccounts,\n    maxSwapTotalAccounts,\n  } = quoteParams;\n\n  const basePath = apiConfig?.basePath;\n  if (!basePath) {\n    throw new Error(\"Titan proxy URL is required (apiConfig.basePath)\");\n  }\n\n  const txBody: Record<string, unknown> = {\n    userPublicKey: authority.toBase58(),\n    outputAccount: destinationTokenAccount.toBase58(),\n  };\n  if (feeAccount && platformFeeBps) {\n    txBody.feeBps = platformFeeBps;\n    txBody.feeAccount = feeAccount.toBase58();\n  }\n\n  const response = await fetch(`${basePath}/swap-quote`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      ...(apiConfig?.headers ?? {}),\n    },\n    body: JSON.stringify({\n      swap: {\n        inputMint,\n        outputMint,\n        amount,\n        swapMode,\n        slippageBps,\n        onlyDirectRoutes: directRoutesOnly,\n        addSizeConstraint: sizeConstraint !== undefined,\n        sizeConstraint,\n        accountsLimitWritable: maxSwapAccounts,\n        accountsLimitTotal: maxSwapTotalAccounts,\n      },\n      transaction: txBody,\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n    throw new Error(\n      `Titan proxy error (${response.status}): ${(errorData as { message?: string }).message ?? response.statusText}`\n    );\n  }\n\n  const data = (await response.json()) as TitanProxySwapQuoteResponse;\n\n  const bestRoute = selectBestRoute(data.quotes, swapMode);\n  if (!bestRoute) {\n    throw new Error(`No Titan swap routes found for ${inputMint} -> ${outputMint}`);\n  }\n\n  // Deserialize instructions from base64\n  const swapInstructions = bestRoute.instructions.map(deserializeSerializedInstruction);\n\n  // Resolve LUTs from base64 pubkeys\n  const lutPubkeys = bestRoute.addressLookupTables.map(\n    (b64) => new PublicKey(Buffer.from(b64, \"base64\"))\n  );\n  const addressLookupTableAddresses = await resolveLookupTables(connection, lutPubkeys);\n\n  const quoteResponse = {\n    ...buildSwapQuoteResult(bestRoute, swapMode),\n    provider: SwapProvider.TITAN,\n  };\n\n  return {\n    swapInstructions,\n    setupInstructions: [],\n    addressLookupTableAddresses,\n    quoteResponse,\n  };\n}\n\n// --- ExactOut estimate: public API ---\n\n/**\n * @deprecated Provider ExactOut quotes are unreliable; size target-output swaps\n * from a market-price calculation and route ExactIn instead.\n */\nexport const getTitanExactOutEstimate = async (\n  params: GetTitanExactOutEstimateParams\n): Promise<{ otherAmountThreshold: string; quoteResult: SwapQuoteResult }> => {\n  const basePath = params.apiConfig?.basePath ?? \"\";\n\n  if (basePath.startsWith(\"wss://\") || basePath.startsWith(\"ws://\")) {\n    return getTitanExactOutViaWebSocket(params);\n  } else {\n    return getTitanExactOutViaHttpProxy(params);\n  }\n};\n\n// --- ExactOut estimate: WebSocket path ---\n\nasync function getTitanExactOutViaWebSocket(\n  params: GetTitanExactOutEstimateParams\n): Promise<{ otherAmountThreshold: string; quoteResult: SwapQuoteResult }> {\n  const { inputMint, outputMint, amount, slippageBps, apiConfig } = params;\n\n  const wsUrl = apiConfig?.basePath;\n  if (!wsUrl) {\n    throw new Error(\"Titan WebSocket URL is required (apiConfig.basePath)\");\n  }\n\n  const client = await V1Client.connect(wsUrl);\n\n  try {\n    const { stream } = await client.newSwapQuoteStream({\n      swap: {\n        inputMint: new PublicKey(inputMint).toBytes(),\n        outputMint: new PublicKey(outputMint).toBytes(),\n        amount,\n        swapMode: SwapMode.ExactOut,\n        slippageBps,\n      },\n      transaction: {\n        userPublicKey: new Uint8Array(32), // placeholder, not executing\n      },\n      update: {\n        num_quotes: 1,\n      },\n    });\n\n    const reader = stream.getReader();\n    const { value: swapQuotes, done } = await reader.read();\n    reader.releaseLock();\n\n    if (done || !swapQuotes) {\n      throw new Error(\"Titan ExactOut estimate stream ended without data\");\n    }\n\n    const quotes = swapQuotes as unknown as TitanSwapQuotes;\n    const bestRoute = selectBestRoute(quotes.quotes, \"ExactOut\");\n    if (!bestRoute) {\n      throw new Error(`No Titan ExactOut routes found for ${inputMint} -> ${outputMint}`);\n    }\n\n    const quoteResult = {\n      ...buildSwapQuoteResult(bestRoute, \"ExactOut\"),\n      provider: SwapProvider.TITAN,\n    };\n\n    return {\n      otherAmountThreshold: quoteResult.otherAmountThreshold,\n      quoteResult,\n    };\n  } finally {\n    if (!client.closed) {\n      await client.close();\n    }\n  }\n}\n\n// --- ExactOut estimate: HTTP proxy path ---\n\nasync function getTitanExactOutViaHttpProxy(\n  params: GetTitanExactOutEstimateParams\n): Promise<{ otherAmountThreshold: string; quoteResult: SwapQuoteResult }> {\n  const { inputMint, outputMint, amount, slippageBps, apiConfig } = params;\n\n  const basePath = apiConfig?.basePath;\n  if (!basePath) {\n    throw new Error(\"Titan proxy URL is required (apiConfig.basePath)\");\n  }\n\n  const response = await fetch(`${basePath}/exact-out-estimate`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      ...(apiConfig?.headers ?? {}),\n    },\n    body: JSON.stringify({\n      inputMint,\n      outputMint,\n      amount,\n      slippageBps,\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n    throw new Error(\n      `Titan proxy error (${response.status}): ${(errorData as { message?: string }).message ?? response.statusText}`\n    );\n  }\n\n  const data = (await response.json()) as TitanProxyExactOutResponse;\n\n  const quoteResult: SwapQuoteResult = {\n    inAmount: String(data.inAmount),\n    outAmount: String(data.outAmount),\n    otherAmountThreshold: data.otherAmountThreshold,\n    slippageBps: data.slippageBps,\n    provider: SwapProvider.TITAN,\n  };\n\n  return {\n    otherAmountThreshold: data.otherAmountThreshold,\n    quoteResult,\n  };\n}\n","// Minimal Jupiter Swap API client — replaces the runtime of @jup-ag/api.\n//\n// The generated @jup-ag/api client hardcodes the legacy\n// `https://quote-api.jup.ag/v6` base URL and ignores a caller-supplied\n// basePath, so we reimplement the two endpoints the SDK uses against Jupiter's\n// current Swap API (https://dev.jup.ag/docs/swap-api). Only `GET /quote` and\n// `POST /swap-instructions` are implemented.\n\nimport type {\n  BuildGetRequest,\n  BuildResponse,\n  QuoteGetRequest,\n  QuoteResponse,\n  SwapInstructionsResponse,\n  SwapRequest,\n} from \"./types\";\n\n// Free tier. Callers with an API key typically override this with the paid\n// base `https://api.jup.ag/swap/v1` via `basePath`.\nconst DEFAULT_BASE_PATH = \"https://lite-api.jup.ag/swap/v1\";\n\n// Router base for the `/build` endpoint (paid). The Router lives under\n// `/swap/v2`, distinct from the Metis `/swap/v1` base above.\nconst DEFAULT_ROUTER_BASE_PATH = \"https://api.jup.ag/swap/v2\";\n\nexport interface JupiterClientConfig {\n  /** Override the API base URL (e.g. the paid `https://api.jup.ag/swap/v1`). */\n  basePath?: string;\n  /** Override the Router base URL for `/build` (default `.../swap/v2`). */\n  routerBasePath?: string;\n  /** API key, sent as the `x-api-key` header. */\n  apiKey?: string;\n  /** Extra headers applied to every request. */\n  headers?: Record<string, string>;\n}\n\nexport class JupiterApiError extends Error {\n  status: number;\n  body: string;\n\n  constructor(status: number, body: string) {\n    super(`Jupiter API request failed with status ${status}: ${body}`);\n    this.name = \"JupiterApiError\";\n    Object.setPrototypeOf(this, JupiterApiError.prototype);\n    this.status = status;\n    this.body = body;\n  }\n}\n\nfunction buildQuoteSearchParams(request: object): URLSearchParams {\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(request)) {\n    if (value === undefined || value === null) continue;\n    // Arrays (dexes/excludeDexes) are comma-separated per the Jupiter spec.\n    if (Array.isArray(value)) {\n      if (value.length > 0) params.append(key, value.join(\",\"));\n      continue;\n    }\n    params.append(key, String(value));\n  }\n  return params;\n}\n\nexport interface JupiterClient {\n  quoteGet(request: QuoteGetRequest): Promise<QuoteResponse>;\n  swapInstructionsPost(request: { swapRequest: SwapRequest }): Promise<SwapInstructionsResponse>;\n  /** Router: one-call quote + raw instructions. ExactIn only. */\n  buildGet(request: BuildGetRequest): Promise<BuildResponse>;\n}\n\nexport function createJupiterClient(config: JupiterClientConfig = {}): JupiterClient {\n  const basePath = (config.basePath ?? DEFAULT_BASE_PATH).replace(/\\/+$/, \"\");\n  const routerBasePath = (config.routerBasePath ?? DEFAULT_ROUTER_BASE_PATH).replace(/\\/+$/, \"\");\n  const baseHeaders: Record<string, string> = { ...config.headers };\n  if (config.apiKey) baseHeaders[\"x-api-key\"] = config.apiKey;\n\n  const requestAt = async <T>(base: string, path: string, init: RequestInit): Promise<T> => {\n    const response = await fetch(`${base}${path}`, init);\n    if (!response.ok) {\n      const body = await response.text().catch(() => \"\");\n      throw new JupiterApiError(response.status, body);\n    }\n    return (await response.json()) as T;\n  };\n\n  return {\n    quoteGet(quoteRequest) {\n      const search = buildQuoteSearchParams(quoteRequest);\n      return requestAt<QuoteResponse>(basePath, `/quote?${search.toString()}`, {\n        method: \"GET\",\n        headers: baseHeaders,\n      });\n    },\n    swapInstructionsPost({ swapRequest }) {\n      return requestAt<SwapInstructionsResponse>(basePath, `/swap-instructions`, {\n        method: \"POST\",\n        headers: { ...baseHeaders, \"content-type\": \"application/json\" },\n        body: JSON.stringify(swapRequest),\n      });\n    },\n    buildGet(buildRequest) {\n      const search = buildQuoteSearchParams(buildRequest);\n      return requestAt<BuildResponse>(routerBasePath, `/build?${search.toString()}`, {\n        method: \"GET\",\n        headers: baseHeaders,\n      });\n    },\n  };\n}\n","import {\n  Connection,\n  PublicKey,\n  TransactionInstruction,\n  AddressLookupTableAccount,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport {\n  SwapApiConfig,\n  SwapIxsResult,\n  SwapOpts,\n  SwapProvider,\n  SwapProviderEntry,\n  SwapQuoteResult,\n} from \"../types\";\n\nimport { getJupiterSwapIxsForFlashloan, toJupiterConfig } from \"./jupiter.utils\";\nimport { getTitanSwapIxsForFlashloan, getTitanExactOutEstimate } from \"./titan.utils\";\n\nimport { TransactionBuildingError } from \"~/errors\";\nimport { createJupiterClient, type QuoteResponse } from \"~/vendor/jupiter\";\n\n/** The canonical shape a resolved pinned route yields — mirrors an engine-selected route. */\nexport interface ResolvedPinnedSwapRoute {\n  swapInstructions: TransactionInstruction[];\n  setupInstructions: TransactionInstruction[];\n  lookupTables: AddressLookupTableAccount[];\n  quoteResponse: SwapQuoteResult;\n  /** The route's guaranteed min-out (native) — what sizes the follow-up amount (deposit patch). */\n  outputAmountNative: BN;\n}\n\n/**\n * Resolve a caller-pinned swap route (`swapOpts.swapIxs`) into the engine-result shape, validating\n * the quote so a pinned route can never silently size a zero follow-up amount:\n *\n * - `otherAmountThreshold` (min-out) must be a positive integer — it becomes the loop's deposit\n *   byte-patch, exactly like an engine-selected route's min-out.\n * - `inAmount` must equal the flow's swap input (e.g. the loop's borrow, native units) — a\n *   mismatch means the route was quoted for a different size than the flow will actually swap.\n *\n * Throws plain `Error`s (not `TransactionBuildingError`) so caller-input mistakes are never\n * classified as decomposable swap failures (which would wrongly engage the bridged fallback).\n */\nexport function resolvePinnedSwapRoute(\n  swapIxs: NonNullable<SwapOpts[\"swapIxs\"]>,\n  expectedInAmountNative: BN | number\n): ResolvedPinnedSwapRoute {\n  const { quoteResponse } = swapIxs;\n  const expectedIn = new BN(expectedInAmountNative);\n\n  let minOut: BN;\n  try {\n    minOut = new BN(quoteResponse.otherAmountThreshold);\n  } catch {\n    minOut = new BN(0);\n  }\n  if (minOut.lten(0)) {\n    throw new Error(\n      `Pinned swap route (swapOpts.swapIxs) has no usable min-out: quoteResponse.otherAmountThreshold ` +\n        `is \"${quoteResponse.otherAmountThreshold}\". The min-out sizes the follow-up amount (e.g. the ` +\n        `loop's deposit) — without it the flow would deposit zero collateral and fail init health.`\n    );\n  }\n\n  const pinnedIn = new BN(quoteResponse.inAmount);\n  if (!pinnedIn.eq(expectedIn)) {\n    throw new Error(\n      `Pinned swap route (swapOpts.swapIxs) was quoted for a different input amount than the flow ` +\n        `will swap: quote inAmount=${pinnedIn.toString()}, flow swap input=${expectedIn.toString()} ` +\n        `(native units). Re-quote the pinned route for the exact flow amount.`\n    );\n  }\n\n  return {\n    swapInstructions: swapIxs.instructions,\n    setupInstructions: [],\n    lookupTables: swapIxs.lookupTables,\n    quoteResponse,\n    outputAmountNative: minOut,\n  };\n}\n\n// Helper to get swap provider function\nfunction getSwapProviderFn({\n  attemptProvider,\n  maxSwapTotalAccounts,\n  inputMint,\n  outputMint,\n  amount,\n  swapMode,\n  authority,\n  connection,\n  destinationTokenAccount,\n  swapOpts,\n  sizeConstraint,\n}: {\n  attemptProvider: SwapProvider;\n  maxSwapTotalAccounts?: number;\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  swapMode: \"ExactIn\" | \"ExactOut\";\n  authority: PublicKey;\n  connection: Connection;\n  destinationTokenAccount: PublicKey;\n  swapOpts: SwapOpts;\n  sizeConstraint?: number;\n}): ((apiConfig?: SwapApiConfig) => Promise<SwapIxsResult>) | undefined {\n  switch (attemptProvider) {\n    case SwapProvider.TITAN:\n      return (apiConfig) =>\n        getTitanSwapIxsForFlashloan({\n          quoteParams: {\n            inputMint,\n            outputMint,\n            amount,\n            swapMode,\n            slippageBps: swapOpts.swapConfig?.slippageBps,\n            platformFeeBps: swapOpts.swapConfig?.platformFeeBps,\n            directRoutesOnly: swapOpts.swapConfig?.directRoutesOnly,\n            sizeConstraint,\n            maxSwapTotalAccounts,\n          },\n          authority,\n          connection,\n          destinationTokenAccount,\n          apiConfig,\n        });\n    case SwapProvider.JUPITER:\n      return (apiConfig) =>\n        getJupiterSwapIxsForFlashloan({\n          quoteParams: {\n            inputMint,\n            outputMint,\n            amount,\n            swapMode,\n            dynamicSlippage: swapOpts.swapConfig\n              ? swapOpts.swapConfig.slippageMode === \"DYNAMIC\"\n              : true,\n            slippageBps: swapOpts.swapConfig?.slippageBps,\n            platformFeeBps: swapOpts.swapConfig?.platformFeeBps,\n            onlyDirectRoutes: swapOpts.swapConfig?.directRoutesOnly ?? false,\n          },\n          authority,\n          connection,\n          destinationTokenAccount,\n          apiConfig,\n          maxSwapAccounts: maxSwapTotalAccounts,\n        });\n    default:\n      return undefined;\n  }\n}\n\n// Helper to get exact out estimate provider function\nfunction getExactOutProviderFn({\n  attemptProvider,\n  inputMint,\n  outputMint,\n  amount,\n  swapOpts,\n  apiConfig,\n}: {\n  attemptProvider: SwapProvider;\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  swapOpts: SwapOpts;\n  apiConfig?: SwapApiConfig;\n}): ((apiConfig?: SwapApiConfig) => Promise<ExactOutEstimateResult>) | undefined {\n  switch (attemptProvider) {\n    case SwapProvider.TITAN:\n      return () =>\n        getTitanExactOutEstimate({\n          inputMint,\n          outputMint,\n          amount,\n          slippageBps: swapOpts.swapConfig?.slippageBps,\n          apiConfig,\n        });\n    case SwapProvider.JUPITER:\n      return async () => {\n        const jupiterApiClient = createJupiterClient(toJupiterConfig(apiConfig));\n\n        const estimateQuote = await jupiterApiClient.quoteGet({\n          inputMint,\n          outputMint,\n          amount,\n          swapMode: \"ExactOut\",\n          dynamicSlippage: swapOpts.swapConfig\n            ? swapOpts.swapConfig.slippageMode === \"DYNAMIC\"\n            : true,\n          slippageBps: swapOpts.swapConfig?.slippageBps,\n          // Match the bundle-compatible routing used by the executed flashloan\n          // swap so the ExactOut estimate reflects an achievable route.\n          forJitoBundle: true,\n        });\n\n        const quoteResult = mapJupiterQuoteToSwapQuoteResult(estimateQuote);\n        return { otherAmountThreshold: quoteResult.otherAmountThreshold, quoteResult };\n      };\n    default:\n      return undefined;\n  }\n}\n\n// --- Provider router ---\n\nexport type GetSwapIxsForFlashloanParams = {\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  swapMode: \"ExactIn\" | \"ExactOut\";\n  authority: PublicKey;\n  connection: Connection;\n  destinationTokenAccount: PublicKey;\n  swapOpts: SwapOpts;\n  sizeConstraint?: number;\n  maxSwapTotalAccounts?: number;\n};\n\nexport const getSwapIxsForFlashloan = async (\n  params: GetSwapIxsForFlashloanParams\n): Promise<SwapIxsResult> => {\n  const {\n    inputMint,\n    outputMint,\n    amount,\n    swapMode,\n    authority,\n    connection,\n    destinationTokenAccount,\n    swapOpts,\n    sizeConstraint,\n  } = params;\n\n  // Caller-pinned route override — validated so it can never size a zero follow-up amount.\n  if (swapOpts.swapIxs) {\n    const pinned = resolvePinnedSwapRoute(swapOpts.swapIxs, amount);\n    return {\n      swapInstructions: pinned.swapInstructions,\n      setupInstructions: pinned.setupInstructions,\n      addressLookupTableAddresses: pinned.lookupTables,\n      quoteResponse: pinned.quoteResponse,\n    };\n  }\n\n  const provider = swapOpts.swapConfig?.provider ?? SwapProvider.JUPITER;\n  const attempts: SwapProviderEntry[] = [\n    { provider, apiConfig: swapOpts.swapConfig?.apiConfig },\n    ...(swapOpts.swapConfig?.fallbackProviders ?? []),\n  ];\n\n  let lastError: unknown;\n\n  for (const { provider: attemptProvider, apiConfig } of attempts) {\n    const fn = getSwapProviderFn({\n      attemptProvider,\n      maxSwapTotalAccounts: params.maxSwapTotalAccounts,\n      inputMint,\n      outputMint,\n      amount,\n      swapMode,\n      authority,\n      connection,\n      destinationTokenAccount,\n      swapOpts,\n      sizeConstraint,\n    });\n\n    if (!fn) continue;\n\n    try {\n      return await fn(apiConfig);\n    } catch (err) {\n      if (err instanceof TransactionBuildingError) throw err;\n      lastError = err;\n      console.warn(`[swap] ${attemptProvider} failed:`, err instanceof Error ? err.message : err);\n    }\n  }\n\n  // All providers failed — throw typed error\n  const firstProvider = attempts[0]?.provider ?? \"Swap\";\n  throw TransactionBuildingError.swapQuoteFailed(\n    firstProvider,\n    inputMint,\n    outputMint,\n    (lastError as Error)?.message ?? \"No swap route available\"\n  );\n};\n\n// --- ExactOut estimate router (used by swap-debt) ---\n\nexport type GetExactOutEstimateParams = {\n  inputMint: string;\n  outputMint: string;\n  amount: number;\n  swapOpts: SwapOpts;\n  connection: Connection;\n};\n\nexport type ExactOutEstimateResult = {\n  otherAmountThreshold: string;\n  quoteResult: SwapQuoteResult;\n};\n\n/**\n * @deprecated Do not use provider ExactOut quotes — they are unreliable and the\n * Jupiter Router (`/build`) is ExactIn-only. Size a target-output swap from a\n * market-price calculation and route ExactIn instead (see `makeSwapDebtTx`).\n */\nexport const getExactOutEstimate = async (\n  params: GetExactOutEstimateParams\n): Promise<ExactOutEstimateResult> => {\n  const { inputMint, outputMint, amount, swapOpts } = params;\n\n  const provider = swapOpts.swapConfig?.provider ?? SwapProvider.JUPITER;\n  const attempts: SwapProviderEntry[] = [\n    { provider, apiConfig: swapOpts.swapConfig?.apiConfig },\n    ...(swapOpts.swapConfig?.fallbackProviders ?? []),\n  ];\n\n  let lastError: unknown;\n\n  for (const { provider: attemptProvider, apiConfig } of attempts) {\n    const fn = getExactOutProviderFn({\n      attemptProvider,\n      inputMint,\n      outputMint,\n      amount,\n      swapOpts,\n      apiConfig,\n    });\n\n    if (!fn) continue;\n\n    try {\n      return await fn(apiConfig);\n    } catch (err) {\n      if (err instanceof TransactionBuildingError) throw err;\n      lastError = err;\n      console.warn(\n        `[exactout] ${attemptProvider} failed:`,\n        err instanceof Error ? err.message : err\n      );\n    }\n  }\n\n  // All providers failed — throw typed error\n  const firstProvider = attempts[0]?.provider ?? \"Swap\";\n  throw TransactionBuildingError.swapQuoteFailed(\n    firstProvider,\n    inputMint,\n    outputMint,\n    (lastError as Error)?.message ?? \"No swap route available\"\n  );\n};\n\n// --- Jupiter QuoteResponse → SwapQuoteResult mapper ---\n\nexport function mapJupiterQuoteToSwapQuoteResult(quote: QuoteResponse): SwapQuoteResult {\n  return {\n    inAmount: quote.inAmount,\n    outAmount: quote.outAmount,\n    otherAmountThreshold: quote.otherAmountThreshold,\n    slippageBps: quote.slippageBps,\n    platformFee: quote.platformFee\n      ? {\n          amount: quote.platformFee.amount ?? \"0\",\n          feeBps: quote.platformFee.feeBps ?? 0,\n        }\n      : undefined,\n    priceImpactPct: quote.priceImpactPct,\n    contextSlot: quote.contextSlot,\n    timeTaken: quote.timeTaken,\n    provider: SwapProvider.JUPITER,\n  };\n}\n","import {\n  AddressLookupTableAccount,\n  Connection,\n  PublicKey,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\n\nimport { SwapApiConfig, SwapIxsResult } from \"../types\";\n\nimport { mapJupiterQuoteToSwapQuoteResult } from \"./swap.utils\";\n\nimport { ADDRESS_LOOKUP_TABLE_FOR_SWAP } from \"~/constants\";\nimport {\n  createJupiterClient,\n  type JupiterClientConfig,\n  type QuoteGetRequest,\n  type Instruction as JupiterInstruction,\n} from \"~/vendor/jupiter\";\n\nconst REFERRAL_PROGRAM_ID = new PublicKey(\"REFER4ZgmyYx9c6He5XfaTMiGfdLwRnkV4RPp9t9iF3\");\nconst REFERRAL_ACCOUNT_PUBKEY = new PublicKey(\"6rQUBEfS3hASrBbviL7rXA5tRYmZmeFUgHgCYsjeDVBm\");\n\nexport const getJupiterReferralFeeAccount = (mint: PublicKey): string => {\n  const [feeAccount] = PublicKey.findProgramAddressSync(\n    [Buffer.from(\"referral_ata\"), REFERRAL_ACCOUNT_PUBKEY.toBuffer(), mint.toBuffer()],\n    REFERRAL_PROGRAM_ID\n  );\n  return feeAccount.toBase58();\n};\n\nexport const checkJupiterFeeAccount = async (\n  connection: Connection,\n  mint: PublicKey\n): Promise<{ feeAccount: string; hasFeeAccount: boolean }> => {\n  const feeAccount = getJupiterReferralFeeAccount(mint);\n  const hasFeeAccount = !!(await connection.getAccountInfo(new PublicKey(feeAccount)));\n  return { feeAccount, hasFeeAccount };\n};\n\nfunction deserializeJupiterInstruction(instruction: JupiterInstruction) {\n  return new TransactionInstruction({\n    programId: new PublicKey(instruction.programId),\n    keys: instruction.accounts.map((key) => ({\n      pubkey: new PublicKey(key.pubkey),\n      isSigner: key.isSigner,\n      isWritable: key.isWritable,\n    })),\n    data: Buffer.from(instruction.data, \"base64\"),\n  });\n}\n\nexport function toJupiterConfig(apiConfig?: SwapApiConfig): JupiterClientConfig | undefined {\n  if (!apiConfig) return undefined;\n  return {\n    basePath: apiConfig.basePath,\n    apiKey: apiConfig.apiKey,\n    headers: apiConfig.headers,\n  };\n}\n\ntype GetJupiterSwapIxsForFlashloanParams = {\n  quoteParams: QuoteGetRequest;\n  authority: PublicKey;\n  connection: Connection;\n  destinationTokenAccount: PublicKey;\n  apiConfig?: SwapApiConfig;\n  maxSwapAccounts?: number;\n};\n\nexport const getJupiterSwapIxsForFlashloan = async ({\n  quoteParams,\n  authority,\n  connection,\n  destinationTokenAccount,\n  apiConfig,\n  maxSwapAccounts,\n}: GetJupiterSwapIxsForFlashloanParams): Promise<SwapIxsResult> => {\n  const jupiterApiClient = createJupiterClient(toJupiterConfig(apiConfig));\n\n  const feeMint =\n    quoteParams.swapMode === \"ExactIn\" ? quoteParams.outputMint : quoteParams.inputMint;\n  const { feeAccount, hasFeeAccount } = await checkJupiterFeeAccount(\n    connection,\n    new PublicKey(feeMint)\n  );\n  const project0JupiterLut = (await connection.getAddressLookupTable(ADDRESS_LOOKUP_TABLE_FOR_SWAP))\n    ?.value;\n\n  // Only attach a platform fee / feeAccount when both:\n  //   1. the on-chain referral ATA exists, AND\n  //   2. the caller actually requested a non-zero platformFeeBps.\n  // Jupiter rejects swap requests with a `feeAccount` when the resulting\n  // quote has no `platformFee` (\"platformFee must be greater than 0 when\n  // feeAccount is set\"), so we must strip both together.\n  const useFeeAccount = hasFeeAccount && !!quoteParams.platformFeeBps;\n\n  let finalQuoteParams: QuoteGetRequest = quoteParams;\n  // Ideally we shouldn't be checking this, slows the entire flow down by a rpc call\n  if (!useFeeAccount) {\n    if (!hasFeeAccount) {\n      // TODO: setup logging if a fee account has not been created\n      console.warn(\"Warning: feeAccountInfo is undefined\");\n    }\n    // removes platformFeeBps from quoteParams to avoid errors\n    finalQuoteParams = {\n      ...quoteParams,\n      platformFeeBps: undefined,\n    };\n  }\n\n  // Apply a Jupiter-specific safety margin on top of the shared flashloan\n  // account budget: even when accounts fit MAX_ACCOUNT_LOCKS, Jupiter routes\n  // that consume all remaining slots tend to produce swap IXs large enough to\n  // blow the 1232-byte TX size limit. Titan lets us constrain IX bytes\n  // directly via `sizeConstraint`, so the margin is only needed here.\n  const JUPITER_MAX_ACCOUNTS_MARGIN = 4;\n  const maxAccounts =\n    maxSwapAccounts !== undefined ? maxSwapAccounts - JUPITER_MAX_ACCOUNTS_MARGIN : 40;\n\n  const swapQuote = await jupiterApiClient.quoteGet({\n    ...finalQuoteParams,\n    maxAccounts,\n    // Flashloan swaps are landed via a Jito bundle, so restrict routing to\n    // bundle-compatible DEXes (excludes e.g. HumidiFi).\n    forJitoBundle: true,\n  });\n\n  const swapInstructionResponse = await jupiterApiClient.swapInstructionsPost({\n    swapRequest: {\n      quoteResponse: swapQuote,\n      userPublicKey: authority.toBase58(),\n      feeAccount: useFeeAccount ? feeAccount : undefined,\n      wrapAndUnwrapSol: false,\n      destinationTokenAccount: destinationTokenAccount.toBase58(),\n    },\n  });\n\n  const lutAddresses = swapInstructionResponse.addressLookupTableAddresses;\n\n  const lutAccountsRaw = await connection.getMultipleAccountsInfo(\n    lutAddresses.map((address) => new PublicKey(address))\n  );\n\n  const addressLookupTableAccounts = lutAccountsRaw\n    .map((accountInfo, index) => {\n      const addressLookupTableAddress = lutAddresses[index];\n\n      if (!accountInfo || !addressLookupTableAddress) {\n        return null;\n      }\n\n      return new AddressLookupTableAccount({\n        key: new PublicKey(addressLookupTableAddress),\n        state: AddressLookupTableAccount.deserialize(accountInfo.data),\n      });\n    })\n    .filter((account) => account !== null)\n    .concat(project0JupiterLut ? [project0JupiterLut] : []);\n\n  const instruction = deserializeJupiterInstruction(swapInstructionResponse.swapInstruction);\n  const setupInstructions = swapInstructionResponse.setupInstructions.map(\n    deserializeJupiterInstruction\n  );\n\n  return {\n    swapInstructions: [instruction],\n    setupInstructions,\n    addressLookupTableAddresses: addressLookupTableAccounts,\n    quoteResponse: mapJupiterQuoteToSwapQuoteResult(swapQuote),\n  };\n};\n","function floor(value: number, decimals: number): number {\n  return Math.floor(value * 10 ** decimals) / 10 ** decimals;\n}\n\nfunction ceil(value: number, decimals: number): number {\n  return Math.ceil(value * 10 ** decimals) / 10 ** decimals;\n}\n\nexport function computeClosePositionTokenAmount(\n  position: { amount: number; isLending: boolean },\n  mintDecimals: number\n): number {\n  const closePositionTokenAmount = position.isLending\n    ? floor(position.amount, mintDecimals)\n    : ceil(position.amount, mintDecimals);\n  return closePositionTokenAmount;\n}\n\nexport function isWholePosition(\n  position: { amount: number; isLending: boolean },\n  amount: number,\n  mintDecimals: number\n): boolean {\n  const closePositionTokenAmount = computeClosePositionTokenAmount(position, mintDecimals);\n  return amount >= closePositionTokenAmount;\n}\n","import { AccountMeta, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport type { BankConfigCompactRaw, BankConfigOptRaw } from \"./services\";\nimport { MarginfiProgram, WrappedI80F48 } from \"./types\";\nimport { TOKEN_PROGRAM_ID } from \"./vendor/spl\";\n\nasync function makeInitMarginfiAccountIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiGroup: PublicKey;\n    marginfiAccount: PublicKey;\n    authority: PublicKey;\n    feePayer: PublicKey;\n  }\n) {\n  return mfProgram.methods.marginfiAccountInitialize().accounts(accounts).instruction();\n}\n\nasync function makeInitMarginfiAccountPdaIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiGroup: PublicKey;\n    marginfiAccount: PublicKey;\n    authority: PublicKey;\n    feePayer: PublicKey;\n  },\n  args: {\n    accountIndex: number;\n    thirdPartyId?: number;\n  }\n) {\n  return mfProgram.methods\n    .marginfiAccountInitializePda(args.accountIndex, args.thirdPartyId ?? null)\n    .accountsPartial({\n      marginfiGroup: accounts.marginfiGroup,\n      marginfiAccount: accounts.marginfiAccount,\n      authority: accounts.authority,\n      feePayer: accounts.feePayer,\n    })\n    .instruction();\n}\n\nasync function makeJuplendDepositIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    signerTokenAccount: PublicKey;\n\n    lendingAdmin: PublicKey;\n    supplyTokenReservesLiquidity: PublicKey;\n    lendingSupplyPositionOnLiquidity: PublicKey;\n    rateModel: PublicKey;\n    vault: PublicKey;\n    liquidity: PublicKey;\n    liquidityProgram: PublicKey;\n    rewardsRateModel: PublicKey;\n    tokenProgram: PublicKey;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n    fTokenMint?: PublicKey;\n    integrationAcc1?: PublicKey;\n    integrationAcc2?: PublicKey;\n    mint?: PublicKey;\n  },\n  args: {\n    amount: BN;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    marginfiAccount,\n    bank,\n    signerTokenAccount,\n    lendingAdmin,\n    supplyTokenReservesLiquidity,\n    lendingSupplyPositionOnLiquidity,\n    rateModel,\n    vault,\n    liquidity,\n    liquidityProgram,\n    rewardsRateModel,\n    tokenProgram,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .juplendDeposit(args.amount)\n    .accounts(accounts)\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeJuplendWithdrawIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    lendingAdmin: PublicKey;\n    supplyTokenReservesLiquidity: PublicKey;\n    lendingSupplyPositionOnLiquidity: PublicKey;\n    rateModel: PublicKey;\n    vault: PublicKey;\n    claimAccount: PublicKey;\n    liquidity: PublicKey;\n    liquidityProgram: PublicKey;\n    rewardsRateModel: PublicKey;\n    tokenProgram: PublicKey;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    mint?: PublicKey;\n    integrationAcc1?: PublicKey;\n    fTokenMint?: PublicKey;\n    integrationAcc2?: PublicKey;\n    integrationAcc3?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    withdrawAll?: boolean | null;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    marginfiAccount,\n    bank,\n    destinationTokenAccount,\n    lendingAdmin,\n    supplyTokenReservesLiquidity,\n    lendingSupplyPositionOnLiquidity,\n    rateModel,\n    vault,\n    claimAccount,\n    liquidity,\n    liquidityProgram,\n    rewardsRateModel,\n    tokenProgram,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .juplendWithdraw(args.amount, args.withdrawAll ?? null)\n    .accounts(accounts)\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeKaminoDepositIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    signerTokenAccount: PublicKey;\n    lendingMarket: PublicKey;\n\n    lendingMarketAuthority: PublicKey;\n    reserveLiquiditySupply: PublicKey;\n    reserveCollateralMint: PublicKey;\n    reserveDestinationDepositCollateral: PublicKey;\n    liquidityTokenProgram: PublicKey;\n\n    obligationFarmUserState: PublicKey | null;\n    reserveFarmState: PublicKey | null;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n    integrationAcc1?: PublicKey;\n    integrationAcc2?: PublicKey;\n    mint?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    /** 0.1.9-only: refresh the reserve in-instruction. Ignored by the 1.8 program. */\n    refreshReserve?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    marginfiAccount,\n    bank,\n    signerTokenAccount,\n    lendingMarket,\n    lendingMarketAuthority,\n    reserveLiquiditySupply,\n    reserveCollateralMint,\n    reserveDestinationDepositCollateral,\n    liquidityTokenProgram,\n    obligationFarmUserState,\n    reserveFarmState,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .kaminoDeposit(args.amount, args.refreshReserve ?? null)\n    .accounts(accounts)\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\n/**\n * Create a Drift deposit instruction\n * Deposits tokens into a Drift spot market through a marginfi bank account\n *\n * @param mfProgram - The marginfi program instance\n * @param accounts - Required and optional accounts for the instruction\n * @param accounts.marginfiAccount - The marginfi account depositing funds\n * @param accounts.bank - The marginfi bank account for the asset\n * @param accounts.signerTokenAccount - The signer's token account (source of funds)\n * @param accounts.driftState - The Drift program state account\n * @param accounts.driftSpotMarketVault - The Drift spot market vault receiving tokens\n * @param accounts.tokenProgram - The SPL token program\n * @param accounts.driftOracle - (Optional) Oracle account for the asset\n * @param args - Instruction arguments\n * @param args.amount - Amount to deposit in native token decimals\n */\nasync function makeDriftDepositIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    signerTokenAccount: PublicKey;\n    driftState: PublicKey;\n    driftSpotMarketVault: PublicKey;\n    tokenProgram: PublicKey;\n    driftOracle: PublicKey | null;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n    integrationAcc2?: PublicKey;\n    integrationAcc3?: PublicKey;\n    integrationAcc1?: PublicKey;\n    mint?: PublicKey;\n    driftProgram?: PublicKey;\n    systemProgram?: PublicKey;\n  },\n  args: {\n    amount: BN;\n  }\n) {\n  const {\n    marginfiAccount,\n    bank,\n    signerTokenAccount,\n    driftState,\n    driftSpotMarketVault,\n    tokenProgram,\n    driftOracle,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .driftDeposit(args.amount)\n    .accounts({\n      marginfiAccount,\n      bank,\n      signerTokenAccount,\n      driftState,\n      driftSpotMarketVault,\n      tokenProgram,\n      driftOracle,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\nasync function makeDepositIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    signerTokenAccount: PublicKey;\n    bank: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    depositUpToLimit?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { marginfiAccount, signerTokenAccount, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingAccountDeposit(args.amount, args.depositUpToLimit ?? null)\n    .accounts({\n      marginfiAccount,\n      signerTokenAccount,\n      bank,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeRepayIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    signerTokenAccount: PublicKey;\n    bank: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n    liquidityVault?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    repayAll?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { marginfiAccount, signerTokenAccount, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingAccountRepay(args.amount, args.repayAll ?? null)\n    .accounts({\n      marginfiAccount,\n      signerTokenAccount,\n      bank,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeDriftWithdrawIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n\n    driftState: PublicKey;\n    driftSigner: PublicKey;\n    driftSpotMarketVault: PublicKey;\n    tokenProgram: PublicKey;\n\n    driftOracle: PublicKey | null;\n    driftRewardOracle: PublicKey | null;\n    driftRewardSpotMarket: PublicKey | null;\n    driftRewardMint: PublicKey | null;\n    driftRewardOracle2: PublicKey | null;\n    driftRewardSpotMarket2: PublicKey | null;\n    driftRewardMint2: PublicKey | null;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    withdrawAll: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    marginfiAccount,\n    bank,\n    destinationTokenAccount,\n    driftState,\n    driftSigner,\n    driftSpotMarketVault,\n    tokenProgram,\n    driftOracle,\n    driftRewardOracle,\n    driftRewardSpotMarket,\n    driftRewardMint,\n    driftRewardOracle2,\n    driftRewardSpotMarket2,\n    driftRewardMint2,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .driftWithdraw(args.amount, args.withdrawAll)\n    .accounts({\n      marginfiAccount,\n      bank,\n      destinationTokenAccount,\n      driftState,\n      driftSigner,\n      driftSpotMarketVault,\n      tokenProgram,\n      driftOracle,\n      driftRewardOracle,\n      driftRewardSpotMarket,\n      driftRewardMint,\n      driftRewardOracle2,\n      driftRewardSpotMarket2,\n      driftRewardMint2,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeKaminoWithdrawIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    lendingMarket: PublicKey;\n    mint: PublicKey;\n\n    lendingMarketAuthority: PublicKey;\n    reserveLiquiditySupply: PublicKey;\n    reserveCollateralMint: PublicKey;\n    reserveSourceCollateral: PublicKey;\n    liquidityTokenProgram: PublicKey;\n\n    obligationFarmUserState: PublicKey | null;\n    reserveFarmState: PublicKey | null;\n\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    isFinalWithdrawal: boolean;\n    /**\n     * 0.1.9-only: refresh the reserve via batch refresh (flags bit 1). Do NOT set while the\n     * 1.8 program is deployed — its `Option<bool>` decoder rejects flag bytes above 1.\n     */\n    refreshReserve?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    marginfiAccount,\n    bank,\n    destinationTokenAccount,\n    lendingMarket,\n    lendingMarketAuthority,\n    reserveLiquiditySupply,\n    reserveCollateralMint,\n    reserveSourceCollateral,\n    liquidityTokenProgram,\n    obligationFarmUserState,\n    reserveFarmState,\n    ...optionalAccounts\n  } = accounts;\n\n  // flags bit 0 = withdraw all, bit 1 = batch refresh. `isFinalWithdrawal ? 1 : null` is\n  // byte-identical to the pre-0.1.9 `withdrawAll: Option<bool>` encoding, so it lands on\n  // both the 1.8 and 1.9 programs.\n  const flags = (args.isFinalWithdrawal ? 1 : 0) | (args.refreshReserve ? 2 : 0);\n\n  return mfProgram.methods\n    .kaminoWithdraw(args.amount, flags === 0 ? null : flags)\n    .accounts({\n      marginfiAccount,\n      bank,\n      destinationTokenAccount,\n      lendingMarket,\n      lendingMarketAuthority,\n      reserveLiquiditySupply,\n      reserveCollateralMint,\n      reserveSourceCollateral,\n      liquidityTokenProgram,\n      obligationFarmUserState,\n      reserveFarmState,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeWithdrawIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  },\n  args: {\n    amount: BN;\n    withdrawAll?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { marginfiAccount, bank, destinationTokenAccount, tokenProgram, ...optionalAccounts } =\n    accounts;\n\n  return mfProgram.methods\n    .lendingAccountWithdraw(args.amount, args.withdrawAll ?? null)\n    .accounts({\n      marginfiAccount,\n      destinationTokenAccount,\n      bank,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeBorrowIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  },\n  args: {\n    amount: BN;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { marginfiAccount, bank, destinationTokenAccount, tokenProgram, ...optionalAccounts } =\n    accounts;\n\n  return mfProgram.methods\n    .lendingAccountBorrow(args.amount)\n    .accounts({\n      marginfiAccount,\n      destinationTokenAccount,\n      bank,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nfunction makeLendingAccountLiquidateIx(\n  mfiProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    assetBank: PublicKey;\n    liabBank: PublicKey;\n    liquidatorMarginfiAccount: PublicKey;\n    liquidateeMarginfiAccount: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  },\n  args: {\n    assetAmount: BN;\n    liquidateeAccounts: number;\n    liquidatorAccounts: number;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const {\n    assetBank,\n    liabBank,\n    liquidatorMarginfiAccount,\n    liquidateeMarginfiAccount,\n    tokenProgram,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfiProgram.methods\n    .lendingAccountLiquidate(args.assetAmount, args.liquidateeAccounts, args.liquidatorAccounts)\n    .accounts({\n      assetBank,\n      liabBank,\n      liquidatorMarginfiAccount,\n      liquidateeMarginfiAccount,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nfunction makePoolConfigureBankIx(\n  mfiProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    bank: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    admin?: PublicKey;\n  },\n  args: {\n    bankConfigOpt: BankConfigOptRaw;\n  }\n) {\n  const { bank, ...optionalAccounts } = accounts;\n\n  return mfiProgram.methods\n    .lendingPoolConfigureBank(args.bankConfigOpt)\n    .accounts({\n      bank,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\nfunction makeBeginFlashLoanIx(\n  mfiProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    // Optional accounts - to override inference\n    authority?: PublicKey;\n    ixsSysvar?: PublicKey;\n  },\n  args: {\n    endIndex: BN;\n  }\n) {\n  const { marginfiAccount, ...optionalAccounts } = accounts;\n\n  return mfiProgram.methods\n    .lendingAccountStartFlashloan(args.endIndex)\n    .accounts({\n      marginfiAccount,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\nasync function makeEndFlashLoanIx(\n  mfiProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    // Optional accounts - to override inference\n    authority?: PublicKey;\n    // Pass explicitly when the account isn't on-chain yet (fresh-account flash loans)\n    group?: PublicKey;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { marginfiAccount, ...optionalAccounts } = accounts;\n\n  return mfiProgram.methods\n    .lendingAccountEndFlashloan()\n    .accounts({\n      marginfiAccount,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makeAccountTransferToNewAccountIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    oldMarginfiAccount: PublicKey;\n    newMarginfiAccount: PublicKey;\n    newAuthority: PublicKey;\n    globalFeeWallet: PublicKey;\n    feePayer: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    authority?: PublicKey;\n  }\n) {\n  const {\n    oldMarginfiAccount,\n    newMarginfiAccount,\n    newAuthority,\n    globalFeeWallet,\n    feePayer,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .transferToNewAccount()\n    .accounts({\n      oldMarginfiAccount,\n      newMarginfiAccount,\n      newAuthority,\n      globalFeeWallet,\n      feePayer,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\nasync function makeGroupInitIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiGroup: PublicKey;\n    admin: PublicKey;\n  }\n) {\n  return mfProgram.methods\n    .marginfiGroupInitialize()\n    .accounts({\n      marginfiGroup: accounts.marginfiGroup,\n      admin: accounts.admin,\n    })\n    .instruction();\n}\n\n/**\n * Configure the oracle for a bank\n * @param mfProgram The marginfi program\n * @param accounts The accounts required for this instruction\n * @param args The oracle setup index and feed id\n * @param remainingAccounts The remaining accounts required for this instruction, should include the feed oracle key\n */\nasync function makeLendingPoolConfigureBankOracleIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    bank: PublicKey;\n    // Optional accounts - to override inference\n    group?: PublicKey;\n    admin?: PublicKey;\n  },\n  args: {\n    /**\n     * The oracle setup index, see {@link serializeOracleSetupToIndex}\n     */\n    setup: number;\n    /**\n     * The oracle feed id\n     */\n    feedId: PublicKey;\n  },\n  /**\n   * The remaining accounts required for this instruction, should include the feed oracle key (non writable & signable)\n   */\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { bank, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingPoolConfigureBankOracle(args.setup, args.feedId)\n    .accounts({\n      bank,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\n/**\n * Configure a bank to use an entry in a Scope OraclePrices account.\n * @param mfProgram The marginfi program\n * @param accounts The group, admin, and bank accounts required by the instruction\n * @param args The Scope OraclePrices account and its entry index\n */\nasync function makeLendingPoolConfigureBankOracleScopeIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    bank: PublicKey;\n    group?: PublicKey;\n    admin?: PublicKey;\n  },\n  args: {\n    oracle: PublicKey;\n    entryIndex: number;\n  }\n) {\n  const { bank, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingPoolConfigureBankOracleScope(args.oracle, args.entryIndex)\n    .accounts({ bank })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts([{ pubkey: args.oracle, isSigner: false, isWritable: false }])\n    .instruction();\n}\n\n/** Configure a fixed or Exponent PT oracle through the 0.1.11 set-oracle-price instruction. */\nasync function makeLendingPoolSetOraclePriceIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    bank: PublicKey;\n    group?: PublicKey;\n    admin?: PublicKey;\n  },\n  args: {\n    price: WrappedI80F48;\n    setup: number;\n  },\n  remainingAccounts: AccountMeta[] = []\n) {\n  const { bank, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingPoolSetOraclePrice(args.price, args.setup)\n    .accounts({ bank })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\n/**\n * Creates an instruction to add a permissionless staked bank to a lending pool.\n * @param mfProgram - The marginfi program instance\n * @param accounts - The accounts required for this instruction\n * @param remainingAccounts - The remaining accounts required for this instruction, including pythOracle, solPool and bankMint\n * @param args - Optional arguments for this instruction\n */\nasync function makePoolAddPermissionlessStakedBankIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    stakedSettings: PublicKey;\n    feePayer: PublicKey;\n    bankMint: PublicKey;\n    solPool: PublicKey;\n    /** The SVSP on-ramp account, derived from the stake pool (0.1.9+ program only) */\n    poolOnramp: PublicKey;\n    stakePool: PublicKey;\n    /** The validator vote account backing the stake pool (0.1.9+ program only) */\n    validatorVoteAccount: PublicKey;\n    // Optional accounts - to override inference\n    marginfiGroup?: PublicKey;\n    /**\n     * The token program to use for this instruction, defaults to the SPL token program\n     */\n    tokenProgram?: PublicKey;\n  },\n  /**\n   * The remaining accounts required for this instruction. Should include:\n   * - pythOracle: The pyth oracle key (non writable & non signer)\n   * - solPool: The sol pool key (non writable & non signer)\n   * - bankMint: The bank mint key (non writable & non signer)\n   */\n  remainingAccounts: AccountMeta[] = [],\n  args: {\n    /**\n     * The seed to use for the bank account. Defaults to 0 (new BN(0)).\n     * If the seed is not specified, the seed is set to 0, and the bank account\n     * will be created at the address {@link findPoolAddress} with the default\n     * bump.\n     */\n    seed?: BN;\n  }\n) {\n  const {\n    stakedSettings,\n    feePayer,\n    bankMint,\n    solPool,\n    poolOnramp,\n    stakePool,\n    validatorVoteAccount,\n    tokenProgram = TOKEN_PROGRAM_ID,\n    ...optionalAccounts\n  } = accounts;\n\n  return mfProgram.methods\n    .lendingPoolAddBankPermissionless(args.seed ?? new BN(0))\n    .accounts({\n      stakedSettings,\n      feePayer,\n      bankMint,\n      solPool,\n      poolOnramp,\n      stakePool,\n      validatorVoteAccount,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nasync function makePoolAddBankIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiGroup: PublicKey;\n    feePayer: PublicKey;\n    bankMint: PublicKey;\n    bank: PublicKey;\n    tokenProgram: PublicKey;\n    // Optional accounts - to override inference\n    admin?: PublicKey;\n    globalFeeWallet?: PublicKey;\n  },\n  args: {\n    bankConfig: BankConfigCompactRaw;\n  }\n) {\n  const { marginfiGroup, feePayer, bankMint, bank, tokenProgram, ...optionalAccounts } = accounts;\n\n  return mfProgram.methods\n    .lendingPoolAddBank({\n      ...args.bankConfig,\n      configFlags: 0,\n      pad0: [0, 0, 0, 0, 0, 0, 0, 0],\n    })\n    .accounts({\n      marginfiGroup,\n      feePayer,\n      bankMint,\n      bank,\n      tokenProgram,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\nasync function makeCloseAccountIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    // Required accounts\n    marginfiAccount: PublicKey;\n    feePayer: PublicKey;\n    // Optional accounts - to override inference\n    authority?: PublicKey;\n  }\n) {\n  const { marginfiAccount, feePayer, ...optionalAccounts } = accounts;\n  return mfProgram.methods\n    .marginfiAccountClose()\n    .accounts({\n      marginfiAccount,\n      feePayer,\n    })\n    .accountsPartial(optionalAccounts)\n    .instruction();\n}\n\n// Deprecated\n// async function makeLendingAccountSortBalancesIx(\n//   mfProgram: MarginfiProgram,\n//   accounts: {\n//     marginfiAccount: PublicKey;\n//   }\n// ) {\n//   return mfProgram.methods\n//     .lendingAccountSortBalances()\n//     .accounts({\n//       marginfiAccount: accounts.marginfiAccount,\n//     })\n//     .instruction();\n// }\n\nasync function makePulseHealthIx(\n  mfProgram: MarginfiProgram,\n  accounts: {\n    marginfiAccount: PublicKey;\n  },\n  /**\n   * The remaining accounts required for this instruction. Should include:\n   * - For each balance the user has, pass bank and oracle: <bank1, oracle1, bank2, oracle2>\n   */\n  remainingAccounts: AccountMeta[] = []\n) {\n  return mfProgram.methods\n    .lendingAccountPulseHealth()\n    .accounts({\n      marginfiAccount: accounts.marginfiAccount,\n    })\n    .remainingAccounts(remainingAccounts)\n    .instruction();\n}\n\nconst instructions = {\n  makeDepositIx,\n  makeJuplendDepositIx,\n  makeDriftDepositIx,\n  makeKaminoDepositIx,\n  makeRepayIx,\n  makeWithdrawIx,\n  makeJuplendWithdrawIx,\n  makeDriftWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeBorrowIx,\n  makeInitMarginfiAccountIx,\n  makeInitMarginfiAccountPdaIx,\n  makeLendingAccountLiquidateIx,\n  makePoolAddBankIx,\n  makePoolConfigureBankIx,\n  makeBeginFlashLoanIx,\n  makeEndFlashLoanIx,\n  makeAccountTransferToNewAccountIx,\n  makeGroupInitIx,\n  makeCloseAccountIx,\n  makePoolAddPermissionlessStakedBankIx,\n  makeLendingPoolConfigureBankOracleIx,\n  makeLendingPoolConfigureBankOracleScopeIx,\n  makeLendingPoolSetOraclePriceIx,\n  makePulseHealthIx,\n};\n\nexport default instructions;\n","/**\n * ============================================================================\n *                              ⚠️  DISCLAIMER  ⚠️\n * ============================================================================\n *\n * THE INSTRUCTIONS EXPORTED FROM THIS FILE ARE FOR **SIMULATION PURPOSES ONLY**.\n *\n * DO NOT USE THESE INSTRUCTIONS TO BUILD REAL, SIGNED TRANSACTIONS THAT WILL\n * BE SUBMITTED ON-CHAIN. They are intended solely for use with transaction\n * simulation (e.g. `simulateTransaction`) to preview state changes, compute\n * expected outputs, or estimate effects — NOT for actual execution.\n *\n * Using these instructions in production transactions may result in incorrect\n * behaviour, loss of funds, or other undefined consequences.\n *\n * ============================================================================\n */\n\nimport {\n  AccountMeta,\n  PublicKey,\n  SystemProgram,\n  SYSVAR_INSTRUCTIONS_PUBKEY,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { deriveBankLiquidityVault, deriveBankLiquidityVaultAuthority } from \"./utils\";\n\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n// Hardcoded addresses from Marginfi IDL\nconst KAMINO_PROGRAM_ID = new PublicKey(\"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\");\nconst FARMS_PROGRAM_ID = new PublicKey(\"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\");\n\n// ============================================================================\n// Encoding Utilities\n// ============================================================================\n\nfunction encodeU64(value: BN): Buffer {\n  const buf = Buffer.alloc(8);\n  value.toArrayLike(Buffer, \"le\", 8).copy(buf);\n  return buf;\n}\n\nfunction encodeU8(value: number): Buffer {\n  const buf = Buffer.alloc(1);\n  buf.writeUInt8(value, 0);\n  return buf;\n}\n\nfunction encodeU16(value: number): Buffer {\n  const buf = Buffer.alloc(2);\n  buf.writeUInt16LE(value, 0);\n  return buf;\n}\n\nfunction encodeBool(value: boolean): Buffer {\n  const buf = Buffer.alloc(1);\n  buf.writeUInt8(value ? 1 : 0, 0);\n  return buf;\n}\n\nfunction encodeOptionBool(value: boolean | null | undefined): Buffer {\n  if (value === null || value === undefined) {\n    return Buffer.from([0]);\n  }\n  return Buffer.concat([Buffer.from([1]), encodeBool(value)]);\n}\n\nfunction encodeOptionU8(value: number | null | undefined): Buffer {\n  if (value === null || value === undefined) {\n    return Buffer.from([0]);\n  }\n  return Buffer.concat([Buffer.from([1]), encodeU8(value)]);\n}\n\nfunction encodePublicKey(pubkey: PublicKey): Buffer {\n  return Buffer.from(pubkey.toBytes());\n}\n\n// ============================================================================\n// Discriminators\n// ============================================================================\n\nconst DISCRIMINATORS = {\n  MARGINFI_ACCOUNT_INITIALIZE: Buffer.from([43, 78, 61, 255, 148, 52, 249, 154]),\n  KAMINO_DEPOSIT: Buffer.from([237, 8, 188, 187, 115, 99, 49, 85]),\n  LENDING_ACCOUNT_DEPOSIT: Buffer.from([171, 94, 235, 103, 82, 64, 212, 140]),\n  LENDING_ACCOUNT_REPAY: Buffer.from([79, 209, 172, 177, 222, 51, 173, 151]),\n  KAMINO_WITHDRAW: Buffer.from([199, 101, 41, 45, 213, 98, 224, 200]),\n  LENDING_ACCOUNT_WITHDRAW: Buffer.from([36, 72, 74, 19, 210, 210, 192, 192]),\n  LENDING_ACCOUNT_BORROW: Buffer.from([4, 126, 116, 53, 48, 5, 212, 31]),\n  LENDING_ACCOUNT_LIQUIDATE: Buffer.from([214, 169, 151, 213, 251, 167, 86, 219]),\n  LENDING_POOL_ADD_BANK: Buffer.from([215, 68, 72, 78, 208, 218, 103, 182]),\n  LENDING_POOL_CONFIGURE_BANK: Buffer.from([121, 173, 156, 40, 93, 148, 56, 237]),\n  LENDING_ACCOUNT_START_FLASHLOAN: Buffer.from([14, 131, 33, 220, 81, 186, 180, 107]),\n  LENDING_ACCOUNT_END_FLASHLOAN: Buffer.from([105, 124, 201, 106, 153, 2, 8, 156]),\n  TRANSFER_TO_NEW_ACCOUNT: Buffer.from([28, 79, 129, 231, 169, 69, 69, 65]),\n  MARGINFI_GROUP_INITIALIZE: Buffer.from([255, 67, 67, 26, 94, 31, 34, 20]),\n  MARGINFI_ACCOUNT_CLOSE: Buffer.from([186, 221, 93, 34, 50, 97, 194, 241]),\n  LENDING_POOL_ADD_BANK_PERMISSIONLESS: Buffer.from([127, 187, 121, 34, 187, 167, 238, 102]),\n  LENDING_POOL_CONFIGURE_BANK_ORACLE: Buffer.from([209, 82, 255, 171, 124, 21, 71, 81]),\n  LENDING_POOL_CONFIGURE_BANK_ORACLE_SCOPE: Buffer.from([134, 228, 127, 3, 117, 132, 85, 146]),\n  LENDING_ACCOUNT_PULSE_HEALTH: Buffer.from([186, 52, 117, 97, 34, 74, 39, 253]),\n  LENDING_ACCOUNT_SORT_BALANCES: Buffer.from([187, 194, 110, 84, 82, 170, 204, 9]),\n  DRIFT_DEPOSIT: Buffer.from([252, 63, 250, 201, 98, 55, 130, 12]),\n  DRIFT_WITHDRAW: Buffer.from([86, 59, 186, 123, 183, 181, 234, 137]),\n};\n\n// ============================================================================\n// Sync Instruction Builders\n// ============================================================================\n\nfunction makeInitMarginfiAccountIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiGroup: PublicKey;\n    marginfiAccount: PublicKey;\n    authority: PublicKey;\n    feePayer: PublicKey;\n    systemProgram?: PublicKey;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: true, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n    {\n      pubkey: accounts.systemProgram || SystemProgram.programId,\n      isSigner: false,\n      isWritable: false,\n    },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.MARGINFI_ACCOUNT_INITIALIZE,\n  });\n}\n\nfunction makeDepositIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations: [\"marginfiAccount\", \"bank\"] - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer: true, relations: [\"marginfiAccount\"] - caller must provide\n    signerTokenAccount: PublicKey;\n    bank: PublicKey;\n    liquidityVault?: PublicKey; // relations: [\"bank\"] - caller must provide\n    tokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n    depositUpToLimit?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.liquidityVault ?? liquidityVault,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_ACCOUNT_DEPOSIT,\n    encodeU64(args.amount),\n    encodeOptionBool(args.depositUpToLimit ?? null),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeRepayIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations - caller must provide\n    signerTokenAccount: PublicKey;\n    bank: PublicKey;\n    tokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n    repayAll?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n    { pubkey: liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_ACCOUNT_REPAY,\n    encodeU64(args.amount),\n    encodeOptionBool(args.repayAll ?? null),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeWithdrawIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations - caller must provide\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    tokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n    withdrawAll?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  // Derive PDAs\n  const [bankLiquidityVaultAuthority] = deriveBankLiquidityVaultAuthority(programId, accounts.bank);\n  const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.destinationTokenAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: bankLiquidityVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_ACCOUNT_WITHDRAW,\n    encodeU64(args.amount),\n    encodeOptionBool(args.withdrawAll ?? null),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeBorrowIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations - caller must provide\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    tokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  // Derive PDAs\n  const [bankLiquidityVaultAuthority] = deriveBankLiquidityVaultAuthority(programId, accounts.bank);\n  const [liquidityVault] = deriveBankLiquidityVault(programId, accounts.bank);\n\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.destinationTokenAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: bankLiquidityVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([DISCRIMINATORS.LENDING_ACCOUNT_BORROW, encodeU64(args.amount)]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeBeginFlashLoanIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n  },\n  args: {\n    endIndex: BN;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    {\n      pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, // hardcoded address from IDL\n      isSigner: false,\n      isWritable: false,\n    },\n  ];\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_ACCOUNT_START_FLASHLOAN,\n    encodeU64(args.endIndex),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeEndFlashLoanIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiAccount: PublicKey;\n    group: PublicKey; // relations: [\"marginfiAccount\"] - caller must provide\n    authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.LENDING_ACCOUNT_END_FLASHLOAN,\n  });\n}\n\nfunction makeKaminoDepositIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer - caller must provide\n    bank: PublicKey;\n    signerTokenAccount: PublicKey;\n    integrationAcc2: PublicKey; // Kamino Obligation\n    lendingMarket: PublicKey;\n    lendingMarketAuthority: PublicKey;\n    integrationAcc1: PublicKey; // The Kamino reserve that holds liquidity\n    mint: PublicKey; // relations: [\"bank\"] - Bank's liquidity token mint (Kamino calls this reserve_liquidity_mint)\n    reserveLiquiditySupply: PublicKey;\n    reserveCollateralMint: PublicKey;\n    reserveDestinationDepositCollateral: PublicKey;\n    obligationFarmUserState: PublicKey | null; // optional in IDL\n    reserveFarmState: PublicKey | null; // optional in IDL\n    liquidityTokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n    /** 0.1.9-only: refresh the reserve in-instruction. Ignored by the 1.8 program. */\n    refreshReserve?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n  const liquidityVault = deriveBankLiquidityVault(programId, accounts.bank)[0];\n\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n    {\n      pubkey: liquidityVaultAuthority,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc2, isSigner: false, isWritable: true },\n    { pubkey: accounts.lendingMarket, isSigner: false, isWritable: false },\n    {\n      pubkey: accounts.lendingMarketAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.integrationAcc1, isSigner: false, isWritable: true },\n    { pubkey: accounts.mint, isSigner: false, isWritable: false },\n    {\n      pubkey: accounts.reserveLiquiditySupply,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.reserveCollateralMint,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.reserveDestinationDepositCollateral,\n      isSigner: false,\n      isWritable: true,\n    },\n  ];\n\n  if (accounts.obligationFarmUserState) {\n    keys.push({\n      pubkey: accounts.obligationFarmUserState,\n      isSigner: false,\n      isWritable: true,\n    });\n  }\n  if (accounts.reserveFarmState) {\n    keys.push({\n      pubkey: accounts.reserveFarmState,\n      isSigner: false,\n      isWritable: true,\n    });\n  }\n\n  keys.push(\n    { pubkey: KAMINO_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: FARMS_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n    {\n      pubkey: accounts.liquidityTokenProgram,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n  );\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.KAMINO_DEPOSIT,\n    encodeU64(args.amount),\n    encodeOptionBool(args.refreshReserve ?? null),\n  ]);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeKaminoWithdrawIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer - caller must provide\n    bank: PublicKey;\n    destinationTokenAccount: PublicKey;\n    integrationAcc2: PublicKey; // Kamino Obligation\n    lendingMarket: PublicKey;\n    lendingMarketAuthority: PublicKey;\n    integrationAcc1: PublicKey; // The Kamino reserve that holds liquidity\n    mint: PublicKey;\n    reserveLiquiditySupply: PublicKey;\n    reserveCollateralMint: PublicKey;\n    reserveSourceCollateral: PublicKey;\n    obligationFarmUserState: PublicKey | null; // optional in IDL\n    reserveFarmState: PublicKey | null; // optional in IDL\n    liquidityTokenProgram: PublicKey;\n  },\n  args: {\n    amount: BN;\n    isFinalWithdrawal: boolean;\n    /**\n     * 0.1.9-only: refresh the reserve via batch refresh (flags bit 1). Do NOT set while the\n     * 1.8 program is deployed — its `Option<bool>` decoder rejects flag bytes above 1.\n     */\n    refreshReserve?: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n  const liquidityVault = deriveBankLiquidityVault(programId, accounts.bank)[0];\n\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.destinationTokenAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: liquidityVaultAuthority, isSigner: false, isWritable: true },\n    { pubkey: liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc2, isSigner: false, isWritable: true },\n    { pubkey: accounts.lendingMarket, isSigner: false, isWritable: false },\n    {\n      pubkey: accounts.lendingMarketAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.integrationAcc1, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.mint,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.reserveLiquiditySupply,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.reserveCollateralMint,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.reserveSourceCollateral,\n      isSigner: false,\n      isWritable: true,\n    },\n  ];\n\n  if (accounts.obligationFarmUserState) {\n    keys.push({\n      pubkey: accounts.obligationFarmUserState,\n      isSigner: false,\n      isWritable: true,\n    });\n  }\n  if (accounts.reserveFarmState) {\n    keys.push({\n      pubkey: accounts.reserveFarmState,\n      isSigner: false,\n      isWritable: true,\n    });\n  }\n\n  keys.push(\n    { pubkey: KAMINO_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: FARMS_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n    {\n      pubkey: accounts.liquidityTokenProgram,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n  );\n\n  keys.push(...remainingAccounts);\n\n  // flags bit 0 = withdraw all, bit 1 = batch refresh. `isFinalWithdrawal ? 1 : null` is\n  // byte-identical to the pre-0.1.9 `withdrawAll: Option<bool>` encoding, so it lands on\n  // both the 1.8 and 1.9 programs.\n  const flags = (args.isFinalWithdrawal ? 1 : 0) | (args.refreshReserve ? 2 : 0);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.KAMINO_WITHDRAW,\n    encodeU64(args.amount),\n    encodeOptionU8(flags === 0 ? null : flags),\n  ]);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeLendingAccountLiquidateIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    assetBank: PublicKey;\n    liabBank: PublicKey;\n    liquidatorMarginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations: [\"liquidatorMarginfiAccount\"] - caller must provide\n    liquidateeMarginfiAccount: PublicKey;\n    bankLiquidityVaultAuthority: PublicKey; // PDA - caller must derive\n    bankLiquidityVault: PublicKey; // PDA - caller must derive\n    bankInsuranceVault: PublicKey; // PDA - caller must derive\n    tokenProgram: PublicKey;\n  },\n  args: {\n    assetAmount: BN;\n    liquidateeAccounts: number;\n    liquidatorAccounts: number;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.assetBank, isSigner: false, isWritable: true },\n    { pubkey: accounts.liabBank, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.liquidatorMarginfiAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    {\n      pubkey: accounts.liquidateeMarginfiAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: accounts.bankLiquidityVaultAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.bankLiquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.bankInsuranceVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_ACCOUNT_LIQUIDATE,\n    encodeU64(args.assetAmount),\n    Buffer.from([args.liquidateeAccounts]),\n    Buffer.from([args.liquidatorAccounts]),\n  ]);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeCloseAccountIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations: [\"marginfiAccount\"] - caller must provide\n    feePayer: PublicKey;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.MARGINFI_ACCOUNT_CLOSE,\n  });\n}\n\n// Deprecated\n// function makeLendingAccountSortBalancesIx(\n//   programId: PublicKey,\n//   accounts: {\n//     marginfiAccount: PublicKey;\n//   }\n// ): TransactionInstruction {\n//   const keys: AccountMeta[] = [\n//     { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n//   ];\n\n//   return new TransactionInstruction({\n//     keys,\n//     programId,\n//     data: DISCRIMINATORS.LENDING_ACCOUNT_SORT_BALANCES,\n//   });\n// }\n\nfunction makePulseHealthIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiAccount: PublicKey;\n    group: PublicKey; // relations: [\"marginfiAccount\"] - caller must provide\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.LENDING_ACCOUNT_PULSE_HEALTH,\n  });\n}\n\nfunction makeAccountTransferToNewAccountIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations: [\"oldMarginfiAccount\"] - caller must provide\n    oldMarginfiAccount: PublicKey;\n    newMarginfiAccount: PublicKey;\n    authority: PublicKey; // signer, relations: [\"oldMarginfiAccount\"] - caller must provide\n    feePayer: PublicKey;\n    newAuthority: PublicKey;\n    globalFeeWallet: PublicKey; // caller must provide\n    feeState: PublicKey; // PDA with seeds: [\"feestate\"] - caller must derive\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.oldMarginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.newMarginfiAccount, isSigner: true, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n    { pubkey: accounts.newAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.globalFeeWallet, isSigner: false, isWritable: true },\n    { pubkey: accounts.feeState, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.TRANSFER_TO_NEW_ACCOUNT,\n  });\n}\n\nfunction makeGroupInitIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiGroup: PublicKey;\n    admin: PublicKey;\n    feeState: PublicKey; // PDA with seeds: [\"feestate\"] - caller must derive\n  },\n  args?: {\n    isArenaGroup?: boolean;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiGroup, isSigner: true, isWritable: true },\n    { pubkey: accounts.admin, isSigner: true, isWritable: true },\n    { pubkey: accounts.feeState, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.MARGINFI_GROUP_INITIALIZE,\n    encodeBool(args?.isArenaGroup ?? false),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makePoolConfigureBankIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations: [\"bank\"] - caller must provide\n    admin: PublicKey; // signer, relations: [\"group\"] - caller must provide\n    bank: PublicKey;\n  },\n  _args: {\n    bankConfigOpt: any; // Complex type - caller must handle serialization\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.admin, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n  ];\n\n  // Note: Complex bankConfigOpt encoding not implemented\n  // Caller should construct full data buffer themselves\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK,\n  });\n}\n\nfunction makeLendingPoolConfigureBankOracleIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations: [\"bank\"] - caller must provide\n    admin: PublicKey; // signer, relations: [\"group\"] - caller must provide\n    bank: PublicKey;\n  },\n  args: {\n    setup: number;\n    feedId: PublicKey;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.admin, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK_ORACLE,\n    encodeU8(args.setup),\n    encodePublicKey(args.feedId),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makeLendingPoolConfigureBankOracleScopeIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey;\n    admin: PublicKey;\n    bank: PublicKey;\n  },\n  args: {\n    oracle: PublicKey;\n    entryIndex: number;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.admin, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    { pubkey: args.oracle, isSigner: false, isWritable: false },\n  ];\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_POOL_CONFIGURE_BANK_ORACLE_SCOPE,\n    encodePublicKey(args.oracle),\n    encodeU16(args.entryIndex),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nfunction makePoolAddBankIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiGroup: PublicKey;\n    admin: PublicKey; // signer, relations: [\"marginfiGroup\"] - caller must provide\n    feePayer: PublicKey;\n    feeState: PublicKey; // PDA - caller must derive\n    globalFeeWallet: PublicKey; // relations: [\"feeState\"] - caller must provide\n    bankMint: PublicKey;\n    bank: PublicKey;\n    liquidityVaultAuthority: PublicKey; // PDA - caller must derive\n    liquidityVault: PublicKey; // PDA - caller must derive\n    insuranceVaultAuthority: PublicKey; // PDA - caller must derive\n    insuranceVault: PublicKey; // PDA - caller must derive\n    feeVaultAuthority: PublicKey; // PDA - caller must derive\n    feeVault: PublicKey; // PDA - caller must derive\n    tokenProgram: PublicKey;\n  },\n  _args: {\n    bankConfig: any; // Complex BankConfigCompactRaw type\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: true },\n    { pubkey: accounts.admin, isSigner: true, isWritable: false },\n    { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n    { pubkey: accounts.feeState, isSigner: false, isWritable: false },\n    { pubkey: accounts.globalFeeWallet, isSigner: false, isWritable: true },\n    { pubkey: accounts.bankMint, isSigner: false, isWritable: false },\n    { pubkey: accounts.bank, isSigner: true, isWritable: true },\n    {\n      pubkey: accounts.liquidityVaultAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.insuranceVaultAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.insuranceVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.feeVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.feeVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  // Note: Complex bankConfig encoding not implemented\n  // Caller should construct full data buffer themselves\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data: DISCRIMINATORS.LENDING_POOL_ADD_BANK,\n  });\n}\n\nfunction makeDriftDepositIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey; // relations - caller must provide\n    marginfiAccount: PublicKey;\n    authority: PublicKey; // signer - caller must provide\n    bank: PublicKey;\n    driftOracle: PublicKey | null; // optional in IDL\n    liquidityVault: PublicKey; // relations: [\"bank\"] - caller must provide\n    signerTokenAccount: PublicKey;\n    driftState: PublicKey; // caller must provide\n    integrationAcc2: PublicKey; // The Drift user account owned by liquidity_vault_authority\n    integrationAcc3: PublicKey; // The Drift user stats account owned by liquidity_vault_authority\n    integrationAcc1: PublicKey; // The Drift spot market for this asset\n    driftSpotMarketVault: PublicKey;\n    mint: PublicKey; // relations: [\"bank\"] - caller must provide\n    driftProgram: PublicKey; // fixed address - caller must provide\n    tokenProgram: PublicKey;\n    systemProgram: PublicKey; // fixed address - caller must provide\n  },\n  args: {\n    amount: BN;\n  }\n): TransactionInstruction {\n  // Derive PDA for liquidity vault authority\n  const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n\n  // Build keys in exact IDL order\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n  ];\n\n  // drift_oracle is optional\n  if (accounts.driftOracle) {\n    keys.push({\n      pubkey: accounts.driftOracle,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  keys.push(\n    { pubkey: liquidityVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.signerTokenAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.driftState, isSigner: false, isWritable: false },\n    { pubkey: accounts.integrationAcc2, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc3, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc1, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.driftSpotMarketVault,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: accounts.mint, isSigner: false, isWritable: false },\n    { pubkey: accounts.driftProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.systemProgram, isSigner: false, isWritable: false }\n  );\n\n  const data = Buffer.concat([DISCRIMINATORS.DRIFT_DEPOSIT, encodeU64(args.amount)]);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makeDriftWithdrawIx(\n  programId: PublicKey,\n  accounts: {\n    group: PublicKey;\n    marginfiAccount: PublicKey;\n    authority: PublicKey;\n    bank: PublicKey;\n    liquidityVault: PublicKey;\n    destinationTokenAccount: PublicKey;\n    driftState: PublicKey;\n    integrationAcc2: PublicKey; // The Drift user account owned by liquidity_vault_authority\n    integrationAcc3: PublicKey; // The Drift user stats account owned by liquidity_vault_authority\"\n    integrationAcc1: PublicKey; // The Drift spot market for this asset\n    driftSpotMarketVault: PublicKey;\n    driftSigner: PublicKey;\n    mint: PublicKey;\n    tokenProgram: PublicKey;\n    driftOracle?: PublicKey | null;\n    driftRewardOracle?: PublicKey | null;\n    driftRewardSpotMarket?: PublicKey | null;\n    driftRewardMint?: PublicKey | null;\n    driftRewardOracle2?: PublicKey | null;\n    driftRewardSpotMarket2?: PublicKey | null;\n    driftRewardMint2?: PublicKey | null;\n  },\n  args: {\n    amount: BN;\n    withdrawAll: boolean;\n  },\n  remainingAccounts: AccountMeta[] = []\n): TransactionInstruction {\n  // Derive PDA for liquidity vault authority\n  const liquidityVaultAuthority = deriveBankLiquidityVaultAuthority(programId, accounts.bank)[0];\n\n  // Drift program address\n  const DRIFT_PROGRAM_ID = new PublicKey(\"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\");\n  const SYSTEM_PROGRAM_ID = new PublicKey(\"11111111111111111111111111111111\");\n\n  // Build keys in exact IDL order\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.group, isSigner: false, isWritable: false },\n    { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: true, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n  ];\n\n  // Add optional driftOracle\n  if (accounts.driftOracle) {\n    keys.push({\n      pubkey: accounts.driftOracle,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  // Add required accounts in IDL order\n  keys.push(\n    { pubkey: liquidityVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.destinationTokenAccount,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: accounts.driftState, isSigner: false, isWritable: false },\n    { pubkey: accounts.integrationAcc2, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc3, isSigner: false, isWritable: true },\n    { pubkey: accounts.integrationAcc1, isSigner: false, isWritable: true },\n    { pubkey: accounts.driftSpotMarketVault, isSigner: false, isWritable: true }\n  );\n\n  // Add optional reward accounts (in IDL order)\n  if (accounts.driftRewardOracle) {\n    keys.push({\n      pubkey: accounts.driftRewardOracle,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  if (accounts.driftRewardSpotMarket) {\n    keys.push({\n      pubkey: accounts.driftRewardSpotMarket,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  if (accounts.driftRewardMint) {\n    keys.push({\n      pubkey: accounts.driftRewardMint,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  if (accounts.driftRewardOracle2) {\n    keys.push({\n      pubkey: accounts.driftRewardOracle2,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  if (accounts.driftRewardSpotMarket2) {\n    keys.push({\n      pubkey: accounts.driftRewardSpotMarket2,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  if (accounts.driftRewardMint2) {\n    keys.push({\n      pubkey: accounts.driftRewardMint2,\n      isSigner: false,\n      isWritable: false,\n    });\n  }\n\n  // Add final required accounts\n  keys.push(\n    { pubkey: accounts.driftSigner, isSigner: false, isWritable: false },\n    { pubkey: accounts.mint, isSigner: false, isWritable: false },\n    { pubkey: DRIFT_PROGRAM_ID, isSigner: false, isWritable: false },\n    { pubkey: accounts.tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false }\n  );\n\n  // Add remaining accounts for health checks\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.DRIFT_WITHDRAW,\n    encodeU64(args.amount),\n    encodeBool(args.withdrawAll),\n  ]);\n\n  return new TransactionInstruction({ keys, programId, data });\n}\n\nfunction makePoolAddPermissionlessStakedBankIx(\n  programId: PublicKey,\n  accounts: {\n    marginfiGroup: PublicKey; // relations: [\"stakedSettings\"] - caller must provide\n    stakedSettings: PublicKey;\n    feePayer: PublicKey;\n    bankMint: PublicKey;\n    solPool: PublicKey;\n    poolOnramp: PublicKey; // SVSP on-ramp, derived from the stake pool (0.1.9+ program only)\n    stakePool: PublicKey;\n    validatorVoteAccount: PublicKey; // vote account backing the stake pool (0.1.9+ program only)\n    bank: PublicKey; // PDA - caller must derive using seeds: [marginfiGroup, bankMint, bankSeed]\n    liquidityVaultAuthority: PublicKey; // PDA - caller must derive\n    liquidityVault: PublicKey; // PDA - caller must derive\n    insuranceVaultAuthority: PublicKey; // PDA - caller must derive\n    insuranceVault: PublicKey; // PDA - caller must derive\n    feeVaultAuthority: PublicKey; // PDA - caller must derive\n    feeVault: PublicKey; // PDA - caller must derive\n    tokenProgram?: PublicKey;\n  },\n  remainingAccounts: AccountMeta[] = [],\n  args: {\n    seed?: BN;\n  }\n): TransactionInstruction {\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.marginfiGroup, isSigner: false, isWritable: true },\n    { pubkey: accounts.stakedSettings, isSigner: false, isWritable: false },\n    { pubkey: accounts.feePayer, isSigner: true, isWritable: true },\n    { pubkey: accounts.bankMint, isSigner: false, isWritable: false },\n    { pubkey: accounts.solPool, isSigner: false, isWritable: false },\n    { pubkey: accounts.poolOnramp, isSigner: false, isWritable: false },\n    { pubkey: accounts.stakePool, isSigner: false, isWritable: false },\n    { pubkey: accounts.validatorVoteAccount, isSigner: false, isWritable: false },\n    { pubkey: accounts.bank, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.liquidityVaultAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.liquidityVault, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.insuranceVaultAuthority,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: accounts.insuranceVault, isSigner: false, isWritable: true },\n    { pubkey: accounts.feeVaultAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.feeVault, isSigner: false, isWritable: true },\n    {\n      pubkey: accounts.tokenProgram || TOKEN_PROGRAM_ID,\n      isSigner: false,\n      isWritable: false,\n    },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n  ];\n\n  keys.push(...remainingAccounts);\n\n  const data = Buffer.concat([\n    DISCRIMINATORS.LENDING_POOL_ADD_BANK_PERMISSIONLESS,\n    encodeU64(args.seed || new BN(0)),\n  ]);\n\n  return new TransactionInstruction({\n    keys,\n    programId,\n    data,\n  });\n}\n\nconst syncInstructions = {\n  makeInitMarginfiAccountIx,\n  makeDepositIx,\n  makeDriftDepositIx,\n  makeKaminoDepositIx,\n  makeRepayIx,\n  makeWithdrawIx,\n  makeDriftWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeBorrowIx,\n  makeLendingAccountLiquidateIx,\n  makePoolAddBankIx,\n  makePoolConfigureBankIx,\n  makeBeginFlashLoanIx,\n  makeEndFlashLoanIx,\n  makeAccountTransferToNewAccountIx,\n  makeGroupInitIx,\n  makeCloseAccountIx,\n  makePoolAddPermissionlessStakedBankIx,\n  makeLendingPoolConfigureBankOracleIx,\n  makeLendingPoolConfigureBankOracleScopeIx,\n  makePulseHealthIx,\n};\n\nexport default syncInstructions;\n","import {\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { MakeBorrowIxParams, MakeBorrowTxParams, TransactionBuilderResult } from \"../types\";\nimport { computeHealthAccountMetas, computeHealthCheckAccounts } from \"../utils\";\n\nimport instructions from \"~/instructions\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeUnwrapSolIx,\n  selectLutsForAccountAction,\n  TransactionType,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { uiToNative } from \"~/utils\";\nimport {\n  createAssociatedTokenAccountIdempotentInstruction,\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n  TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\nexport async function makeBorrowIx({\n  program,\n  bank,\n  bankMap,\n  tokenProgram,\n  amount,\n  marginfiAccount,\n  authority,\n  isSync,\n  opts = {},\n}: MakeBorrowIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const createAtas = opts.createAtas ?? true;\n\n  const borrowIxs: TransactionInstruction[] = [];\n\n  const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  if (createAtas) {\n    const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n      authority,\n      userAta,\n      authority,\n      bank.mint,\n      tokenProgram\n    );\n    borrowIxs.push(createAtaIdempotentIx);\n  }\n\n  // Combine the borrow bank with any additional health check banks\n  // (e.g., deposit bank in a combined deposit-borrow operation)\n  const mandatoryBanks = [bank.address, ...(opts.additionalHealthCheckBanks ?? [])];\n\n  const healthAccounts = computeHealthCheckAccounts({\n    account: marginfiAccount,\n    banksMap: bankMap,\n    mandatoryBanks,\n  });\n\n  const remainingAccounts: PublicKey[] = [];\n\n  if (tokenProgram.equals(TOKEN_2022_PROGRAM_ID)) {\n    remainingAccounts.push(bank.mint);\n  }\n  if (opts?.observationBanksOverride) {\n    remainingAccounts.push(...opts.observationBanksOverride);\n  } else {\n    const accountMetas = computeHealthAccountMetas({ banksToInclude: healthAccounts });\n    remainingAccounts.push(...accountMetas);\n  }\n\n  const borrowIx = isSync\n    ? syncInstructions.makeBorrowIx(\n        program.programId,\n        {\n          marginfiAccount: marginfiAccount.address,\n          bank: bank.address,\n          destinationTokenAccount: userAta,\n          tokenProgram: tokenProgram,\n          authority: opts?.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          group: opts?.overrideInferAccounts?.group ?? marginfiAccount.group,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      )\n    : await instructions.makeBorrowIx(\n        program,\n        {\n          marginfiAccount: marginfiAccount.address,\n          bank: bank.address,\n          destinationTokenAccount: userAta,\n          tokenProgram: tokenProgram,\n          authority: opts?.overrideInferAccounts?.authority,\n          group: opts?.overrideInferAccounts?.group,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      );\n  borrowIxs.push(borrowIx);\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    borrowIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  return {\n    instructions: borrowIxs,\n    keys: [],\n  };\n}\n\nexport async function makeBorrowTx(params: MakeBorrowTxParams): Promise<TransactionBuilderResult> {\n  const { luts, connection, ...borrowIxParams } = params;\n\n  // Pick the lean native-stake LUT subset when every involved bank (target + the\n  // account's active positions + any extra health-check banks) is STAKED/SOL.\n  const selectedLuts = selectLutsForAccountAction(\n    luts,\n    borrowIxParams.bank,\n    params.marginfiAccount.balances,\n    params.bankMap,\n    borrowIxParams.opts?.additionalHealthCheckBanks\n  );\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [borrowIxParams.bank.address],\n    params.bankMetadataMap\n  );\n\n  const borrowIxs = await makeBorrowIx(borrowIxParams);\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount: params.marginfiAccount,\n    bankMap: params.bankMap,\n    oraclePrices: params.oraclePrices,\n    assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n    instructions: borrowIxs.instructions,\n    program: params.program,\n    connection: params.connection,\n    crossbarUrl: params.crossbarUrl,\n  });\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const feedCrankTxs: ExtendedV0Transaction[] = [];\n\n  if (updateFeedIxs.length > 0) {\n    feedCrankTxs.push(\n      addTransactionMetadata(\n        new VersionedTransaction(\n          new TransactionMessage({\n            instructions: updateFeedIxs,\n            payerKey: params.authority,\n            recentBlockhash: blockhash,\n          }).compileToV0Message(feedLuts)\n        ),\n        {\n          addressLookupTables: feedLuts,\n          type: TransactionType.CRANK,\n        }\n      )\n    );\n  }\n\n  const borrowTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIntegrationIxs.instructions, ...borrowIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: [...refreshIntegrationIxs.keys, ...borrowIxs.keys],\n      addressLookupTables: selectedLuts,\n      type: TransactionType.BORROW,\n    }\n  );\n\n  const transactions = [...feedCrankTxs, borrowTx];\n  return { transactions, actionTxIndex: transactions.length - 1 };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nexport interface DriftSpotMarket {\n  pubkey: PublicKey;\n  oracle: PublicKey;\n  mint: PublicKey;\n  decimals: number;\n  cumulativeDepositInterest: BN;\n  marketIndex: number;\n\n  // Additional fields needed for APY calculation\n  depositBalance: BN;\n  borrowBalance: BN;\n  cumulativeBorrowInterest: BN;\n  optimalUtilization: number;\n  optimalBorrowRate: number;\n  maxBorrowRate: number;\n  minBorrowRate: number;\n  insuranceFund: {\n    totalFactor: number;\n  };\n\n  // Pool identifier for market labeling (Main Market, JLP Market, LST Market, etc.)\n  poolId: number;\n}\n\nexport enum DriftSpotBalanceType {\n  DEPOSIT = \"deposit\",\n  BORROW = \"borrow\",\n}\n\nexport function isSpotBalanceTypeVariant(\n  value: DriftSpotBalanceType,\n  variant: \"deposit\" | \"borrow\"\n): boolean {\n  return value === variant;\n}\n","{\n  \"address\": \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\",\n  \"metadata\": {\n    \"name\": \"drift\",\n    \"version\": \"2.114.0\",\n    \"spec\": \"0.1.0\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"initialize_user\",\n      \"discriminator\": [111, 17, 185, 250, 60, 122, 38, 254],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_user_stats\",\n      \"discriminator\": [254, 243, 72, 98, 251, 130, 168, 213],\n      \"accounts\": [\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize_signed_msg_user_orders\",\n      \"discriminator\": [164, 99, 156, 126, 156, 57, 99, 180],\n      \"accounts\": [\n        {\n          \"name\": \"signed_msg_user_orders\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"num_orders\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"resize_signed_msg_user_orders\",\n      \"discriminator\": [137, 10, 87, 150, 18, 115, 79, 168],\n      \"accounts\": [\n        {\n          \"name\": \"signed_msg_user_orders\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"user\"\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"num_orders\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_signed_msg_ws_delegates\",\n      \"discriminator\": [40, 132, 96, 219, 184, 193, 80, 8],\n      \"accounts\": [\n        {\n          \"name\": \"signed_msg_ws_delegates\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"delegates\",\n          \"type\": {\n            \"vec\": \"pubkey\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"change_signed_msg_ws_delegate_status\",\n      \"discriminator\": [252, 202, 252, 219, 179, 27, 84, 138],\n      \"accounts\": [\n        {\n          \"name\": \"signed_msg_ws_delegates\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"delegate\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"add\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_fuel_overflow\",\n      \"discriminator\": [88, 223, 132, 161, 208, 88, 142, 42],\n      \"accounts\": [\n        {\n          \"name\": \"fuel_overflow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"sweep_fuel\",\n      \"discriminator\": [175, 107, 19, 56, 165, 241, 43, 69],\n      \"accounts\": [\n        {\n          \"name\": \"fuel_overflow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"reset_fuel_season\",\n      \"discriminator\": [199, 122, 192, 255, 32, 99, 63, 200],\n      \"accounts\": [\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize_referrer_name\",\n      \"discriminator\": [235, 126, 231, 10, 42, 164, 26, 61],\n      \"accounts\": [\n        {\n          \"name\": \"referrer_name\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit\",\n      \"discriminator\": [242, 35, 198, 137, 82, 225, 242, 182],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw\",\n      \"discriminator\": [183, 18, 70, 156, 148, 109, 161, 34],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"user_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transfer_deposit\",\n      \"discriminator\": [20, 20, 147, 223, 41, 63, 204, 111],\n      \"accounts\": [\n        {\n          \"name\": \"from_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"to_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market_vault\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transfer_pools\",\n      \"discriminator\": [197, 103, 154, 25, 107, 90, 60, 94],\n      \"accounts\": [\n        {\n          \"name\": \"from_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"to_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"deposit_from_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"deposit_to_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"borrow_from_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"borrow_to_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deposit_from_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"deposit_to_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"borrow_from_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"borrow_to_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"deposit_amount\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"borrow_amount\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"transfer_perp_position\",\n      \"discriminator\": [23, 172, 188, 168, 134, 210, 3, 108],\n      \"accounts\": [\n        {\n          \"name\": \"from_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"to_user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"option\": \"i64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_perp_order\",\n      \"discriminator\": [69, 161, 93, 202, 120, 126, 76, 185],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"cancel_order\",\n      \"discriminator\": [95, 129, 237, 240, 8, 49, 223, 132],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"cancel_order_by_user_id\",\n      \"discriminator\": [107, 211, 250, 133, 18, 37, 57, 100],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"user_order_id\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"cancel_orders\",\n      \"discriminator\": [238, 225, 95, 158, 227, 103, 8, 194],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_type\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"MarketType\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"market_index\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"direction\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"PositionDirection\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"cancel_orders_by_ids\",\n      \"discriminator\": [134, 19, 144, 165, 94, 240, 210, 94],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_ids\",\n          \"type\": {\n            \"vec\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"modify_order\",\n      \"discriminator\": [47, 124, 117, 255, 201, 197, 130, 94],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"modify_order_params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ModifyOrderParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"modify_order_by_user_id\",\n      \"discriminator\": [158, 77, 4, 253, 252, 194, 161, 179],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"user_order_id\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"modify_order_params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ModifyOrderParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_and_take_perp_order\",\n      \"discriminator\": [213, 51, 1, 187, 108, 220, 230, 224],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        },\n        {\n          \"name\": \"success_condition\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_and_make_perp_order\",\n      \"discriminator\": [149, 117, 11, 237, 47, 95, 89, 237],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        },\n        {\n          \"name\": \"taker_order_id\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"place_and_make_signed_msg_perp_order\",\n      \"discriminator\": [16, 26, 123, 131, 94, 29, 175, 98],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker_signed_msg_user_orders\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        },\n        {\n          \"name\": \"signed_msg_order_uuid\",\n          \"type\": {\n            \"array\": [\"u8\", 8]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_signed_msg_taker_order\",\n      \"discriminator\": [32, 79, 101, 139, 25, 6, 98, 15],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signed_msg_user_orders\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"ix_sysvar\",\n          \"docs\": [\n            \"the supplied Sysvar could be anything else.\",\n            \"The Instruction Sysvar has not been implemented\",\n            \"in the Anchor framework yet, so this is the safe approach.\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"signed_msg_order_params_message_bytes\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"name\": \"is_delegate_signer\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"place_spot_order\",\n      \"discriminator\": [45, 79, 81, 160, 248, 90, 91, 220],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_and_take_spot_order\",\n      \"discriminator\": [191, 3, 138, 71, 114, 198, 202, 100],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        },\n        {\n          \"name\": \"fulfillment_type\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"maker_order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_and_make_spot_order\",\n      \"discriminator\": [149, 158, 85, 66, 239, 9, 243, 98],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"taker_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OrderParams\"\n            }\n          }\n        },\n        {\n          \"name\": \"taker_order_id\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"fulfillment_type\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"place_orders\",\n      \"discriminator\": [60, 63, 50, 123, 12, 197, 60, 190],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"vec\": {\n              \"defined\": {\n                \"name\": \"OrderParams\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"begin_swap\",\n      \"discriminator\": [174, 109, 228, 1, 242, 105, 232, 105],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"out_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"in_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"out_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"in_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"instructions\",\n          \"docs\": [\"Instructions Sysvar for instruction introspection\"]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"in_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"out_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount_in\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"end_swap\",\n      \"discriminator\": [177, 184, 27, 193, 34, 13, 210, 145],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"out_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"in_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"out_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"in_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"instructions\",\n          \"docs\": [\"Instructions Sysvar for instruction introspection\"]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"in_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"out_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"limit_price\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"SwapReduceOnly\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"add_perp_lp_shares\",\n      \"discriminator\": [56, 209, 56, 197, 119, 254, 188, 117],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"n_shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"remove_perp_lp_shares\",\n      \"discriminator\": [213, 89, 217, 18, 160, 55, 53, 141],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares_to_burn\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"remove_perp_lp_shares_in_expiring_market\",\n      \"discriminator\": [83, 254, 253, 137, 59, 122, 68, 156],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares_to_burn\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_name\",\n      \"discriminator\": [135, 25, 185, 56, 165, 53, 34, 136],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_custom_margin_ratio\",\n      \"discriminator\": [21, 221, 140, 187, 32, 129, 11, 123],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"margin_ratio\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_margin_trading_enabled\",\n      \"discriminator\": [194, 92, 204, 223, 246, 188, 31, 203],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"margin_trading_enabled\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_pool_id\",\n      \"discriminator\": [219, 86, 73, 106, 56, 218, 128, 109],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"pool_id\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_delegate\",\n      \"discriminator\": [139, 205, 141, 141, 113, 36, 94, 187],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"delegate\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_reduce_only\",\n      \"discriminator\": [199, 71, 42, 67, 144, 19, 86, 109],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_advanced_lp\",\n      \"discriminator\": [66, 80, 107, 186, 27, 242, 66, 95],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"advanced_lp\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_protected_maker_orders\",\n      \"discriminator\": [114, 39, 123, 198, 187, 25, 90, 219],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"protected_maker_mode_config\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"protected_maker_orders\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"delete_user\",\n      \"discriminator\": [186, 85, 17, 249, 219, 231, 98, 251],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"force_delete_user\",\n      \"discriminator\": [2, 241, 195, 172, 227, 24, 254, 158],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"keeper\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"delete_signed_msg_user_orders\",\n      \"discriminator\": [221, 247, 128, 253, 212, 254, 46, 153],\n      \"accounts\": [\n        {\n          \"name\": \"signed_msg_user_orders\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"reclaim_rent\",\n      \"discriminator\": [218, 200, 19, 197, 227, 89, 192, 22],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"enable_user_high_leverage_mode\",\n      \"discriminator\": [231, 24, 230, 112, 201, 173, 73, 184],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"high_leverage_mode_config\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sub_account_id\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"fill_perp_order\",\n      \"discriminator\": [13, 188, 248, 103, 134, 217, 106, 240],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"filler_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"maker_order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"revert_fill\",\n      \"discriminator\": [236, 238, 176, 69, 239, 10, 181, 193],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"filler_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"fill_spot_order\",\n      \"discriminator\": [212, 206, 130, 173, 21, 34, 199, 40],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"filler_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"fulfillment_type\",\n          \"type\": {\n            \"option\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          }\n        },\n        {\n          \"name\": \"maker_order_id\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"trigger_order\",\n      \"discriminator\": [63, 112, 51, 233, 232, 47, 240, 199],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_id\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"force_cancel_orders\",\n      \"discriminator\": [64, 181, 196, 63, 222, 72, 64, 232],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_idle\",\n      \"discriminator\": [253, 133, 67, 22, 103, 161, 20, 100],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"log_user_balances\",\n      \"discriminator\": [162, 21, 35, 251, 32, 57, 161, 210],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"disable_user_high_leverage_mode\",\n      \"discriminator\": [183, 155, 45, 0, 226, 85, 213, 69],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"high_leverage_mode_config\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_fuel_bonus\",\n      \"discriminator\": [88, 175, 201, 190, 222, 100, 143, 57],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_stats_referrer_status\",\n      \"discriminator\": [174, 154, 72, 42, 191, 148, 145, 205],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_open_orders_count\",\n      \"discriminator\": [104, 39, 65, 210, 250, 163, 100, 134],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"filler\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"admin_disable_update_perp_bid_ask_twap\",\n      \"discriminator\": [17, 164, 82, 45, 183, 86, 191, 199],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"disable\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_pnl\",\n      \"discriminator\": [43, 61, 234, 45, 15, 95, 152, 153],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_multiple_pnls\",\n      \"discriminator\": [127, 66, 117, 57, 40, 50, 152, 127],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_indexes\",\n          \"type\": {\n            \"vec\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"mode\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"SettlePnlMode\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_funding_payment\",\n      \"discriminator\": [222, 90, 202, 94, 28, 45, 115, 183],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"settle_lp\",\n      \"discriminator\": [155, 231, 116, 113, 97, 229, 139, 141],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_expired_market\",\n      \"discriminator\": [120, 89, 11, 25, 122, 77, 72, 193],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_perp\",\n      \"discriminator\": [75, 35, 119, 247, 191, 18, 139, 2],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liquidator_max_base_asset_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"limit_price\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_perp_with_fill\",\n      \"discriminator\": [95, 111, 124, 105, 86, 169, 187, 34],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_spot\",\n      \"discriminator\": [107, 0, 128, 41, 35, 229, 251, 18],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"asset_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liability_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liquidator_max_liability_transfer\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"limit_price\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_spot_with_swap_begin\",\n      \"discriminator\": [12, 43, 176, 83, 156, 251, 117, 13],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liability_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"asset_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liability_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"asset_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"instructions\",\n          \"docs\": [\"Instructions Sysvar for instruction introspection\"]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"asset_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liability_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"swap_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_spot_with_swap_end\",\n      \"discriminator\": [142, 88, 163, 160, 223, 75, 55, 225],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liability_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"asset_spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liability_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"asset_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"instructions\",\n          \"docs\": [\"Instructions Sysvar for instruction introspection\"]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"asset_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liability_market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_borrow_for_perp_pnl\",\n      \"discriminator\": [169, 17, 32, 90, 207, 148, 209, 27],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"perp_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"spot_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liquidator_max_liability_transfer\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"limit_price\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_perp_pnl_for_deposit\",\n      \"discriminator\": [237, 75, 198, 235, 233, 186, 75, 35],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"perp_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"spot_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"liquidator_max_pnl_transfer\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"limit_price\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"set_user_status_to_being_liquidated\",\n      \"discriminator\": [106, 133, 160, 206, 193, 171, 192, 194],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"resolve_perp_pnl_deficit\",\n      \"discriminator\": [168, 204, 68, 150, 159, 126, 95, 148],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"spot_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"perp_market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"resolve_perp_bankruptcy\",\n      \"discriminator\": [224, 16, 176, 214, 162, 213, 183, 222],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"quote_spot_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"resolve_spot_bankruptcy\",\n      \"discriminator\": [124, 194, 240, 254, 198, 213, 52, 122],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"liquidator\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidator_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_revenue_to_insurance_fund\",\n      \"discriminator\": [200, 120, 93, 136, 69, 38, 199, 159],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"spot_market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_funding_rate\",\n      \"discriminator\": [201, 178, 116, 212, 166, 144, 72, 238],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_prelaunch_oracle\",\n      \"discriminator\": [220, 132, 27, 27, 233, 220, 61, 219],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\"\n        },\n        {\n          \"name\": \"oracle\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_perp_bid_ask_twap\",\n      \"discriminator\": [247, 23, 255, 65, 212, 90, 221, 194],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"keeper_stats\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_spot_market_cumulative_interest\",\n      \"discriminator\": [39, 166, 139, 243, 158, 165, 155, 225],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"spot_market_vault\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_amms\",\n      \"discriminator\": [201, 106, 217, 253, 4, 175, 228, 97],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_indexes\",\n          \"type\": {\n            \"array\": [\"u16\", 5]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_expiry\",\n      \"discriminator\": [208, 11, 211, 159, 226, 24, 11, 247],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"expiry_ts\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_user_quote_asset_insurance_stake\",\n      \"discriminator\": [251, 101, 156, 7, 2, 63, 30, 23],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_gov_token_insurance_stake\",\n      \"discriminator\": [143, 99, 235, 187, 20, 159, 184, 84],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_user_gov_token_insurance_stake_devnet\",\n      \"discriminator\": [129, 185, 243, 183, 228, 111, 64, 175],\n      \"accounts\": [\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"gov_stake_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_insurance_fund_stake\",\n      \"discriminator\": [187, 179, 243, 70, 248, 90, 92, 147],\n      \"accounts\": [\n        {\n          \"name\": \"spot_market\"\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"add_insurance_fund_stake\",\n      \"discriminator\": [251, 144, 115, 11, 222, 47, 62, 236],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"user_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"request_remove_insurance_fund_stake\",\n      \"discriminator\": [142, 70, 204, 92, 73, 106, 180, 52],\n      \"accounts\": [\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"cancel_request_remove_insurance_fund_stake\",\n      \"discriminator\": [97, 235, 78, 62, 212, 42, 241, 127],\n      \"accounts\": [\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"remove_insurance_fund_stake\",\n      \"discriminator\": [128, 166, 142, 9, 254, 187, 143, 174],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"user_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transfer_protocol_if_shares\",\n      \"discriminator\": [94, 93, 226, 240, 195, 201, 184, 109],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"transfer_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_stake\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"shares\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_pyth_pull_oracle\",\n      \"discriminator\": [230, 191, 189, 94, 108, 59, 74, 197],\n      \"accounts\": [\n        {\n          \"name\": \"keeper\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"pyth_solana_receiver\"\n        },\n        {\n          \"name\": \"encoded_vaa\"\n        },\n        {\n          \"name\": \"price_feed\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"feed_id\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        },\n        {\n          \"name\": \"params\",\n          \"type\": \"bytes\"\n        }\n      ]\n    },\n    {\n      \"name\": \"post_pyth_pull_oracle_update_atomic\",\n      \"discriminator\": [116, 122, 137, 158, 224, 195, 173, 119],\n      \"accounts\": [\n        {\n          \"name\": \"keeper\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"pyth_solana_receiver\"\n        },\n        {\n          \"name\": \"guardian_set\"\n        },\n        {\n          \"name\": \"price_feed\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"feed_id\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        },\n        {\n          \"name\": \"params\",\n          \"type\": \"bytes\"\n        }\n      ]\n    },\n    {\n      \"name\": \"post_multi_pyth_pull_oracle_updates_atomic\",\n      \"discriminator\": [243, 79, 204, 228, 227, 208, 100, 244],\n      \"accounts\": [\n        {\n          \"name\": \"keeper\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"pyth_solana_receiver\"\n        },\n        {\n          \"name\": \"guardian_set\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": \"bytes\"\n        }\n      ]\n    },\n    {\n      \"name\": \"pause_spot_market_deposit_withdraw\",\n      \"discriminator\": [183, 119, 59, 170, 137, 35, 242, 86],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"keeper\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize\",\n      \"discriminator\": [175, 175, 109, 31, 13, 152, 155, 237],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"quote_asset_mint\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize_spot_market\",\n      \"discriminator\": [234, 196, 128, 44, 94, 15, 48, 201],\n      \"accounts\": [\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_mint\"\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"optimal_utilization\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"optimal_borrow_rate\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"max_borrow_rate\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"oracle_source\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OracleSource\"\n            }\n          }\n        },\n        {\n          \"name\": \"initial_asset_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"maintenance_asset_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"initial_liability_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"maintenance_liability_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"imf_factor\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"liquidator_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"if_liquidation_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"active_status\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"asset_tier\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"AssetTier\"\n            }\n          }\n        },\n        {\n          \"name\": \"scale_initial_asset_weight_start\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_guard_threshold\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"order_tick_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"order_step_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"if_total_factor\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"delete_initialized_spot_market\",\n      \"discriminator\": [31, 140, 67, 191, 189, 20, 101, 221],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"insurance_fund_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_serum_fulfillment_config\",\n      \"discriminator\": [193, 211, 132, 172, 70, 171, 7, 94],\n      \"accounts\": [\n        {\n          \"name\": \"base_spot_market\"\n        },\n        {\n          \"name\": \"quote_spot_market\"\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"serum_program\"\n        },\n        {\n          \"name\": \"serum_market\"\n        },\n        {\n          \"name\": \"serum_open_orders\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"serum_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_serum_fulfillment_config_status\",\n      \"discriminator\": [171, 109, 240, 251, 95, 1, 149, 89],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"serum_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"SpotFulfillmentConfigStatus\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_openbook_v2_fulfillment_config\",\n      \"discriminator\": [7, 221, 103, 153, 107, 57, 27, 197],\n      \"accounts\": [\n        {\n          \"name\": \"base_spot_market\"\n        },\n        {\n          \"name\": \"quote_spot_market\"\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"openbook_v2_program\"\n        },\n        {\n          \"name\": \"openbook_v2_market\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"openbook_v2_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"openbook_v2_fulfillment_config_status\",\n      \"discriminator\": [25, 173, 19, 189, 4, 211, 64, 238],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"openbook_v2_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"SpotFulfillmentConfigStatus\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_phoenix_fulfillment_config\",\n      \"discriminator\": [135, 132, 110, 107, 185, 160, 169, 154],\n      \"accounts\": [\n        {\n          \"name\": \"base_spot_market\"\n        },\n        {\n          \"name\": \"quote_spot_market\"\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"phoenix_program\"\n        },\n        {\n          \"name\": \"phoenix_market\"\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"phoenix_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"phoenix_fulfillment_config_status\",\n      \"discriminator\": [96, 31, 113, 32, 12, 203, 7, 154],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"phoenix_fulfillment_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"SpotFulfillmentConfigStatus\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_serum_vault\",\n      \"discriminator\": [219, 8, 246, 96, 169, 121, 91, 110],\n      \"accounts\": [\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"srm_vault\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize_perp_market\",\n      \"discriminator\": [132, 9, 229, 118, 117, 118, 117, 62],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amm_base_asset_reserve\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"amm_quote_asset_reserve\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"amm_periodicity\",\n          \"type\": \"i64\"\n        },\n        {\n          \"name\": \"amm_peg_multiplier\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"oracle_source\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OracleSource\"\n            }\n          }\n        },\n        {\n          \"name\": \"contract_tier\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ContractTier\"\n            }\n          }\n        },\n        {\n          \"name\": \"margin_ratio_initial\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"margin_ratio_maintenance\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"liquidator_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"if_liquidation_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"imf_factor\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"active_status\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"base_spread\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"max_spread\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"max_open_interest\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"max_revenue_withdraw_per_period\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"quote_max_insurance\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"order_step_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"order_tick_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_order_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"concentration_coef_scale\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"curve_update_intensity\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"amm_jit_intensity\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_prediction_market\",\n      \"discriminator\": [248, 70, 198, 224, 224, 105, 125, 195],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"delete_initialized_perp_market\",\n      \"discriminator\": [91, 154, 24, 87, 106, 59, 190, 66],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"move_amm_price\",\n      \"discriminator\": [235, 109, 2, 82, 219, 118, 6, 159],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"base_asset_reserve\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"quote_asset_reserve\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"sqrt_k\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"recenter_perp_market_amm\",\n      \"discriminator\": [24, 87, 10, 115, 165, 190, 80, 139],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"peg_multiplier\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"sqrt_k\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_amm_summary_stats\",\n      \"discriminator\": [122, 101, 249, 238, 209, 9, 241, 245],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market\"\n        },\n        {\n          \"name\": \"oracle\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdatePerpMarketSummaryStatsParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_expiry\",\n      \"discriminator\": [44, 221, 227, 151, 131, 140, 22, 110],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"expiry_ts\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_expired_market_pools_to_revenue_pool\",\n      \"discriminator\": [55, 19, 238, 169, 227, 90, 200, 184],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"deposit_into_perp_market_fee_pool\",\n      \"discriminator\": [34, 58, 57, 68, 97, 80, 244, 6],\n      \"accounts\": [\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"source_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"drift_signer\"\n        },\n        {\n          \"name\": \"quote_spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_into_spot_market_vault\",\n      \"discriminator\": [48, 252, 119, 73, 255, 205, 174, 247],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"source_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_into_spot_market_revenue_pool\",\n      \"discriminator\": [92, 40, 151, 42, 122, 254, 139, 246],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"spot_market_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"repeg_amm_curve\",\n      \"discriminator\": [3, 36, 102, 89, 180, 128, 120, 213],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_peg_candidate\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_amm_oracle_twap\",\n      \"discriminator\": [241, 74, 114, 123, 206, 153, 24, 202],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"reset_perp_market_amm_oracle_twap\",\n      \"discriminator\": [127, 10, 55, 164, 123, 226, 47, 24],\n      \"accounts\": [\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_k\",\n      \"discriminator\": [72, 98, 9, 139, 129, 229, 172, 56],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sqrt_k\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_margin_ratio\",\n      \"discriminator\": [130, 173, 107, 45, 119, 105, 26, 113],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"margin_ratio_initial\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"margin_ratio_maintenance\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_high_leverage_margin_ratio\",\n      \"discriminator\": [88, 112, 86, 49, 24, 116, 74, 157],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"margin_ratio_initial\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"margin_ratio_maintenance\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_funding_period\",\n      \"discriminator\": [171, 161, 69, 91, 129, 139, 161, 28],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"funding_period\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_max_imbalances\",\n      \"discriminator\": [15, 206, 73, 133, 60, 8, 86, 89],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"unrealized_max_imbalance\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_revenue_withdraw_per_period\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"quote_max_insurance\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_liquidation_fee\",\n      \"discriminator\": [90, 137, 9, 145, 41, 8, 148, 117],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidator_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"if_liquidation_fee\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_insurance_fund_unstaking_period\",\n      \"discriminator\": [44, 69, 43, 226, 204, 223, 202, 52],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"insurance_fund_unstaking_period\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_pool_id\",\n      \"discriminator\": [22, 213, 197, 160, 139, 193, 81, 149],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"pool_id\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_liquidation_fee\",\n      \"discriminator\": [11, 13, 255, 53, 56, 136, 104, 177],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidator_fee\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"if_liquidation_fee\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_withdraw_guard_threshold\",\n      \"discriminator\": [56, 18, 39, 61, 155, 211, 44, 133],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"withdraw_guard_threshold\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_if_factor\",\n      \"discriminator\": [147, 30, 224, 34, 18, 230, 105, 4],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"spot_market_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"user_if_factor\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"total_if_factor\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_revenue_settle_period\",\n      \"discriminator\": [81, 92, 126, 41, 250, 225, 156, 219],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"revenue_settle_period\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_status\",\n      \"discriminator\": [78, 94, 16, 188, 193, 110, 231, 31],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"MarketStatus\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_paused_operations\",\n      \"discriminator\": [100, 61, 153, 81, 180, 12, 6, 248],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"paused_operations\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_asset_tier\",\n      \"discriminator\": [253, 209, 231, 14, 242, 208, 243, 130],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"asset_tier\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"AssetTier\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_margin_weights\",\n      \"discriminator\": [109, 33, 87, 195, 255, 36, 6, 81],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"initial_asset_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"maintenance_asset_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"initial_liability_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"maintenance_liability_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"imf_factor\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_borrow_rate\",\n      \"discriminator\": [71, 239, 236, 153, 210, 62, 254, 76],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"optimal_utilization\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"optimal_borrow_rate\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"max_borrow_rate\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"min_borrow_rate\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_max_token_deposits\",\n      \"discriminator\": [56, 191, 79, 18, 26, 121, 80, 208],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_token_deposits\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_max_token_borrows\",\n      \"discriminator\": [57, 102, 204, 212, 253, 95, 13, 199],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_token_borrows_fraction\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_scale_initial_asset_weight_start\",\n      \"discriminator\": [217, 204, 204, 118, 204, 130, 225, 147],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"scale_initial_asset_weight_start\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_oracle\",\n      \"discriminator\": [114, 184, 102, 37, 246, 186, 180, 99],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"old_oracle\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"oracle\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"oracle_source\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OracleSource\"\n            }\n          }\n        },\n        {\n          \"name\": \"skip_invariant_check\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_step_size_and_tick_size\",\n      \"discriminator\": [238, 153, 137, 80, 206, 59, 250, 61],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"step_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tick_size\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_min_order_size\",\n      \"discriminator\": [93, 128, 11, 119, 26, 20, 181, 50],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_size\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_orders_enabled\",\n      \"discriminator\": [190, 79, 206, 15, 26, 229, 229, 43],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"orders_enabled\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_if_paused_operations\",\n      \"discriminator\": [101, 215, 79, 74, 59, 41, 79, 12],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"paused_operations\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_name\",\n      \"discriminator\": [17, 208, 1, 1, 162, 211, 188, 224],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_status\",\n      \"discriminator\": [71, 201, 175, 122, 255, 207, 196, 207],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"MarketStatus\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_paused_operations\",\n      \"discriminator\": [53, 16, 136, 132, 30, 220, 121, 85],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"paused_operations\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_contract_tier\",\n      \"discriminator\": [236, 128, 15, 95, 203, 214, 68, 117],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"contract_tier\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ContractTier\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_imf_factor\",\n      \"discriminator\": [207, 194, 56, 132, 35, 67, 71, 244],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"imf_factor\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"unrealized_pnl_imf_factor\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_unrealized_asset_weight\",\n      \"discriminator\": [135, 132, 205, 165, 109, 150, 166, 106],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"unrealized_initial_asset_weight\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"unrealized_maintenance_asset_weight\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_concentration_coef\",\n      \"discriminator\": [24, 78, 232, 126, 169, 176, 230, 16],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"concentration_scale\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_curve_update_intensity\",\n      \"discriminator\": [50, 131, 6, 156, 226, 231, 189, 72],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"curve_update_intensity\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_target_base_asset_amount_per_lp\",\n      \"discriminator\": [62, 87, 68, 115, 29, 150, 150, 165],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"target_base_asset_amount_per_lp\",\n          \"type\": \"i32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_per_lp_base\",\n      \"discriminator\": [103, 152, 103, 102, 89, 144, 193, 71],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"per_lp_base\",\n          \"type\": \"i8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_lp_cooldown_time\",\n      \"discriminator\": [198, 133, 88, 41, 241, 119, 61, 14],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"lp_cooldown_time\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_fee_structure\",\n      \"discriminator\": [23, 178, 111, 203, 73, 22, 140, 75],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fee_structure\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"FeeStructure\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_fee_structure\",\n      \"discriminator\": [97, 216, 105, 131, 113, 246, 142, 141],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fee_structure\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"FeeStructure\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_initial_pct_to_liquidate\",\n      \"discriminator\": [210, 133, 225, 128, 194, 50, 13, 109],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"initial_pct_to_liquidate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_liquidation_duration\",\n      \"discriminator\": [28, 154, 20, 249, 102, 192, 73, 71],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidation_duration\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_liquidation_margin_buffer_ratio\",\n      \"discriminator\": [132, 224, 243, 160, 154, 82, 97, 215],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidation_margin_buffer_ratio\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_oracle_guard_rails\",\n      \"discriminator\": [131, 112, 10, 59, 32, 54, 40, 164],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"oracle_guard_rails\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OracleGuardRails\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_state_settlement_duration\",\n      \"discriminator\": [97, 68, 199, 235, 131, 80, 61, 173],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"settlement_duration\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_state_max_number_of_sub_accounts\",\n      \"discriminator\": [155, 123, 214, 2, 221, 166, 204, 85],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_number_of_sub_accounts\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_state_max_initialize_user_fee\",\n      \"discriminator\": [237, 225, 25, 237, 193, 45, 77, 97],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_initialize_user_fee\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_oracle\",\n      \"discriminator\": [182, 113, 111, 160, 67, 174, 89, 191],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"oracle\"\n        },\n        {\n          \"name\": \"old_oracle\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"oracle\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"oracle_source\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"OracleSource\"\n            }\n          }\n        },\n        {\n          \"name\": \"skip_invariant_check\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_base_spread\",\n      \"discriminator\": [71, 95, 84, 168, 9, 157, 198, 65],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"base_spread\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_amm_jit_intensity\",\n      \"discriminator\": [181, 191, 53, 109, 166, 249, 55, 142],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amm_jit_intensity\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_max_spread\",\n      \"discriminator\": [80, 252, 122, 62, 40, 218, 91, 100],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_spread\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_step_size_and_tick_size\",\n      \"discriminator\": [231, 255, 97, 25, 146, 139, 174, 4],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"step_size\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tick_size\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_name\",\n      \"discriminator\": [211, 31, 21, 210, 64, 108, 66, 201],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_min_order_size\",\n      \"discriminator\": [226, 74, 5, 89, 108, 223, 46, 141],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"order_size\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_max_slippage_ratio\",\n      \"discriminator\": [235, 37, 40, 196, 70, 146, 54, 201],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_slippage_ratio\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_max_fill_reserve_fraction\",\n      \"discriminator\": [19, 172, 114, 154, 42, 135, 161, 133],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_fill_reserve_fraction\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_max_open_interest\",\n      \"discriminator\": [194, 79, 149, 224, 246, 102, 186, 140],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_open_interest\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_number_of_users\",\n      \"discriminator\": [35, 62, 144, 177, 180, 62, 215, 196],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"number_of_users\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"number_of_users_with_base\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_fee_adjustment\",\n      \"discriminator\": [194, 174, 87, 102, 43, 148, 32, 112],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fee_adjustment\",\n          \"type\": \"i16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_fee_adjustment\",\n      \"discriminator\": [148, 182, 3, 126, 157, 114, 220, 99],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fee_adjustment\",\n          \"type\": \"i16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_market_fuel\",\n      \"discriminator\": [252, 141, 110, 101, 27, 99, 182, 21],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fuel_boost_taker\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_maker\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_position\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_market_fuel\",\n      \"discriminator\": [226, 253, 76, 71, 17, 2, 171, 169],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"spot_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fuel_boost_deposits\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_borrows\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_taker\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_maker\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_insurance\",\n          \"type\": {\n            \"option\": \"u8\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"init_user_fuel\",\n      \"discriminator\": [132, 191, 228, 141, 201, 138, 60, 48],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"user\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_stats\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fuel_boost_deposits\",\n          \"type\": {\n            \"option\": \"i32\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_borrows\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_taker\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_maker\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        },\n        {\n          \"name\": \"fuel_boost_insurance\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_admin\",\n      \"discriminator\": [161, 176, 40, 213, 60, 184, 179, 228],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"admin\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_whitelist_mint\",\n      \"discriminator\": [161, 15, 162, 19, 148, 120, 144, 151],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"whitelist_mint\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_discount_mint\",\n      \"discriminator\": [32, 252, 122, 211, 66, 31, 47, 241],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"discount_mint\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_exchange_status\",\n      \"discriminator\": [83, 160, 252, 250, 129, 116, 49, 223],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"exchange_status\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_perp_auction_duration\",\n      \"discriminator\": [126, 110, 52, 174, 30, 206, 215, 90],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"min_perp_auction_duration\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_spot_auction_duration\",\n      \"discriminator\": [182, 178, 203, 72, 187, 143, 157, 107],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"state\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"default_spot_auction_duration\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_protocol_if_shares_transfer_config\",\n      \"discriminator\": [89, 131, 239, 200, 178, 141, 106, 194],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"protocol_if_shares_transfer_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_protocol_if_shares_transfer_config\",\n      \"discriminator\": [34, 135, 47, 91, 220, 24, 212, 53],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"protocol_if_shares_transfer_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"whitelisted_signers\",\n          \"type\": {\n            \"option\": {\n              \"array\": [\"pubkey\", 4]\n            }\n          }\n        },\n        {\n          \"name\": \"max_transfer_per_epoch\",\n          \"type\": {\n            \"option\": \"u128\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_prelaunch_oracle\",\n      \"discriminator\": [169, 178, 84, 25, 175, 62, 29, 247],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"prelaunch_oracle\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"PrelaunchOracleParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_prelaunch_oracle_params\",\n      \"discriminator\": [98, 205, 147, 243, 18, 75, 83, 207],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"prelaunch_oracle\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"params\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"PrelaunchOracleParams\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"delete_prelaunch_oracle\",\n      \"discriminator\": [59, 169, 100, 49, 69, 17, 173, 253],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"prelaunch_oracle\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"perp_market\"\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"perp_market_index\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_pyth_pull_oracle\",\n      \"discriminator\": [249, 140, 253, 243, 248, 74, 240, 238],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"pyth_solana_receiver\"\n        },\n        {\n          \"name\": \"price_feed\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"feed_id\",\n          \"type\": {\n            \"array\": [\"u8\", 32]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_pyth_lazer_oracle\",\n      \"discriminator\": [140, 107, 33, 214, 235, 219, 103, 20],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lazer_oracle\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"feed_id\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"post_pyth_lazer_oracle_update\",\n      \"discriminator\": [218, 237, 170, 245, 39, 143, 166, 33],\n      \"accounts\": [\n        {\n          \"name\": \"keeper\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"pyth_lazer_storage\"\n        },\n        {\n          \"name\": \"ix_sysvar\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"pyth_message\",\n          \"type\": \"bytes\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_high_leverage_mode_config\",\n      \"discriminator\": [213, 167, 93, 246, 208, 130, 90, 248],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"high_leverage_mode_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_users\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_high_leverage_mode_config\",\n      \"discriminator\": [64, 122, 212, 93, 141, 217, 202, 55],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"high_leverage_mode_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_users\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_protected_maker_mode_config\",\n      \"discriminator\": [67, 103, 220, 67, 88, 32, 252, 8],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"protected_maker_mode_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_users\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_protected_maker_mode_config\",\n      \"discriminator\": [86, 166, 235, 253, 67, 202, 223, 17],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"protected_maker_mode_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"state\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"max_users\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"reduce_only\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"current_users\",\n          \"type\": {\n            \"option\": \"u32\"\n          }\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"OpenbookV2FulfillmentConfig\",\n      \"discriminator\": [3, 43, 58, 106, 131, 132, 199, 171]\n    },\n    {\n      \"name\": \"PhoenixV1FulfillmentConfig\",\n      \"discriminator\": [233, 45, 62, 40, 35, 129, 48, 72]\n    },\n    {\n      \"name\": \"SerumV3FulfillmentConfig\",\n      \"discriminator\": [65, 160, 197, 112, 239, 168, 103, 185]\n    },\n    {\n      \"name\": \"HighLeverageModeConfig\",\n      \"discriminator\": [3, 196, 90, 189, 193, 64, 228, 234]\n    },\n    {\n      \"name\": \"InsuranceFundStake\",\n      \"discriminator\": [110, 202, 14, 42, 95, 73, 90, 95]\n    },\n    {\n      \"name\": \"ProtocolIfSharesTransferConfig\",\n      \"discriminator\": [188, 1, 213, 98, 23, 148, 30, 1]\n    },\n    {\n      \"name\": \"PrelaunchOracle\",\n      \"discriminator\": [92, 14, 139, 234, 72, 244, 68, 26]\n    },\n    {\n      \"name\": \"PerpMarket\",\n      \"discriminator\": [10, 223, 12, 44, 107, 245, 55, 247]\n    },\n    {\n      \"name\": \"ProtectedMakerModeConfig\",\n      \"discriminator\": [47, 86, 90, 9, 224, 255, 10, 69]\n    },\n    {\n      \"name\": \"PythLazerOracle\",\n      \"discriminator\": [159, 7, 161, 249, 34, 81, 121, 133]\n    },\n    {\n      \"name\": \"SignedMsgUserOrders\",\n      \"discriminator\": [70, 6, 50, 248, 222, 1, 143, 49]\n    },\n    {\n      \"name\": \"SignedMsgWsDelegates\",\n      \"discriminator\": [190, 115, 111, 44, 216, 252, 108, 85]\n    },\n    {\n      \"name\": \"SpotMarket\",\n      \"discriminator\": [100, 177, 8, 107, 168, 65, 65, 39]\n    },\n    {\n      \"name\": \"State\",\n      \"discriminator\": [216, 146, 107, 94, 104, 75, 182, 177]\n    },\n    {\n      \"name\": \"User\",\n      \"discriminator\": [159, 117, 95, 227, 239, 151, 58, 236]\n    },\n    {\n      \"name\": \"UserStats\",\n      \"discriminator\": [176, 223, 136, 27, 122, 79, 32, 227]\n    },\n    {\n      \"name\": \"ReferrerName\",\n      \"discriminator\": [105, 133, 170, 110, 52, 42, 28, 182]\n    },\n    {\n      \"name\": \"FuelOverflow\",\n      \"discriminator\": [182, 64, 231, 177, 226, 142, 69, 58]\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"NewUserRecord\",\n      \"discriminator\": [236, 186, 113, 219, 42, 51, 149, 249]\n    },\n    {\n      \"name\": \"DepositRecord\",\n      \"discriminator\": [180, 241, 218, 207, 102, 135, 44, 134]\n    },\n    {\n      \"name\": \"SpotInterestRecord\",\n      \"discriminator\": [183, 186, 203, 186, 225, 187, 95, 130]\n    },\n    {\n      \"name\": \"FundingPaymentRecord\",\n      \"discriminator\": [8, 59, 96, 20, 137, 201, 56, 95]\n    },\n    {\n      \"name\": \"FundingRateRecord\",\n      \"discriminator\": [68, 3, 255, 26, 133, 91, 147, 254]\n    },\n    {\n      \"name\": \"CurveRecord\",\n      \"discriminator\": [101, 238, 40, 228, 70, 46, 61, 117]\n    },\n    {\n      \"name\": \"SignedMsgOrderRecord\",\n      \"discriminator\": [211, 197, 25, 18, 142, 86, 113, 27]\n    },\n    {\n      \"name\": \"OrderRecord\",\n      \"discriminator\": [104, 19, 64, 56, 89, 21, 2, 90]\n    },\n    {\n      \"name\": \"OrderActionRecord\",\n      \"discriminator\": [224, 52, 67, 71, 194, 237, 109, 1]\n    },\n    {\n      \"name\": \"LPRecord\",\n      \"discriminator\": [101, 22, 54, 38, 178, 13, 142, 111]\n    },\n    {\n      \"name\": \"LiquidationRecord\",\n      \"discriminator\": [127, 17, 0, 108, 182, 13, 231, 53]\n    },\n    {\n      \"name\": \"SettlePnlRecord\",\n      \"discriminator\": [57, 68, 105, 26, 119, 198, 213, 89]\n    },\n    {\n      \"name\": \"InsuranceFundRecord\",\n      \"discriminator\": [56, 222, 215, 235, 78, 197, 99, 146]\n    },\n    {\n      \"name\": \"InsuranceFundStakeRecord\",\n      \"discriminator\": [68, 66, 156, 7, 216, 148, 250, 114]\n    },\n    {\n      \"name\": \"SwapRecord\",\n      \"discriminator\": [162, 187, 123, 194, 138, 56, 250, 241]\n    },\n    {\n      \"name\": \"SpotMarketVaultDepositRecord\",\n      \"discriminator\": [178, 217, 23, 188, 127, 190, 32, 73]\n    },\n    {\n      \"name\": \"DeleteUserRecord\",\n      \"discriminator\": [71, 111, 190, 118, 7, 3, 132, 222]\n    },\n    {\n      \"name\": \"FuelSweepRecord\",\n      \"discriminator\": [41, 84, 37, 246, 132, 240, 131, 8]\n    },\n    {\n      \"name\": \"FuelSeasonRecord\",\n      \"discriminator\": [19, 137, 119, 33, 224, 249, 6, 87]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"InvalidSpotMarketAuthority\",\n      \"msg\": \"Invalid Spot Market Authority\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"InvalidInsuranceFundAuthority\",\n      \"msg\": \"Clearing house not insurance fund authority\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"InsufficientDeposit\",\n      \"msg\": \"Insufficient deposit\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"InsufficientCollateral\",\n      \"msg\": \"Insufficient collateral\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"SufficientCollateral\",\n      \"msg\": \"Sufficient collateral\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"MaxNumberOfPositions\",\n      \"msg\": \"Max number of positions taken\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"AdminControlsPricesDisabled\",\n      \"msg\": \"Admin Controls Prices Disabled\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"MarketDelisted\",\n      \"msg\": \"Market Delisted\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"MarketIndexAlreadyInitialized\",\n      \"msg\": \"Market Index Already Initialized\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"UserAccountAndUserPositionsAccountMismatch\",\n      \"msg\": \"User Account And User Positions Account Mismatch\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"UserHasNoPositionInMarket\",\n      \"msg\": \"User Has No Position In Market\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"InvalidInitialPeg\",\n      \"msg\": \"Invalid Initial Peg\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"InvalidRepegRedundant\",\n      \"msg\": \"AMM repeg already configured with amt given\"\n    },\n    {\n      \"code\": 6013,\n      \"name\": \"InvalidRepegDirection\",\n      \"msg\": \"AMM repeg incorrect repeg direction\"\n    },\n    {\n      \"code\": 6014,\n      \"name\": \"InvalidRepegProfitability\",\n      \"msg\": \"AMM repeg out of bounds pnl\"\n    },\n    {\n      \"code\": 6015,\n      \"name\": \"SlippageOutsideLimit\",\n      \"msg\": \"Slippage Outside Limit Price\"\n    },\n    {\n      \"code\": 6016,\n      \"name\": \"OrderSizeTooSmall\",\n      \"msg\": \"Order Size Too Small\"\n    },\n    {\n      \"code\": 6017,\n      \"name\": \"InvalidUpdateK\",\n      \"msg\": \"Price change too large when updating K\"\n    },\n    {\n      \"code\": 6018,\n      \"name\": \"AdminWithdrawTooLarge\",\n      \"msg\": \"Admin tried to withdraw amount larger than fees collected\"\n    },\n    {\n      \"code\": 6019,\n      \"name\": \"MathError\",\n      \"msg\": \"Math Error\"\n    },\n    {\n      \"code\": 6020,\n      \"name\": \"BnConversionError\",\n      \"msg\": \"Conversion to u128/u64 failed with an overflow or underflow\"\n    },\n    {\n      \"code\": 6021,\n      \"name\": \"ClockUnavailable\",\n      \"msg\": \"Clock unavailable\"\n    },\n    {\n      \"code\": 6022,\n      \"name\": \"UnableToLoadOracle\",\n      \"msg\": \"Unable To Load Oracles\"\n    },\n    {\n      \"code\": 6023,\n      \"name\": \"PriceBandsBreached\",\n      \"msg\": \"Price Bands Breached\"\n    },\n    {\n      \"code\": 6024,\n      \"name\": \"ExchangePaused\",\n      \"msg\": \"Exchange is paused\"\n    },\n    {\n      \"code\": 6025,\n      \"name\": \"InvalidWhitelistToken\",\n      \"msg\": \"Invalid whitelist token\"\n    },\n    {\n      \"code\": 6026,\n      \"name\": \"WhitelistTokenNotFound\",\n      \"msg\": \"Whitelist token not found\"\n    },\n    {\n      \"code\": 6027,\n      \"name\": \"InvalidDiscountToken\",\n      \"msg\": \"Invalid discount token\"\n    },\n    {\n      \"code\": 6028,\n      \"name\": \"DiscountTokenNotFound\",\n      \"msg\": \"Discount token not found\"\n    },\n    {\n      \"code\": 6029,\n      \"name\": \"ReferrerNotFound\",\n      \"msg\": \"Referrer not found\"\n    },\n    {\n      \"code\": 6030,\n      \"name\": \"ReferrerStatsNotFound\",\n      \"msg\": \"ReferrerNotFound\"\n    },\n    {\n      \"code\": 6031,\n      \"name\": \"ReferrerMustBeWritable\",\n      \"msg\": \"ReferrerMustBeWritable\"\n    },\n    {\n      \"code\": 6032,\n      \"name\": \"ReferrerStatsMustBeWritable\",\n      \"msg\": \"ReferrerMustBeWritable\"\n    },\n    {\n      \"code\": 6033,\n      \"name\": \"ReferrerAndReferrerStatsAuthorityUnequal\",\n      \"msg\": \"ReferrerAndReferrerStatsAuthorityUnequal\"\n    },\n    {\n      \"code\": 6034,\n      \"name\": \"InvalidReferrer\",\n      \"msg\": \"InvalidReferrer\"\n    },\n    {\n      \"code\": 6035,\n      \"name\": \"InvalidOracle\",\n      \"msg\": \"InvalidOracle\"\n    },\n    {\n      \"code\": 6036,\n      \"name\": \"OracleNotFound\",\n      \"msg\": \"OracleNotFound\"\n    },\n    {\n      \"code\": 6037,\n      \"name\": \"LiquidationsBlockedByOracle\",\n      \"msg\": \"Liquidations Blocked By Oracle\"\n    },\n    {\n      \"code\": 6038,\n      \"name\": \"MaxDeposit\",\n      \"msg\": \"Can not deposit more than max deposit\"\n    },\n    {\n      \"code\": 6039,\n      \"name\": \"CantDeleteUserWithCollateral\",\n      \"msg\": \"Can not delete user that still has collateral\"\n    },\n    {\n      \"code\": 6040,\n      \"name\": \"InvalidFundingProfitability\",\n      \"msg\": \"AMM funding out of bounds pnl\"\n    },\n    {\n      \"code\": 6041,\n      \"name\": \"CastingFailure\",\n      \"msg\": \"Casting Failure\"\n    },\n    {\n      \"code\": 6042,\n      \"name\": \"InvalidOrder\",\n      \"msg\": \"InvalidOrder\"\n    },\n    {\n      \"code\": 6043,\n      \"name\": \"InvalidOrderMaxTs\",\n      \"msg\": \"InvalidOrderMaxTs\"\n    },\n    {\n      \"code\": 6044,\n      \"name\": \"InvalidOrderMarketType\",\n      \"msg\": \"InvalidOrderMarketType\"\n    },\n    {\n      \"code\": 6045,\n      \"name\": \"InvalidOrderForInitialMarginReq\",\n      \"msg\": \"InvalidOrderForInitialMarginReq\"\n    },\n    {\n      \"code\": 6046,\n      \"name\": \"InvalidOrderNotRiskReducing\",\n      \"msg\": \"InvalidOrderNotRiskReducing\"\n    },\n    {\n      \"code\": 6047,\n      \"name\": \"InvalidOrderSizeTooSmall\",\n      \"msg\": \"InvalidOrderSizeTooSmall\"\n    },\n    {\n      \"code\": 6048,\n      \"name\": \"InvalidOrderNotStepSizeMultiple\",\n      \"msg\": \"InvalidOrderNotStepSizeMultiple\"\n    },\n    {\n      \"code\": 6049,\n      \"name\": \"InvalidOrderBaseQuoteAsset\",\n      \"msg\": \"InvalidOrderBaseQuoteAsset\"\n    },\n    {\n      \"code\": 6050,\n      \"name\": \"InvalidOrderIOC\",\n      \"msg\": \"InvalidOrderIOC\"\n    },\n    {\n      \"code\": 6051,\n      \"name\": \"InvalidOrderPostOnly\",\n      \"msg\": \"InvalidOrderPostOnly\"\n    },\n    {\n      \"code\": 6052,\n      \"name\": \"InvalidOrderIOCPostOnly\",\n      \"msg\": \"InvalidOrderIOCPostOnly\"\n    },\n    {\n      \"code\": 6053,\n      \"name\": \"InvalidOrderTrigger\",\n      \"msg\": \"InvalidOrderTrigger\"\n    },\n    {\n      \"code\": 6054,\n      \"name\": \"InvalidOrderAuction\",\n      \"msg\": \"InvalidOrderAuction\"\n    },\n    {\n      \"code\": 6055,\n      \"name\": \"InvalidOrderOracleOffset\",\n      \"msg\": \"InvalidOrderOracleOffset\"\n    },\n    {\n      \"code\": 6056,\n      \"name\": \"InvalidOrderMinOrderSize\",\n      \"msg\": \"InvalidOrderMinOrderSize\"\n    },\n    {\n      \"code\": 6057,\n      \"name\": \"PlacePostOnlyLimitFailure\",\n      \"msg\": \"Failed to Place Post-Only Limit Order\"\n    },\n    {\n      \"code\": 6058,\n      \"name\": \"UserHasNoOrder\",\n      \"msg\": \"User has no order\"\n    },\n    {\n      \"code\": 6059,\n      \"name\": \"OrderAmountTooSmall\",\n      \"msg\": \"Order Amount Too Small\"\n    },\n    {\n      \"code\": 6060,\n      \"name\": \"MaxNumberOfOrders\",\n      \"msg\": \"Max number of orders taken\"\n    },\n    {\n      \"code\": 6061,\n      \"name\": \"OrderDoesNotExist\",\n      \"msg\": \"Order does not exist\"\n    },\n    {\n      \"code\": 6062,\n      \"name\": \"OrderNotOpen\",\n      \"msg\": \"Order not open\"\n    },\n    {\n      \"code\": 6063,\n      \"name\": \"FillOrderDidNotUpdateState\",\n      \"msg\": \"FillOrderDidNotUpdateState\"\n    },\n    {\n      \"code\": 6064,\n      \"name\": \"ReduceOnlyOrderIncreasedRisk\",\n      \"msg\": \"Reduce only order increased risk\"\n    },\n    {\n      \"code\": 6065,\n      \"name\": \"UnableToLoadAccountLoader\",\n      \"msg\": \"Unable to load AccountLoader\"\n    },\n    {\n      \"code\": 6066,\n      \"name\": \"TradeSizeTooLarge\",\n      \"msg\": \"Trade Size Too Large\"\n    },\n    {\n      \"code\": 6067,\n      \"name\": \"UserCantReferThemselves\",\n      \"msg\": \"User cant refer themselves\"\n    },\n    {\n      \"code\": 6068,\n      \"name\": \"DidNotReceiveExpectedReferrer\",\n      \"msg\": \"Did not receive expected referrer\"\n    },\n    {\n      \"code\": 6069,\n      \"name\": \"CouldNotDeserializeReferrer\",\n      \"msg\": \"Could not deserialize referrer\"\n    },\n    {\n      \"code\": 6070,\n      \"name\": \"CouldNotDeserializeReferrerStats\",\n      \"msg\": \"Could not deserialize referrer stats\"\n    },\n    {\n      \"code\": 6071,\n      \"name\": \"UserOrderIdAlreadyInUse\",\n      \"msg\": \"User Order Id Already In Use\"\n    },\n    {\n      \"code\": 6072,\n      \"name\": \"NoPositionsLiquidatable\",\n      \"msg\": \"No positions liquidatable\"\n    },\n    {\n      \"code\": 6073,\n      \"name\": \"InvalidMarginRatio\",\n      \"msg\": \"Invalid Margin Ratio\"\n    },\n    {\n      \"code\": 6074,\n      \"name\": \"CantCancelPostOnlyOrder\",\n      \"msg\": \"Cant Cancel Post Only Order\"\n    },\n    {\n      \"code\": 6075,\n      \"name\": \"InvalidOracleOffset\",\n      \"msg\": \"InvalidOracleOffset\"\n    },\n    {\n      \"code\": 6076,\n      \"name\": \"CantExpireOrders\",\n      \"msg\": \"CantExpireOrders\"\n    },\n    {\n      \"code\": 6077,\n      \"name\": \"CouldNotLoadMarketData\",\n      \"msg\": \"CouldNotLoadMarketData\"\n    },\n    {\n      \"code\": 6078,\n      \"name\": \"PerpMarketNotFound\",\n      \"msg\": \"PerpMarketNotFound\"\n    },\n    {\n      \"code\": 6079,\n      \"name\": \"InvalidMarketAccount\",\n      \"msg\": \"InvalidMarketAccount\"\n    },\n    {\n      \"code\": 6080,\n      \"name\": \"UnableToLoadPerpMarketAccount\",\n      \"msg\": \"UnableToLoadMarketAccount\"\n    },\n    {\n      \"code\": 6081,\n      \"name\": \"MarketWrongMutability\",\n      \"msg\": \"MarketWrongMutability\"\n    },\n    {\n      \"code\": 6082,\n      \"name\": \"UnableToCastUnixTime\",\n      \"msg\": \"UnableToCastUnixTime\"\n    },\n    {\n      \"code\": 6083,\n      \"name\": \"CouldNotFindSpotPosition\",\n      \"msg\": \"CouldNotFindSpotPosition\"\n    },\n    {\n      \"code\": 6084,\n      \"name\": \"NoSpotPositionAvailable\",\n      \"msg\": \"NoSpotPositionAvailable\"\n    },\n    {\n      \"code\": 6085,\n      \"name\": \"InvalidSpotMarketInitialization\",\n      \"msg\": \"InvalidSpotMarketInitialization\"\n    },\n    {\n      \"code\": 6086,\n      \"name\": \"CouldNotLoadSpotMarketData\",\n      \"msg\": \"CouldNotLoadSpotMarketData\"\n    },\n    {\n      \"code\": 6087,\n      \"name\": \"SpotMarketNotFound\",\n      \"msg\": \"SpotMarketNotFound\"\n    },\n    {\n      \"code\": 6088,\n      \"name\": \"InvalidSpotMarketAccount\",\n      \"msg\": \"InvalidSpotMarketAccount\"\n    },\n    {\n      \"code\": 6089,\n      \"name\": \"UnableToLoadSpotMarketAccount\",\n      \"msg\": \"UnableToLoadSpotMarketAccount\"\n    },\n    {\n      \"code\": 6090,\n      \"name\": \"SpotMarketWrongMutability\",\n      \"msg\": \"SpotMarketWrongMutability\"\n    },\n    {\n      \"code\": 6091,\n      \"name\": \"SpotMarketInterestNotUpToDate\",\n      \"msg\": \"SpotInterestNotUpToDate\"\n    },\n    {\n      \"code\": 6092,\n      \"name\": \"SpotMarketInsufficientDeposits\",\n      \"msg\": \"SpotMarketInsufficientDeposits\"\n    },\n    {\n      \"code\": 6093,\n      \"name\": \"UserMustSettleTheirOwnPositiveUnsettledPNL\",\n      \"msg\": \"UserMustSettleTheirOwnPositiveUnsettledPNL\"\n    },\n    {\n      \"code\": 6094,\n      \"name\": \"CantUpdatePoolBalanceType\",\n      \"msg\": \"CantUpdatePoolBalanceType\"\n    },\n    {\n      \"code\": 6095,\n      \"name\": \"InsufficientCollateralForSettlingPNL\",\n      \"msg\": \"InsufficientCollateralForSettlingPNL\"\n    },\n    {\n      \"code\": 6096,\n      \"name\": \"AMMNotUpdatedInSameSlot\",\n      \"msg\": \"AMMNotUpdatedInSameSlot\"\n    },\n    {\n      \"code\": 6097,\n      \"name\": \"AuctionNotComplete\",\n      \"msg\": \"AuctionNotComplete\"\n    },\n    {\n      \"code\": 6098,\n      \"name\": \"MakerNotFound\",\n      \"msg\": \"MakerNotFound\"\n    },\n    {\n      \"code\": 6099,\n      \"name\": \"MakerStatsNotFound\",\n      \"msg\": \"MakerNotFound\"\n    },\n    {\n      \"code\": 6100,\n      \"name\": \"MakerMustBeWritable\",\n      \"msg\": \"MakerMustBeWritable\"\n    },\n    {\n      \"code\": 6101,\n      \"name\": \"MakerStatsMustBeWritable\",\n      \"msg\": \"MakerMustBeWritable\"\n    },\n    {\n      \"code\": 6102,\n      \"name\": \"MakerOrderNotFound\",\n      \"msg\": \"MakerOrderNotFound\"\n    },\n    {\n      \"code\": 6103,\n      \"name\": \"CouldNotDeserializeMaker\",\n      \"msg\": \"CouldNotDeserializeMaker\"\n    },\n    {\n      \"code\": 6104,\n      \"name\": \"CouldNotDeserializeMakerStats\",\n      \"msg\": \"CouldNotDeserializeMaker\"\n    },\n    {\n      \"code\": 6105,\n      \"name\": \"AuctionPriceDoesNotSatisfyMaker\",\n      \"msg\": \"AuctionPriceDoesNotSatisfyMaker\"\n    },\n    {\n      \"code\": 6106,\n      \"name\": \"MakerCantFulfillOwnOrder\",\n      \"msg\": \"MakerCantFulfillOwnOrder\"\n    },\n    {\n      \"code\": 6107,\n      \"name\": \"MakerOrderMustBePostOnly\",\n      \"msg\": \"MakerOrderMustBePostOnly\"\n    },\n    {\n      \"code\": 6108,\n      \"name\": \"CantMatchTwoPostOnlys\",\n      \"msg\": \"CantMatchTwoPostOnlys\"\n    },\n    {\n      \"code\": 6109,\n      \"name\": \"OrderBreachesOraclePriceLimits\",\n      \"msg\": \"OrderBreachesOraclePriceLimits\"\n    },\n    {\n      \"code\": 6110,\n      \"name\": \"OrderMustBeTriggeredFirst\",\n      \"msg\": \"OrderMustBeTriggeredFirst\"\n    },\n    {\n      \"code\": 6111,\n      \"name\": \"OrderNotTriggerable\",\n      \"msg\": \"OrderNotTriggerable\"\n    },\n    {\n      \"code\": 6112,\n      \"name\": \"OrderDidNotSatisfyTriggerCondition\",\n      \"msg\": \"OrderDidNotSatisfyTriggerCondition\"\n    },\n    {\n      \"code\": 6113,\n      \"name\": \"PositionAlreadyBeingLiquidated\",\n      \"msg\": \"PositionAlreadyBeingLiquidated\"\n    },\n    {\n      \"code\": 6114,\n      \"name\": \"PositionDoesntHaveOpenPositionOrOrders\",\n      \"msg\": \"PositionDoesntHaveOpenPositionOrOrders\"\n    },\n    {\n      \"code\": 6115,\n      \"name\": \"AllOrdersAreAlreadyLiquidations\",\n      \"msg\": \"AllOrdersAreAlreadyLiquidations\"\n    },\n    {\n      \"code\": 6116,\n      \"name\": \"CantCancelLiquidationOrder\",\n      \"msg\": \"CantCancelLiquidationOrder\"\n    },\n    {\n      \"code\": 6117,\n      \"name\": \"UserIsBeingLiquidated\",\n      \"msg\": \"UserIsBeingLiquidated\"\n    },\n    {\n      \"code\": 6118,\n      \"name\": \"LiquidationsOngoing\",\n      \"msg\": \"LiquidationsOngoing\"\n    },\n    {\n      \"code\": 6119,\n      \"name\": \"WrongSpotBalanceType\",\n      \"msg\": \"WrongSpotBalanceType\"\n    },\n    {\n      \"code\": 6120,\n      \"name\": \"UserCantLiquidateThemself\",\n      \"msg\": \"UserCantLiquidateThemself\"\n    },\n    {\n      \"code\": 6121,\n      \"name\": \"InvalidPerpPositionToLiquidate\",\n      \"msg\": \"InvalidPerpPositionToLiquidate\"\n    },\n    {\n      \"code\": 6122,\n      \"name\": \"InvalidBaseAssetAmountForLiquidatePerp\",\n      \"msg\": \"InvalidBaseAssetAmountForLiquidatePerp\"\n    },\n    {\n      \"code\": 6123,\n      \"name\": \"InvalidPositionLastFundingRate\",\n      \"msg\": \"InvalidPositionLastFundingRate\"\n    },\n    {\n      \"code\": 6124,\n      \"name\": \"InvalidPositionDelta\",\n      \"msg\": \"InvalidPositionDelta\"\n    },\n    {\n      \"code\": 6125,\n      \"name\": \"UserBankrupt\",\n      \"msg\": \"UserBankrupt\"\n    },\n    {\n      \"code\": 6126,\n      \"name\": \"UserNotBankrupt\",\n      \"msg\": \"UserNotBankrupt\"\n    },\n    {\n      \"code\": 6127,\n      \"name\": \"UserHasInvalidBorrow\",\n      \"msg\": \"UserHasInvalidBorrow\"\n    },\n    {\n      \"code\": 6128,\n      \"name\": \"DailyWithdrawLimit\",\n      \"msg\": \"DailyWithdrawLimit\"\n    },\n    {\n      \"code\": 6129,\n      \"name\": \"DefaultError\",\n      \"msg\": \"DefaultError\"\n    },\n    {\n      \"code\": 6130,\n      \"name\": \"InsufficientLPTokens\",\n      \"msg\": \"Insufficient LP tokens\"\n    },\n    {\n      \"code\": 6131,\n      \"name\": \"CantLPWithPerpPosition\",\n      \"msg\": \"Cant LP with a market position\"\n    },\n    {\n      \"code\": 6132,\n      \"name\": \"UnableToBurnLPTokens\",\n      \"msg\": \"Unable to burn LP tokens\"\n    },\n    {\n      \"code\": 6133,\n      \"name\": \"TryingToRemoveLiquidityTooFast\",\n      \"msg\": \"Trying to remove liqudity too fast after adding it\"\n    },\n    {\n      \"code\": 6134,\n      \"name\": \"InvalidSpotMarketVault\",\n      \"msg\": \"Invalid Spot Market Vault\"\n    },\n    {\n      \"code\": 6135,\n      \"name\": \"InvalidSpotMarketState\",\n      \"msg\": \"Invalid Spot Market State\"\n    },\n    {\n      \"code\": 6136,\n      \"name\": \"InvalidSerumProgram\",\n      \"msg\": \"InvalidSerumProgram\"\n    },\n    {\n      \"code\": 6137,\n      \"name\": \"InvalidSerumMarket\",\n      \"msg\": \"InvalidSerumMarket\"\n    },\n    {\n      \"code\": 6138,\n      \"name\": \"InvalidSerumBids\",\n      \"msg\": \"InvalidSerumBids\"\n    },\n    {\n      \"code\": 6139,\n      \"name\": \"InvalidSerumAsks\",\n      \"msg\": \"InvalidSerumAsks\"\n    },\n    {\n      \"code\": 6140,\n      \"name\": \"InvalidSerumOpenOrders\",\n      \"msg\": \"InvalidSerumOpenOrders\"\n    },\n    {\n      \"code\": 6141,\n      \"name\": \"FailedSerumCPI\",\n      \"msg\": \"FailedSerumCPI\"\n    },\n    {\n      \"code\": 6142,\n      \"name\": \"FailedToFillOnExternalMarket\",\n      \"msg\": \"FailedToFillOnExternalMarket\"\n    },\n    {\n      \"code\": 6143,\n      \"name\": \"InvalidFulfillmentConfig\",\n      \"msg\": \"InvalidFulfillmentConfig\"\n    },\n    {\n      \"code\": 6144,\n      \"name\": \"InvalidFeeStructure\",\n      \"msg\": \"InvalidFeeStructure\"\n    },\n    {\n      \"code\": 6145,\n      \"name\": \"InsufficientIFShares\",\n      \"msg\": \"Insufficient IF shares\"\n    },\n    {\n      \"code\": 6146,\n      \"name\": \"MarketActionPaused\",\n      \"msg\": \"the Market has paused this action\"\n    },\n    {\n      \"code\": 6147,\n      \"name\": \"MarketPlaceOrderPaused\",\n      \"msg\": \"the Market status doesnt allow placing orders\"\n    },\n    {\n      \"code\": 6148,\n      \"name\": \"MarketFillOrderPaused\",\n      \"msg\": \"the Market status doesnt allow filling orders\"\n    },\n    {\n      \"code\": 6149,\n      \"name\": \"MarketWithdrawPaused\",\n      \"msg\": \"the Market status doesnt allow withdraws\"\n    },\n    {\n      \"code\": 6150,\n      \"name\": \"ProtectedAssetTierViolation\",\n      \"msg\": \"Action violates the Protected Asset Tier rules\"\n    },\n    {\n      \"code\": 6151,\n      \"name\": \"IsolatedAssetTierViolation\",\n      \"msg\": \"Action violates the Isolated Asset Tier rules\"\n    },\n    {\n      \"code\": 6152,\n      \"name\": \"UserCantBeDeleted\",\n      \"msg\": \"User Cant Be Deleted\"\n    },\n    {\n      \"code\": 6153,\n      \"name\": \"ReduceOnlyWithdrawIncreasedRisk\",\n      \"msg\": \"Reduce Only Withdraw Increased Risk\"\n    },\n    {\n      \"code\": 6154,\n      \"name\": \"MaxOpenInterest\",\n      \"msg\": \"Max Open Interest\"\n    },\n    {\n      \"code\": 6155,\n      \"name\": \"CantResolvePerpBankruptcy\",\n      \"msg\": \"Cant Resolve Perp Bankruptcy\"\n    },\n    {\n      \"code\": 6156,\n      \"name\": \"LiquidationDoesntSatisfyLimitPrice\",\n      \"msg\": \"Liquidation Doesnt Satisfy Limit Price\"\n    },\n    {\n      \"code\": 6157,\n      \"name\": \"MarginTradingDisabled\",\n      \"msg\": \"Margin Trading Disabled\"\n    },\n    {\n      \"code\": 6158,\n      \"name\": \"InvalidMarketStatusToSettlePnl\",\n      \"msg\": \"Invalid Market Status to Settle Perp Pnl\"\n    },\n    {\n      \"code\": 6159,\n      \"name\": \"PerpMarketNotInSettlement\",\n      \"msg\": \"PerpMarketNotInSettlement\"\n    },\n    {\n      \"code\": 6160,\n      \"name\": \"PerpMarketNotInReduceOnly\",\n      \"msg\": \"PerpMarketNotInReduceOnly\"\n    },\n    {\n      \"code\": 6161,\n      \"name\": \"PerpMarketSettlementBufferNotReached\",\n      \"msg\": \"PerpMarketSettlementBufferNotReached\"\n    },\n    {\n      \"code\": 6162,\n      \"name\": \"PerpMarketSettlementUserHasOpenOrders\",\n      \"msg\": \"PerpMarketSettlementUserHasOpenOrders\"\n    },\n    {\n      \"code\": 6163,\n      \"name\": \"PerpMarketSettlementUserHasActiveLP\",\n      \"msg\": \"PerpMarketSettlementUserHasActiveLP\"\n    },\n    {\n      \"code\": 6164,\n      \"name\": \"UnableToSettleExpiredUserPosition\",\n      \"msg\": \"UnableToSettleExpiredUserPosition\"\n    },\n    {\n      \"code\": 6165,\n      \"name\": \"UnequalMarketIndexForSpotTransfer\",\n      \"msg\": \"UnequalMarketIndexForSpotTransfer\"\n    },\n    {\n      \"code\": 6166,\n      \"name\": \"InvalidPerpPositionDetected\",\n      \"msg\": \"InvalidPerpPositionDetected\"\n    },\n    {\n      \"code\": 6167,\n      \"name\": \"InvalidSpotPositionDetected\",\n      \"msg\": \"InvalidSpotPositionDetected\"\n    },\n    {\n      \"code\": 6168,\n      \"name\": \"InvalidAmmDetected\",\n      \"msg\": \"InvalidAmmDetected\"\n    },\n    {\n      \"code\": 6169,\n      \"name\": \"InvalidAmmForFillDetected\",\n      \"msg\": \"InvalidAmmForFillDetected\"\n    },\n    {\n      \"code\": 6170,\n      \"name\": \"InvalidAmmLimitPriceOverride\",\n      \"msg\": \"InvalidAmmLimitPriceOverride\"\n    },\n    {\n      \"code\": 6171,\n      \"name\": \"InvalidOrderFillPrice\",\n      \"msg\": \"InvalidOrderFillPrice\"\n    },\n    {\n      \"code\": 6172,\n      \"name\": \"SpotMarketBalanceInvariantViolated\",\n      \"msg\": \"SpotMarketBalanceInvariantViolated\"\n    },\n    {\n      \"code\": 6173,\n      \"name\": \"SpotMarketVaultInvariantViolated\",\n      \"msg\": \"SpotMarketVaultInvariantViolated\"\n    },\n    {\n      \"code\": 6174,\n      \"name\": \"InvalidPDA\",\n      \"msg\": \"InvalidPDA\"\n    },\n    {\n      \"code\": 6175,\n      \"name\": \"InvalidPDASigner\",\n      \"msg\": \"InvalidPDASigner\"\n    },\n    {\n      \"code\": 6176,\n      \"name\": \"RevenueSettingsCannotSettleToIF\",\n      \"msg\": \"RevenueSettingsCannotSettleToIF\"\n    },\n    {\n      \"code\": 6177,\n      \"name\": \"NoRevenueToSettleToIF\",\n      \"msg\": \"NoRevenueToSettleToIF\"\n    },\n    {\n      \"code\": 6178,\n      \"name\": \"NoAmmPerpPnlDeficit\",\n      \"msg\": \"NoAmmPerpPnlDeficit\"\n    },\n    {\n      \"code\": 6179,\n      \"name\": \"SufficientPerpPnlPool\",\n      \"msg\": \"SufficientPerpPnlPool\"\n    },\n    {\n      \"code\": 6180,\n      \"name\": \"InsufficientPerpPnlPool\",\n      \"msg\": \"InsufficientPerpPnlPool\"\n    },\n    {\n      \"code\": 6181,\n      \"name\": \"PerpPnlDeficitBelowThreshold\",\n      \"msg\": \"PerpPnlDeficitBelowThreshold\"\n    },\n    {\n      \"code\": 6182,\n      \"name\": \"MaxRevenueWithdrawPerPeriodReached\",\n      \"msg\": \"MaxRevenueWithdrawPerPeriodReached\"\n    },\n    {\n      \"code\": 6183,\n      \"name\": \"MaxIFWithdrawReached\",\n      \"msg\": \"InvalidSpotPositionDetected\"\n    },\n    {\n      \"code\": 6184,\n      \"name\": \"NoIFWithdrawAvailable\",\n      \"msg\": \"NoIFWithdrawAvailable\"\n    },\n    {\n      \"code\": 6185,\n      \"name\": \"InvalidIFUnstake\",\n      \"msg\": \"InvalidIFUnstake\"\n    },\n    {\n      \"code\": 6186,\n      \"name\": \"InvalidIFUnstakeSize\",\n      \"msg\": \"InvalidIFUnstakeSize\"\n    },\n    {\n      \"code\": 6187,\n      \"name\": \"InvalidIFUnstakeCancel\",\n      \"msg\": \"InvalidIFUnstakeCancel\"\n    },\n    {\n      \"code\": 6188,\n      \"name\": \"InvalidIFForNewStakes\",\n      \"msg\": \"InvalidIFForNewStakes\"\n    },\n    {\n      \"code\": 6189,\n      \"name\": \"InvalidIFRebase\",\n      \"msg\": \"InvalidIFRebase\"\n    },\n    {\n      \"code\": 6190,\n      \"name\": \"InvalidInsuranceUnstakeSize\",\n      \"msg\": \"InvalidInsuranceUnstakeSize\"\n    },\n    {\n      \"code\": 6191,\n      \"name\": \"InvalidOrderLimitPrice\",\n      \"msg\": \"InvalidOrderLimitPrice\"\n    },\n    {\n      \"code\": 6192,\n      \"name\": \"InvalidIFDetected\",\n      \"msg\": \"InvalidIFDetected\"\n    },\n    {\n      \"code\": 6193,\n      \"name\": \"InvalidAmmMaxSpreadDetected\",\n      \"msg\": \"InvalidAmmMaxSpreadDetected\"\n    },\n    {\n      \"code\": 6194,\n      \"name\": \"InvalidConcentrationCoef\",\n      \"msg\": \"InvalidConcentrationCoef\"\n    },\n    {\n      \"code\": 6195,\n      \"name\": \"InvalidSrmVault\",\n      \"msg\": \"InvalidSrmVault\"\n    },\n    {\n      \"code\": 6196,\n      \"name\": \"InvalidVaultOwner\",\n      \"msg\": \"InvalidVaultOwner\"\n    },\n    {\n      \"code\": 6197,\n      \"name\": \"InvalidMarketStatusForFills\",\n      \"msg\": \"InvalidMarketStatusForFills\"\n    },\n    {\n      \"code\": 6198,\n      \"name\": \"IFWithdrawRequestInProgress\",\n      \"msg\": \"IFWithdrawRequestInProgress\"\n    },\n    {\n      \"code\": 6199,\n      \"name\": \"NoIFWithdrawRequestInProgress\",\n      \"msg\": \"NoIFWithdrawRequestInProgress\"\n    },\n    {\n      \"code\": 6200,\n      \"name\": \"IFWithdrawRequestTooSmall\",\n      \"msg\": \"IFWithdrawRequestTooSmall\"\n    },\n    {\n      \"code\": 6201,\n      \"name\": \"IncorrectSpotMarketAccountPassed\",\n      \"msg\": \"IncorrectSpotMarketAccountPassed\"\n    },\n    {\n      \"code\": 6202,\n      \"name\": \"BlockchainClockInconsistency\",\n      \"msg\": \"BlockchainClockInconsistency\"\n    },\n    {\n      \"code\": 6203,\n      \"name\": \"InvalidIFSharesDetected\",\n      \"msg\": \"InvalidIFSharesDetected\"\n    },\n    {\n      \"code\": 6204,\n      \"name\": \"NewLPSizeTooSmall\",\n      \"msg\": \"NewLPSizeTooSmall\"\n    },\n    {\n      \"code\": 6205,\n      \"name\": \"MarketStatusInvalidForNewLP\",\n      \"msg\": \"MarketStatusInvalidForNewLP\"\n    },\n    {\n      \"code\": 6206,\n      \"name\": \"InvalidMarkTwapUpdateDetected\",\n      \"msg\": \"InvalidMarkTwapUpdateDetected\"\n    },\n    {\n      \"code\": 6207,\n      \"name\": \"MarketSettlementAttemptOnActiveMarket\",\n      \"msg\": \"MarketSettlementAttemptOnActiveMarket\"\n    },\n    {\n      \"code\": 6208,\n      \"name\": \"MarketSettlementRequiresSettledLP\",\n      \"msg\": \"MarketSettlementRequiresSettledLP\"\n    },\n    {\n      \"code\": 6209,\n      \"name\": \"MarketSettlementAttemptTooEarly\",\n      \"msg\": \"MarketSettlementAttemptTooEarly\"\n    },\n    {\n      \"code\": 6210,\n      \"name\": \"MarketSettlementTargetPriceInvalid\",\n      \"msg\": \"MarketSettlementTargetPriceInvalid\"\n    },\n    {\n      \"code\": 6211,\n      \"name\": \"UnsupportedSpotMarket\",\n      \"msg\": \"UnsupportedSpotMarket\"\n    },\n    {\n      \"code\": 6212,\n      \"name\": \"SpotOrdersDisabled\",\n      \"msg\": \"SpotOrdersDisabled\"\n    },\n    {\n      \"code\": 6213,\n      \"name\": \"MarketBeingInitialized\",\n      \"msg\": \"Market Being Initialized\"\n    },\n    {\n      \"code\": 6214,\n      \"name\": \"InvalidUserSubAccountId\",\n      \"msg\": \"Invalid Sub Account Id\"\n    },\n    {\n      \"code\": 6215,\n      \"name\": \"InvalidTriggerOrderCondition\",\n      \"msg\": \"Invalid Trigger Order Condition\"\n    },\n    {\n      \"code\": 6216,\n      \"name\": \"InvalidSpotPosition\",\n      \"msg\": \"Invalid Spot Position\"\n    },\n    {\n      \"code\": 6217,\n      \"name\": \"CantTransferBetweenSameUserAccount\",\n      \"msg\": \"Cant transfer between same user account\"\n    },\n    {\n      \"code\": 6218,\n      \"name\": \"InvalidPerpPosition\",\n      \"msg\": \"Invalid Perp Position\"\n    },\n    {\n      \"code\": 6219,\n      \"name\": \"UnableToGetLimitPrice\",\n      \"msg\": \"Unable To Get Limit Price\"\n    },\n    {\n      \"code\": 6220,\n      \"name\": \"InvalidLiquidation\",\n      \"msg\": \"Invalid Liquidation\"\n    },\n    {\n      \"code\": 6221,\n      \"name\": \"SpotFulfillmentConfigDisabled\",\n      \"msg\": \"Spot Fulfillment Config Disabled\"\n    },\n    {\n      \"code\": 6222,\n      \"name\": \"InvalidMaker\",\n      \"msg\": \"Invalid Maker\"\n    },\n    {\n      \"code\": 6223,\n      \"name\": \"FailedUnwrap\",\n      \"msg\": \"Failed Unwrap\"\n    },\n    {\n      \"code\": 6224,\n      \"name\": \"MaxNumberOfUsers\",\n      \"msg\": \"Max Number Of Users\"\n    },\n    {\n      \"code\": 6225,\n      \"name\": \"InvalidOracleForSettlePnl\",\n      \"msg\": \"InvalidOracleForSettlePnl\"\n    },\n    {\n      \"code\": 6226,\n      \"name\": \"MarginOrdersOpen\",\n      \"msg\": \"MarginOrdersOpen\"\n    },\n    {\n      \"code\": 6227,\n      \"name\": \"TierViolationLiquidatingPerpPnl\",\n      \"msg\": \"TierViolationLiquidatingPerpPnl\"\n    },\n    {\n      \"code\": 6228,\n      \"name\": \"CouldNotLoadUserData\",\n      \"msg\": \"CouldNotLoadUserData\"\n    },\n    {\n      \"code\": 6229,\n      \"name\": \"UserWrongMutability\",\n      \"msg\": \"UserWrongMutability\"\n    },\n    {\n      \"code\": 6230,\n      \"name\": \"InvalidUserAccount\",\n      \"msg\": \"InvalidUserAccount\"\n    },\n    {\n      \"code\": 6231,\n      \"name\": \"CouldNotLoadUserStatsData\",\n      \"msg\": \"CouldNotLoadUserData\"\n    },\n    {\n      \"code\": 6232,\n      \"name\": \"UserStatsWrongMutability\",\n      \"msg\": \"UserWrongMutability\"\n    },\n    {\n      \"code\": 6233,\n      \"name\": \"InvalidUserStatsAccount\",\n      \"msg\": \"InvalidUserAccount\"\n    },\n    {\n      \"code\": 6234,\n      \"name\": \"UserNotFound\",\n      \"msg\": \"UserNotFound\"\n    },\n    {\n      \"code\": 6235,\n      \"name\": \"UnableToLoadUserAccount\",\n      \"msg\": \"UnableToLoadUserAccount\"\n    },\n    {\n      \"code\": 6236,\n      \"name\": \"UserStatsNotFound\",\n      \"msg\": \"UserStatsNotFound\"\n    },\n    {\n      \"code\": 6237,\n      \"name\": \"UnableToLoadUserStatsAccount\",\n      \"msg\": \"UnableToLoadUserStatsAccount\"\n    },\n    {\n      \"code\": 6238,\n      \"name\": \"UserNotInactive\",\n      \"msg\": \"User Not Inactive\"\n    },\n    {\n      \"code\": 6239,\n      \"name\": \"RevertFill\",\n      \"msg\": \"RevertFill\"\n    },\n    {\n      \"code\": 6240,\n      \"name\": \"InvalidMarketAccountforDeletion\",\n      \"msg\": \"Invalid MarketAccount for Deletion\"\n    },\n    {\n      \"code\": 6241,\n      \"name\": \"InvalidSpotFulfillmentParams\",\n      \"msg\": \"Invalid Spot Fulfillment Params\"\n    },\n    {\n      \"code\": 6242,\n      \"name\": \"FailedToGetMint\",\n      \"msg\": \"Failed to Get Mint\"\n    },\n    {\n      \"code\": 6243,\n      \"name\": \"FailedPhoenixCPI\",\n      \"msg\": \"FailedPhoenixCPI\"\n    },\n    {\n      \"code\": 6244,\n      \"name\": \"FailedToDeserializePhoenixMarket\",\n      \"msg\": \"FailedToDeserializePhoenixMarket\"\n    },\n    {\n      \"code\": 6245,\n      \"name\": \"InvalidPricePrecision\",\n      \"msg\": \"InvalidPricePrecision\"\n    },\n    {\n      \"code\": 6246,\n      \"name\": \"InvalidPhoenixProgram\",\n      \"msg\": \"InvalidPhoenixProgram\"\n    },\n    {\n      \"code\": 6247,\n      \"name\": \"InvalidPhoenixMarket\",\n      \"msg\": \"InvalidPhoenixMarket\"\n    },\n    {\n      \"code\": 6248,\n      \"name\": \"InvalidSwap\",\n      \"msg\": \"InvalidSwap\"\n    },\n    {\n      \"code\": 6249,\n      \"name\": \"SwapLimitPriceBreached\",\n      \"msg\": \"SwapLimitPriceBreached\"\n    },\n    {\n      \"code\": 6250,\n      \"name\": \"SpotMarketReduceOnly\",\n      \"msg\": \"SpotMarketReduceOnly\"\n    },\n    {\n      \"code\": 6251,\n      \"name\": \"FundingWasNotUpdated\",\n      \"msg\": \"FundingWasNotUpdated\"\n    },\n    {\n      \"code\": 6252,\n      \"name\": \"ImpossibleFill\",\n      \"msg\": \"ImpossibleFill\"\n    },\n    {\n      \"code\": 6253,\n      \"name\": \"CantUpdatePerpBidAskTwap\",\n      \"msg\": \"CantUpdatePerpBidAskTwap\"\n    },\n    {\n      \"code\": 6254,\n      \"name\": \"UserReduceOnly\",\n      \"msg\": \"UserReduceOnly\"\n    },\n    {\n      \"code\": 6255,\n      \"name\": \"InvalidMarginCalculation\",\n      \"msg\": \"InvalidMarginCalculation\"\n    },\n    {\n      \"code\": 6256,\n      \"name\": \"CantPayUserInitFee\",\n      \"msg\": \"CantPayUserInitFee\"\n    },\n    {\n      \"code\": 6257,\n      \"name\": \"CantReclaimRent\",\n      \"msg\": \"CantReclaimRent\"\n    },\n    {\n      \"code\": 6258,\n      \"name\": \"InsuranceFundOperationPaused\",\n      \"msg\": \"InsuranceFundOperationPaused\"\n    },\n    {\n      \"code\": 6259,\n      \"name\": \"NoUnsettledPnl\",\n      \"msg\": \"NoUnsettledPnl\"\n    },\n    {\n      \"code\": 6260,\n      \"name\": \"PnlPoolCantSettleUser\",\n      \"msg\": \"PnlPoolCantSettleUser\"\n    },\n    {\n      \"code\": 6261,\n      \"name\": \"OracleNonPositive\",\n      \"msg\": \"OracleInvalid\"\n    },\n    {\n      \"code\": 6262,\n      \"name\": \"OracleTooVolatile\",\n      \"msg\": \"OracleTooVolatile\"\n    },\n    {\n      \"code\": 6263,\n      \"name\": \"OracleTooUncertain\",\n      \"msg\": \"OracleTooUncertain\"\n    },\n    {\n      \"code\": 6264,\n      \"name\": \"OracleStaleForMargin\",\n      \"msg\": \"OracleStaleForMargin\"\n    },\n    {\n      \"code\": 6265,\n      \"name\": \"OracleInsufficientDataPoints\",\n      \"msg\": \"OracleInsufficientDataPoints\"\n    },\n    {\n      \"code\": 6266,\n      \"name\": \"OracleStaleForAMM\",\n      \"msg\": \"OracleStaleForAMM\"\n    },\n    {\n      \"code\": 6267,\n      \"name\": \"UnableToParsePullOracleMessage\",\n      \"msg\": \"Unable to parse pull oracle message\"\n    },\n    {\n      \"code\": 6268,\n      \"name\": \"MaxBorrows\",\n      \"msg\": \"Can not borow more than max borrows\"\n    },\n    {\n      \"code\": 6269,\n      \"name\": \"OracleUpdatesNotMonotonic\",\n      \"msg\": \"Updates must be monotonically increasing\"\n    },\n    {\n      \"code\": 6270,\n      \"name\": \"OraclePriceFeedMessageMismatch\",\n      \"msg\": \"Trying to update price feed with the wrong feed id\"\n    },\n    {\n      \"code\": 6271,\n      \"name\": \"OracleUnsupportedMessageType\",\n      \"msg\": \"The message in the update must be a PriceFeedMessage\"\n    },\n    {\n      \"code\": 6272,\n      \"name\": \"OracleDeserializeMessageFailed\",\n      \"msg\": \"Could not deserialize the message in the update\"\n    },\n    {\n      \"code\": 6273,\n      \"name\": \"OracleWrongGuardianSetOwner\",\n      \"msg\": \"Wrong guardian set owner in update price atomic\"\n    },\n    {\n      \"code\": 6274,\n      \"name\": \"OracleWrongWriteAuthority\",\n      \"msg\": \"Oracle post update atomic price feed account must be drift program\"\n    },\n    {\n      \"code\": 6275,\n      \"name\": \"OracleWrongVaaOwner\",\n      \"msg\": \"Oracle vaa owner must be wormhole program\"\n    },\n    {\n      \"code\": 6276,\n      \"name\": \"OracleTooManyPriceAccountUpdates\",\n      \"msg\": \"Multi updates must have 2 or fewer accounts passed in remaining accounts\"\n    },\n    {\n      \"code\": 6277,\n      \"name\": \"OracleMismatchedVaaAndPriceUpdates\",\n      \"msg\": \"Don't have the same remaining accounts number and pyth updates left\"\n    },\n    {\n      \"code\": 6278,\n      \"name\": \"OracleBadRemainingAccountPublicKey\",\n      \"msg\": \"Remaining account passed does not match oracle update derived pda\"\n    },\n    {\n      \"code\": 6279,\n      \"name\": \"FailedOpenbookV2CPI\",\n      \"msg\": \"FailedOpenbookV2CPI\"\n    },\n    {\n      \"code\": 6280,\n      \"name\": \"InvalidOpenbookV2Program\",\n      \"msg\": \"InvalidOpenbookV2Program\"\n    },\n    {\n      \"code\": 6281,\n      \"name\": \"InvalidOpenbookV2Market\",\n      \"msg\": \"InvalidOpenbookV2Market\"\n    },\n    {\n      \"code\": 6282,\n      \"name\": \"NonZeroTransferFee\",\n      \"msg\": \"Non zero transfer fee\"\n    },\n    {\n      \"code\": 6283,\n      \"name\": \"LiquidationOrderFailedToFill\",\n      \"msg\": \"Liquidation order failed to fill\"\n    },\n    {\n      \"code\": 6284,\n      \"name\": \"InvalidPredictionMarketOrder\",\n      \"msg\": \"Invalid prediction market order\"\n    },\n    {\n      \"code\": 6285,\n      \"name\": \"InvalidVerificationIxIndex\",\n      \"msg\": \"Ed25519 Ix must be before place and make SignedMsg order ix\"\n    },\n    {\n      \"code\": 6286,\n      \"name\": \"SigVerificationFailed\",\n      \"msg\": \"SignedMsg message verificaiton failed\"\n    },\n    {\n      \"code\": 6287,\n      \"name\": \"MismatchedSignedMsgOrderParamsMarketIndex\",\n      \"msg\": \"Market index mismatched b/w taker and maker SignedMsg order params\"\n    },\n    {\n      \"code\": 6288,\n      \"name\": \"InvalidSignedMsgOrderParam\",\n      \"msg\": \"Invalid SignedMsg order param\"\n    },\n    {\n      \"code\": 6289,\n      \"name\": \"PlaceAndTakeOrderSuccessConditionFailed\",\n      \"msg\": \"Place and take order success condition failed\"\n    },\n    {\n      \"code\": 6290,\n      \"name\": \"InvalidHighLeverageModeConfig\",\n      \"msg\": \"Invalid High Leverage Mode Config\"\n    },\n    {\n      \"code\": 6291,\n      \"name\": \"InvalidRFQUserAccount\",\n      \"msg\": \"Invalid RFQ User Account\"\n    },\n    {\n      \"code\": 6292,\n      \"name\": \"RFQUserAccountWrongMutability\",\n      \"msg\": \"RFQUserAccount should be mutable\"\n    },\n    {\n      \"code\": 6293,\n      \"name\": \"RFQUserAccountFull\",\n      \"msg\": \"RFQUserAccount has too many active RFQs\"\n    },\n    {\n      \"code\": 6294,\n      \"name\": \"RFQOrderNotFilled\",\n      \"msg\": \"RFQ order not filled as expected\"\n    },\n    {\n      \"code\": 6295,\n      \"name\": \"InvalidRFQOrder\",\n      \"msg\": \"RFQ orders must be jit makers\"\n    },\n    {\n      \"code\": 6296,\n      \"name\": \"InvalidRFQMatch\",\n      \"msg\": \"RFQ matches must be valid\"\n    },\n    {\n      \"code\": 6297,\n      \"name\": \"InvalidSignedMsgUserAccount\",\n      \"msg\": \"Invalid SignedMsg user account\"\n    },\n    {\n      \"code\": 6298,\n      \"name\": \"SignedMsgUserAccountWrongMutability\",\n      \"msg\": \"SignedMsg account wrong mutability\"\n    },\n    {\n      \"code\": 6299,\n      \"name\": \"SignedMsgUserOrdersAccountFull\",\n      \"msg\": \"SignedMsgUserAccount has too many active orders\"\n    },\n    {\n      \"code\": 6300,\n      \"name\": \"SignedMsgOrderDoesNotExist\",\n      \"msg\": \"Order with SignedMsg uuid does not exist\"\n    },\n    {\n      \"code\": 6301,\n      \"name\": \"InvalidSignedMsgOrderId\",\n      \"msg\": \"SignedMsg order id cannot be 0s\"\n    },\n    {\n      \"code\": 6302,\n      \"name\": \"InvalidPoolId\",\n      \"msg\": \"Invalid pool id\"\n    },\n    {\n      \"code\": 6303,\n      \"name\": \"InvalidProtectedMakerModeConfig\",\n      \"msg\": \"Invalid Protected Maker Mode Config\"\n    },\n    {\n      \"code\": 6304,\n      \"name\": \"InvalidPythLazerStorageOwner\",\n      \"msg\": \"Invalid pyth lazer storage owner\"\n    },\n    {\n      \"code\": 6305,\n      \"name\": \"UnverifiedPythLazerMessage\",\n      \"msg\": \"Verification of pyth lazer message failed\"\n    },\n    {\n      \"code\": 6306,\n      \"name\": \"InvalidPythLazerMessage\",\n      \"msg\": \"Invalid pyth lazer message\"\n    },\n    {\n      \"code\": 6307,\n      \"name\": \"PythLazerMessagePriceFeedMismatch\",\n      \"msg\": \"Pyth lazer message does not correspond to correct fed id\"\n    },\n    {\n      \"code\": 6308,\n      \"name\": \"InvalidLiquidateSpotWithSwap\",\n      \"msg\": \"InvalidLiquidateSpotWithSwap\"\n    },\n    {\n      \"code\": 6309,\n      \"name\": \"SignedMsgUserContextUserMismatch\",\n      \"msg\": \"User in SignedMsg message does not match user in ix context\"\n    },\n    {\n      \"code\": 6310,\n      \"name\": \"UserFuelOverflowThresholdNotMet\",\n      \"msg\": \"User fuel overflow threshold not met\"\n    },\n    {\n      \"code\": 6311,\n      \"name\": \"FuelOverflowAccountNotFound\",\n      \"msg\": \"FuelOverflow account not found\"\n    },\n    {\n      \"code\": 6312,\n      \"name\": \"InvalidTransferPerpPosition\",\n      \"msg\": \"Invalid Transfer Perp Position\"\n    },\n    {\n      \"code\": 6313,\n      \"name\": \"InvalidSignedMsgUserOrdersResize\",\n      \"msg\": \"Invalid SignedMsgUserOrders resize\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"UpdatePerpMarketSummaryStatsParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"quote_asset_amount_with_unsettled_lp\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"net_unsettled_funding_pnl\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"update_amm_summary_stats\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"exclude_total_liq_fee\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidatePerpRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"lp_shares\",\n            \"docs\": [\"precision: AMM_RESERVE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fill_record_id\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_order_id\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"liquidator_order_id\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"liquidator_fee\",\n            \"docs\": [\"precision: QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"if_fee\",\n            \"docs\": [\"precision: QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidateSpotRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"asset_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"asset_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"asset_transfer\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"liability_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"liability_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"liability_transfer\",\n            \"docs\": [\"precision: token mint precision\"],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"if_fee\",\n            \"docs\": [\"precision: token mint precision\"],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidateBorrowForPerpPnlRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"perp_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"market_oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"pnl_transfer\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"liability_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"liability_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"liability_transfer\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidatePerpPnlForDepositRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"perp_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"market_oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"pnl_transfer\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"asset_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"asset_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"asset_transfer\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PerpBankruptcyRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pnl\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"if_payment\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"clawback_user\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"clawback_user_payment\",\n            \"type\": {\n              \"option\": \"u128\"\n            }\n          },\n          {\n            \"name\": \"cumulative_funding_rate_delta\",\n            \"type\": \"i128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotBankruptcyRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"borrow_amount\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"if_payment\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_deposit_interest_delta\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketIdentifier\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketType\"\n              }\n            }\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"HistoricalOracleData\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_oracle_price\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_conf\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_oracle_delay\",\n            \"docs\": [\"number of slots since last update\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_price_twap\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_price_twap5min\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_price_twap_ts\",\n            \"docs\": [\"unix_timestamp of last snapshot\"],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"HistoricalIndexData\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_index_bid_price\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_index_ask_price\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_index_price_twap\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_index_price_twap5min\",\n            \"docs\": [\"precision: PRICE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_index_price_twap_ts\",\n            \"docs\": [\"unix_timestamp of last snapshot\"],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PrelaunchOracleParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"perp_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"max_price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"order_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderType\"\n              }\n            }\n          },\n          {\n            \"name\": \"market_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketType\"\n              }\n            }\n          },\n          {\n            \"name\": \"direction\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PositionDirection\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_order_id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"price\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"reduce_only\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"post_only\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PostOnlyParam\"\n              }\n            }\n          },\n          {\n            \"name\": \"immediate_or_cancel\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"max_ts\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"trigger_price\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"trigger_condition\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderTriggerCondition\"\n              }\n            }\n          },\n          {\n            \"name\": \"oracle_price_offset\",\n            \"type\": {\n              \"option\": \"i32\"\n            }\n          },\n          {\n            \"name\": \"auction_duration\",\n            \"type\": {\n              \"option\": \"u8\"\n            }\n          },\n          {\n            \"name\": \"auction_start_price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"auction_end_price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgOrderParamsMessage\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"signed_msg_order_params\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderParams\"\n              }\n            }\n          },\n          {\n            \"name\": \"sub_account_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"uuid\",\n            \"type\": {\n              \"array\": [\"u8\", 8]\n            }\n          },\n          {\n            \"name\": \"take_profit_order_params\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"SignedMsgTriggerOrderParams\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"stop_loss_order_params\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"SignedMsgTriggerOrderParams\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgTriggerOrderParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trigger_price\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ModifyOrderParams\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"direction\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"PositionDirection\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"price\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"reduce_only\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"post_only\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"PostOnlyParam\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"immediate_or_cancel\",\n            \"type\": {\n              \"option\": \"bool\"\n            }\n          },\n          {\n            \"name\": \"max_ts\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"trigger_price\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"trigger_condition\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"OrderTriggerCondition\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"oracle_price_offset\",\n            \"type\": {\n              \"option\": \"i32\"\n            }\n          },\n          {\n            \"name\": \"auction_duration\",\n            \"type\": {\n              \"option\": \"u8\"\n            }\n          },\n          {\n            \"name\": \"auction_start_price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"auction_end_price\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"policy\",\n            \"type\": {\n              \"option\": \"u8\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceClaim\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"revenue_withdraw_since_last_settle\",\n            \"docs\": [\n              \"The amount of revenue last settled\",\n              \"Positive if funds left the perp market,\",\n              \"negative if funds were pulled into the perp market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"max_revenue_withdraw_per_period\",\n            \"docs\": [\n              \"The max amount of revenue that can be withdrawn per period\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"quote_max_insurance\",\n            \"docs\": [\n              \"The max amount of insurance that perp market can use to resolve bankruptcy and pnl deficits\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"quote_settled_insurance\",\n            \"docs\": [\n              \"The amount of insurance that has been used to resolve bankruptcy and pnl deficits\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_revenue_withdraw_ts\",\n            \"docs\": [\"The last time revenue was settled in/out of market\"],\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PoolBalance\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"scaled_balance\",\n            \"docs\": [\n              \"To get the pool's token amount, you must multiply the scaled balance by the market's cumulative\",\n              \"deposit interest\",\n              \"precision: SPOT_BALANCE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"docs\": [\"The spot market the pool is for\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 6]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AMM\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"oracle\",\n            \"docs\": [\"oracle price data public key\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"historical_oracle_data\",\n            \"docs\": [\"stores historically witnessed oracle data\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"HistoricalOracleData\"\n              }\n            }\n          },\n          {\n            \"name\": \"base_asset_amount_per_lp\",\n            \"docs\": [\n              \"accumulated base asset amount since inception per lp share\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"quote_asset_amount_per_lp\",\n            \"docs\": [\n              \"accumulated quote asset amount since inception per lp share\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"fee_pool\",\n            \"docs\": [\n              \"partition of fees from perp market trading moved from pnl settlements\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PoolBalance\"\n              }\n            }\n          },\n          {\n            \"name\": \"base_asset_reserve\",\n            \"docs\": [\n              \"`x` reserves for constant product mm formula (x * y = k)\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"quote_asset_reserve\",\n            \"docs\": [\n              \"`y` reserves for constant product mm formula (x * y = k)\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"concentration_coef\",\n            \"docs\": [\n              \"determines how close the min/max base asset reserve sit vs base reserves\",\n              \"allow for decreasing slippage without increasing liquidity and v.v.\",\n              \"precision: PERCENTAGE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"min_base_asset_reserve\",\n            \"docs\": [\n              \"minimum base_asset_reserve allowed before AMM is unavailable\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"max_base_asset_reserve\",\n            \"docs\": [\n              \"maximum base_asset_reserve allowed before AMM is unavailable\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"sqrt_k\",\n            \"docs\": [\n              \"`sqrt(k)` in constant product mm formula (x * y = k). stored to avoid drift caused by integer math issues\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"peg_multiplier\",\n            \"docs\": [\n              \"normalizing numerical factor for y, its use offers lowest slippage in cp-curve when market is balanced\",\n              \"precision: PEG_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"terminal_quote_asset_reserve\",\n            \"docs\": [\n              \"y when market is balanced. stored to save computation\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_amount_long\",\n            \"docs\": [\n              \"always non-negative. tracks number of total longs in market (regardless of counterparty)\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"base_asset_amount_short\",\n            \"docs\": [\n              \"always non-positive. tracks number of total shorts in market (regardless of counterparty)\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"base_asset_amount_with_amm\",\n            \"docs\": [\n              \"tracks net position (longs-shorts) in market with AMM as counterparty\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"base_asset_amount_with_unsettled_lp\",\n            \"docs\": [\n              \"tracks net position (longs-shorts) in market with LPs as counterparty\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"max_open_interest\",\n            \"docs\": [\n              \"max allowed open interest, blocks trades that breach this value\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"quote_asset_amount\",\n            \"docs\": [\n              \"sum of all user's perp quote_asset_amount in market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"quote_entry_amount_long\",\n            \"docs\": [\n              \"sum of all long user's quote_entry_amount in market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"quote_entry_amount_short\",\n            \"docs\": [\n              \"sum of all short user's quote_entry_amount in market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"quote_break_even_amount_long\",\n            \"docs\": [\n              \"sum of all long user's quote_break_even_amount in market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"quote_break_even_amount_short\",\n            \"docs\": [\n              \"sum of all short user's quote_break_even_amount in market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"user_lp_shares\",\n            \"docs\": [\n              \"total user lp shares of sqrt_k (protocol owned liquidity = sqrt_k - last_funding_rate)\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"last_funding_rate\",\n            \"docs\": [\n              \"last funding rate in this perp market (unit is quote per base)\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_funding_rate_long\",\n            \"docs\": [\n              \"last funding rate for longs in this perp market (unit is quote per base)\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_funding_rate_short\",\n            \"docs\": [\n              \"last funding rate for shorts in this perp market (unit is quote per base)\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last24h_avg_funding_rate\",\n            \"docs\": [\n              \"estimate of last 24h of funding rate perp market (unit is quote per base)\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"total_fee\",\n            \"docs\": [\n              \"total fees collected by this perp market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_mm_fee\",\n            \"docs\": [\n              \"total fees collected by the vAMM's bid/ask spread\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_exchange_fee\",\n            \"docs\": [\n              \"total fees collected by exchange fee schedule\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_fee_minus_distributions\",\n            \"docs\": [\n              \"total fees minus any recognized upnl and pool withdraws\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_fee_withdrawn\",\n            \"docs\": [\n              \"sum of all fees from fee pool withdrawn to revenue pool\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_liquidation_fee\",\n            \"docs\": [\n              \"all fees collected by market for liquidations\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_funding_rate_long\",\n            \"docs\": [\n              \"accumulated funding rate for longs since inception in market\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"cumulative_funding_rate_short\",\n            \"docs\": [\n              \"accumulated funding rate for shorts since inception in market\"\n            ],\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_social_loss\",\n            \"docs\": [\n              \"accumulated social loss paid by users since inception in market\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"ask_base_asset_reserve\",\n            \"docs\": [\n              \"transformed base_asset_reserve for users going long\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"ask_quote_asset_reserve\",\n            \"docs\": [\n              \"transformed quote_asset_reserve for users going long\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"bid_base_asset_reserve\",\n            \"docs\": [\n              \"transformed base_asset_reserve for users going short\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"bid_quote_asset_reserve\",\n            \"docs\": [\n              \"transformed quote_asset_reserve for users going short\",\n              \"precision: AMM_RESERVE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"last_oracle_normalised_price\",\n            \"docs\": [\n              \"the last seen oracle price partially shrunk toward the amm reserve price\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_oracle_reserve_price_spread_pct\",\n            \"docs\": [\n              \"the gap between the oracle price and the reserve price = y * peg_multiplier / x\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_bid_price_twap\",\n            \"docs\": [\n              \"average estimate of bid price over funding_period\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_ask_price_twap\",\n            \"docs\": [\n              \"average estimate of ask price over funding_period\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_mark_price_twap\",\n            \"docs\": [\n              \"average estimate of (bid+ask)/2 price over funding_period\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_mark_price_twap5min\",\n            \"docs\": [\"average estimate of (bid+ask)/2 price over FIVE_MINUTES\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_slot\",\n            \"docs\": [\"the last blockchain slot the amm was updated\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_oracle_conf_pct\",\n            \"docs\": [\n              \"the pct size of the oracle confidence interval\",\n              \"precision: PERCENTAGE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"net_revenue_since_last_funding\",\n            \"docs\": [\n              \"the total_fee_minus_distribution change since the last funding update\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_funding_rate_ts\",\n            \"docs\": [\"the last funding rate update unix_timestamp\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"funding_period\",\n            \"docs\": [\"the peridocity of the funding rate updates\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"order_step_size\",\n            \"docs\": [\n              \"the base step size (increment) of orders\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"order_tick_size\",\n            \"docs\": [\n              \"the price tick size of orders\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_order_size\",\n            \"docs\": [\n              \"the minimum base size of an order\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_position_size\",\n            \"docs\": [\n              \"the max base size a single user can have\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"volume24h\",\n            \"docs\": [\"estimated total of volume in market\", \"QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"long_intensity_volume\",\n            \"docs\": [\"the volume intensity of long fills against AMM\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"short_intensity_volume\",\n            \"docs\": [\"the volume intensity of short fills against AMM\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_trade_ts\",\n            \"docs\": [\n              \"the blockchain unix timestamp at the time of the last trade\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"mark_std\",\n            \"docs\": [\n              \"estimate of standard deviation of the fill (mark) prices\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_std\",\n            \"docs\": [\n              \"estimate of standard deviation of the oracle price at each update\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_mark_price_twap_ts\",\n            \"docs\": [\"the last unix_timestamp the mark twap was updated\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"base_spread\",\n            \"docs\": [\n              \"the minimum spread the AMM can quote. also used as step size for some spread logic increases.\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"max_spread\",\n            \"docs\": [\"the maximum spread the AMM can quote\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"long_spread\",\n            \"docs\": [\"the spread for asks vs the reserve price\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"short_spread\",\n            \"docs\": [\"the spread for bids vs the reserve price\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"long_intensity_count\",\n            \"docs\": [\"the count intensity of long fills against AMM\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"short_intensity_count\",\n            \"docs\": [\"the count intensity of short fills against AMM\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"max_fill_reserve_fraction\",\n            \"docs\": [\n              \"the fraction of total available liquidity a single fill on the AMM can consume\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_slippage_ratio\",\n            \"docs\": [\"the maximum slippage a single fill on the AMM can push\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"curve_update_intensity\",\n            \"docs\": [\n              \"the update intensity of AMM formulaic updates (adjusting k). 0-100\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"amm_jit_intensity\",\n            \"docs\": [\n              \"the jit intensity of AMM. larger intensity means larger participation in jit. 0 means no jit participation.\",\n              \"(0, 100] is intensity for protocol-owned AMM. (100, 200] is intensity for user LP-owned AMM.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"oracle_source\",\n            \"docs\": [\n              \"the oracle provider information. used to decode/scale the oracle public key\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSource\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_oracle_valid\",\n            \"docs\": [\n              \"tracks whether the oracle was considered valid at the last AMM update\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"target_base_asset_amount_per_lp\",\n            \"docs\": [\n              \"the target value for `base_asset_amount_per_lp`, used during AMM JIT with LP split\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"per_lp_base\",\n            \"docs\": [\n              \"expo for unit of per_lp, base 10 (if per_lp_base=X, then per_lp unit is 10^X)\"\n            ],\n            \"type\": \"i8\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"total_fee_earned_per_lp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"net_unsettled_funding_pnl\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_asset_amount_with_unsettled_lp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"reference_price_offset\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 12]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgOrderId\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"uuid\",\n            \"type\": {\n              \"array\": [\"u8\", 8]\n            }\n          },\n          {\n            \"name\": \"max_slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"order_id\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgUserOrdersFixed\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"len\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceFund\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"total_shares\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"user_shares\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"shares_base\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"unstaking_period\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_revenue_settle_ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"revenue_settle_period\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"total_factor\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_factor\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleGuardRails\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price_divergence\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PriceDivergenceGuardRails\"\n              }\n            }\n          },\n          {\n            \"name\": \"validity\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ValidityGuardRails\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PriceDivergenceGuardRails\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mark_oracle_percent_divergence\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oracle_twap5min_percent_divergence\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ValidityGuardRails\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"slots_before_stale_for_amm\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"slots_before_stale_for_margin\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"confidence_interval_max_size\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"too_volatile_ratio\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeStructure\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"fee_tiers\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"FeeTier\"\n                  }\n                },\n                10\n              ]\n            }\n          },\n          {\n            \"name\": \"filler_reward_structure\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderFillerRewardStructure\"\n              }\n            }\n          },\n          {\n            \"name\": \"referrer_reward_epoch_upper_bound\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"flat_filler_fee\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeTier\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"fee_numerator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fee_denominator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"maker_rebate_numerator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"maker_rebate_denominator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"referrer_reward_numerator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"referrer_reward_denominator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"referee_fee_numerator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"referee_fee_denominator\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderFillerRewardStructure\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"reward_numerator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"reward_denominator\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"time_based_reward_lower_bound\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserFees\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"total_fee_paid\",\n            \"docs\": [\"Total taker fee paid\", \"precision: QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_fee_rebate\",\n            \"docs\": [\"Total maker fee rebate\", \"precision: QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_token_discount\",\n            \"docs\": [\n              \"Total discount from holding token\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_referee_discount\",\n            \"docs\": [\n              \"Total discount from being referred\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_referrer_reward\",\n            \"docs\": [\"Total reward to referrer\", \"precision: QUOTE_PRECISION\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"current_epoch_referrer_reward\",\n            \"docs\": [\n              \"Total reward to referrer this epoch\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotPosition\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"scaled_balance\",\n            \"docs\": [\n              \"The scaled balance of the position. To get the token amount, multiply by the cumulative deposit/borrow\",\n              \"interest of corresponding market.\",\n              \"precision: SPOT_BALANCE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"open_bids\",\n            \"docs\": [\n              \"How many spot bids the user has open\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"open_asks\",\n            \"docs\": [\n              \"How many spot asks the user has open\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cumulative_deposits\",\n            \"docs\": [\n              \"The cumulative deposits/borrows a user has made into a market\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"docs\": [\"The market index of the corresponding spot market\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"balance_type\",\n            \"docs\": [\"Whether the position is deposit or borrow\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotBalanceType\"\n              }\n            }\n          },\n          {\n            \"name\": \"open_orders\",\n            \"docs\": [\"Number of open orders\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 4]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PerpPosition\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_cumulative_funding_rate\",\n            \"docs\": [\n              \"The perp market's last cumulative funding rate. Used to calculate the funding payment owed to user\",\n              \"precision: FUNDING_RATE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"docs\": [\n              \"the size of the users perp position\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_asset_amount\",\n            \"docs\": [\n              \"Used to calculate the users pnl. Upon entry, is equal to base_asset_amount * avg entry price - fees\",\n              \"Updated when the user open/closes position or settles pnl. Includes fees/funding\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_break_even_amount\",\n            \"docs\": [\n              \"The amount of quote the user would need to exit their position at to break even\",\n              \"Updated when the user open/closes position or settles pnl. Includes fees/funding\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_entry_amount\",\n            \"docs\": [\n              \"The amount quote the user entered the position with. Equal to base asset amount * avg entry price\",\n              \"Updated when the user open/closes position. Excludes fees/funding\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"open_bids\",\n            \"docs\": [\n              \"The amount of open bids the user has in this perp market\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"open_asks\",\n            \"docs\": [\n              \"The amount of open asks the user has in this perp market\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"settled_pnl\",\n            \"docs\": [\n              \"The amount of pnl settled in this market since opening the position\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"lp_shares\",\n            \"docs\": [\n              \"The number of lp (liquidity provider) shares the user has in this perp market\",\n              \"LP shares allow users to provide liquidity via the AMM\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_base_asset_amount_per_lp\",\n            \"docs\": [\n              \"The last base asset amount per lp the amm had\",\n              \"Used to settle the users lp position\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_quote_asset_amount_per_lp\",\n            \"docs\": [\n              \"The last quote asset amount per lp the amm had\",\n              \"Used to settle the users lp position\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"remainder_base_asset_amount\",\n            \"docs\": [\n              \"Settling LP position can lead to a small amount of base asset being left over smaller than step size\",\n              \"This records that remainder so it can be settled later on\",\n              \"precision: BASE_PRECISION\"\n            ],\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"docs\": [\"The market index for the perp market\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"open_orders\",\n            \"docs\": [\"The number of open orders\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"per_lp_base\",\n            \"type\": \"i8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Order\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"slot\",\n            \"docs\": [\"The slot the order was placed\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"price\",\n            \"docs\": [\n              \"The limit price for the order (can be 0 for market orders)\",\n              \"For orders with an auction, this price isn't used until the auction is complete\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"docs\": [\n              \"The size of the order\",\n              \"precision for perps: BASE_PRECISION\",\n              \"precision for spot: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_asset_amount_filled\",\n            \"docs\": [\n              \"The amount of the order filled\",\n              \"precision for perps: BASE_PRECISION\",\n              \"precision for spot: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"quote_asset_amount_filled\",\n            \"docs\": [\n              \"The amount of quote filled for the order\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"trigger_price\",\n            \"docs\": [\n              \"At what price the order will be triggered. Only relevant for trigger orders\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"auction_start_price\",\n            \"docs\": [\n              \"The start price for the auction. Only relevant for market/oracle orders\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"auction_end_price\",\n            \"docs\": [\n              \"The end price for the auction. Only relevant for market/oracle orders\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"max_ts\",\n            \"docs\": [\"The time when the order will expire\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"oracle_price_offset\",\n            \"docs\": [\n              \"If set, the order limit price is the oracle price + this offset\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"order_id\",\n            \"docs\": [\n              \"The id for the order. Each users has their own order id space\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"docs\": [\"The perp/spot market index\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"status\",\n            \"docs\": [\"Whether the order is open or unused\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"order_type\",\n            \"docs\": [\"The type of order\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderType\"\n              }\n            }\n          },\n          {\n            \"name\": \"market_type\",\n            \"docs\": [\"Whether market is spot or perp\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketType\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_order_id\",\n            \"docs\": [\n              \"User generated order id. Can make it easier to place/cancel orders\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"existing_position_direction\",\n            \"docs\": [\"What the users position was when the order was placed\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PositionDirection\"\n              }\n            }\n          },\n          {\n            \"name\": \"direction\",\n            \"docs\": [\n              \"Whether the user is going long or short. LONG = bid, SHORT = ask\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PositionDirection\"\n              }\n            }\n          },\n          {\n            \"name\": \"reduce_only\",\n            \"docs\": [\n              \"Whether the order is allowed to only reduce position size\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"post_only\",\n            \"docs\": [\"Whether the order must be a maker\"],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"immediate_or_cancel\",\n            \"docs\": [\n              \"Whether the order must be canceled the same slot it is placed\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"trigger_condition\",\n            \"docs\": [\n              \"Whether the order is triggered above or below the trigger price. Only relevant for trigger orders\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderTriggerCondition\"\n              }\n            }\n          },\n          {\n            \"name\": \"auction_duration\",\n            \"docs\": [\"How many slots the auction lasts\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"posted_slot_tail\",\n            \"docs\": [\n              \"Last 8 bits of the slot the order was posted on-chain (not order slot for signed msg orders)\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"bit_flags\",\n            \"docs\": [\n              \"Bitflags for further classification\",\n              \"0: is_signed_message\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 1]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SwapDirection\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Add\"\n          },\n          {\n            \"name\": \"Remove\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ModifyOrderId\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UserOrderId\",\n            \"fields\": [\"u8\"]\n          },\n          {\n            \"name\": \"OrderId\",\n            \"fields\": [\"u32\"]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PositionDirection\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Long\"\n          },\n          {\n            \"name\": \"Short\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotFulfillmentType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"SerumV3\"\n          },\n          {\n            \"name\": \"Match\"\n          },\n          {\n            \"name\": \"PhoenixV1\"\n          },\n          {\n            \"name\": \"OpenbookV2\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SwapReduceOnly\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"In\"\n          },\n          {\n            \"name\": \"Out\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"TwapPeriod\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"FundingPeriod\"\n          },\n          {\n            \"name\": \"FiveMin\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationMultiplierType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Discount\"\n          },\n          {\n            \"name\": \"Premium\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginRequirementType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Initial\"\n          },\n          {\n            \"name\": \"Fill\"\n          },\n          {\n            \"name\": \"Maintenance\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleValidity\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"NonPositive\"\n          },\n          {\n            \"name\": \"TooVolatile\"\n          },\n          {\n            \"name\": \"TooUncertain\"\n          },\n          {\n            \"name\": \"StaleForMargin\"\n          },\n          {\n            \"name\": \"InsufficientDataPoints\"\n          },\n          {\n            \"name\": \"StaleForAMM\"\n          },\n          {\n            \"name\": \"Valid\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DriftAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UpdateFunding\"\n          },\n          {\n            \"name\": \"SettlePnl\"\n          },\n          {\n            \"name\": \"TriggerOrder\"\n          },\n          {\n            \"name\": \"FillOrderMatch\"\n          },\n          {\n            \"name\": \"FillOrderAmm\"\n          },\n          {\n            \"name\": \"Liquidate\"\n          },\n          {\n            \"name\": \"MarginCalc\"\n          },\n          {\n            \"name\": \"UpdateTwap\"\n          },\n          {\n            \"name\": \"UpdateAMMCurve\"\n          },\n          {\n            \"name\": \"OracleOrderPrice\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PositionUpdateType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Open\"\n          },\n          {\n            \"name\": \"Increase\"\n          },\n          {\n            \"name\": \"Reduce\"\n          },\n          {\n            \"name\": \"Close\"\n          },\n          {\n            \"name\": \"Flip\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositExplanation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"None\"\n          },\n          {\n            \"name\": \"Transfer\"\n          },\n          {\n            \"name\": \"Borrow\"\n          },\n          {\n            \"name\": \"RepayBorrow\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositDirection\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Deposit\"\n          },\n          {\n            \"name\": \"Withdraw\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Place\"\n          },\n          {\n            \"name\": \"Cancel\"\n          },\n          {\n            \"name\": \"Fill\"\n          },\n          {\n            \"name\": \"Trigger\"\n          },\n          {\n            \"name\": \"Expire\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderActionExplanation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"None\"\n          },\n          {\n            \"name\": \"InsufficientFreeCollateral\"\n          },\n          {\n            \"name\": \"OraclePriceBreachedLimitPrice\"\n          },\n          {\n            \"name\": \"MarketOrderFilledToLimitPrice\"\n          },\n          {\n            \"name\": \"OrderExpired\"\n          },\n          {\n            \"name\": \"Liquidation\"\n          },\n          {\n            \"name\": \"OrderFilledWithAMM\"\n          },\n          {\n            \"name\": \"OrderFilledWithAMMJit\"\n          },\n          {\n            \"name\": \"OrderFilledWithMatch\"\n          },\n          {\n            \"name\": \"OrderFilledWithMatchJit\"\n          },\n          {\n            \"name\": \"MarketExpired\"\n          },\n          {\n            \"name\": \"RiskingIncreasingOrder\"\n          },\n          {\n            \"name\": \"ReduceOnlyOrderIncreasedPosition\"\n          },\n          {\n            \"name\": \"OrderFillWithSerum\"\n          },\n          {\n            \"name\": \"NoBorrowLiquidity\"\n          },\n          {\n            \"name\": \"OrderFillWithPhoenix\"\n          },\n          {\n            \"name\": \"OrderFilledWithAMMJitLPSplit\"\n          },\n          {\n            \"name\": \"OrderFilledWithLPJit\"\n          },\n          {\n            \"name\": \"DeriskLp\"\n          },\n          {\n            \"name\": \"OrderFilledWithOpenbookV2\"\n          },\n          {\n            \"name\": \"TransferPerpPosition\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LPAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"AddLiquidity\"\n          },\n          {\n            \"name\": \"RemoveLiquidity\"\n          },\n          {\n            \"name\": \"SettleLiquidity\"\n          },\n          {\n            \"name\": \"RemoveLiquidityDerisk\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"LiquidatePerp\"\n          },\n          {\n            \"name\": \"LiquidateSpot\"\n          },\n          {\n            \"name\": \"LiquidateBorrowForPerpPnl\"\n          },\n          {\n            \"name\": \"LiquidatePerpPnlForDeposit\"\n          },\n          {\n            \"name\": \"PerpBankruptcy\"\n          },\n          {\n            \"name\": \"SpotBankruptcy\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SettlePnlExplanation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"None\"\n          },\n          {\n            \"name\": \"ExpiredPosition\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StakeAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Stake\"\n          },\n          {\n            \"name\": \"UnstakeRequest\"\n          },\n          {\n            \"name\": \"UnstakeCancelRequest\"\n          },\n          {\n            \"name\": \"Unstake\"\n          },\n          {\n            \"name\": \"UnstakeTransfer\"\n          },\n          {\n            \"name\": \"StakeTransfer\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FillMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Fill\"\n          },\n          {\n            \"name\": \"PlaceAndMake\"\n          },\n          {\n            \"name\": \"PlaceAndTake\",\n            \"fields\": [\"bool\", \"u8\"]\n          },\n          {\n            \"name\": \"Liquidation\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PerpFulfillmentMethod\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"AMM\",\n            \"fields\": [\n              {\n                \"option\": \"u64\"\n              }\n            ]\n          },\n          {\n            \"name\": \"Match\",\n            \"fields\": [\"pubkey\", \"u16\", \"u64\"]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotFulfillmentMethod\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"ExternalMarket\"\n          },\n          {\n            \"name\": \"Match\",\n            \"fields\": [\"pubkey\", \"u16\"]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginCalculationMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Standard\",\n            \"fields\": [\n              {\n                \"name\": \"track_open_orders_fraction\",\n                \"type\": \"bool\"\n              }\n            ]\n          },\n          {\n            \"name\": \"Liquidation\",\n            \"fields\": [\n              {\n                \"name\": \"market_to_track_margin_requirement\",\n                \"type\": {\n                  \"option\": {\n                    \"defined\": {\n                      \"name\": \"MarketIdentifier\"\n                    }\n                  }\n                }\n              }\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OracleSource\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Pyth\"\n          },\n          {\n            \"name\": \"Switchboard\"\n          },\n          {\n            \"name\": \"QuoteAsset\"\n          },\n          {\n            \"name\": \"Pyth1K\"\n          },\n          {\n            \"name\": \"Pyth1M\"\n          },\n          {\n            \"name\": \"PythStableCoin\"\n          },\n          {\n            \"name\": \"Prelaunch\"\n          },\n          {\n            \"name\": \"PythPull\"\n          },\n          {\n            \"name\": \"Pyth1KPull\"\n          },\n          {\n            \"name\": \"Pyth1MPull\"\n          },\n          {\n            \"name\": \"PythStableCoinPull\"\n          },\n          {\n            \"name\": \"SwitchboardOnDemand\"\n          },\n          {\n            \"name\": \"PythLazer\"\n          },\n          {\n            \"name\": \"PythLazer1K\"\n          },\n          {\n            \"name\": \"PythLazer1M\"\n          },\n          {\n            \"name\": \"PythLazerStableCoin\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PostOnlyParam\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"None\"\n          },\n          {\n            \"name\": \"MustPostOnly\"\n          },\n          {\n            \"name\": \"TryPostOnly\"\n          },\n          {\n            \"name\": \"Slide\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ModifyOrderPolicy\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"MustModify\"\n          },\n          {\n            \"name\": \"ExcludePreviousFill\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PlaceAndTakeOrderSuccessCondition\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"PartialFill\"\n          },\n          {\n            \"name\": \"FullFill\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PerpOperation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UpdateFunding\"\n          },\n          {\n            \"name\": \"AmmFill\"\n          },\n          {\n            \"name\": \"Fill\"\n          },\n          {\n            \"name\": \"SettlePnl\"\n          },\n          {\n            \"name\": \"SettlePnlWithPosition\"\n          },\n          {\n            \"name\": \"Liquidation\"\n          },\n          {\n            \"name\": \"AmmImmediateFill\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotOperation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UpdateCumulativeInterest\"\n          },\n          {\n            \"name\": \"Fill\"\n          },\n          {\n            \"name\": \"Deposit\"\n          },\n          {\n            \"name\": \"Withdraw\"\n          },\n          {\n            \"name\": \"Liquidation\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceFundOperation\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Init\"\n          },\n          {\n            \"name\": \"Add\"\n          },\n          {\n            \"name\": \"RequestRemove\"\n          },\n          {\n            \"name\": \"Remove\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Initialized\"\n          },\n          {\n            \"name\": \"Active\"\n          },\n          {\n            \"name\": \"FundingPaused\"\n          },\n          {\n            \"name\": \"AmmPaused\"\n          },\n          {\n            \"name\": \"FillPaused\"\n          },\n          {\n            \"name\": \"WithdrawPaused\"\n          },\n          {\n            \"name\": \"ReduceOnly\"\n          },\n          {\n            \"name\": \"Settlement\"\n          },\n          {\n            \"name\": \"Delisted\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ContractType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Perpetual\"\n          },\n          {\n            \"name\": \"Future\"\n          },\n          {\n            \"name\": \"Prediction\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ContractTier\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"A\"\n          },\n          {\n            \"name\": \"B\"\n          },\n          {\n            \"name\": \"C\"\n          },\n          {\n            \"name\": \"Speculative\"\n          },\n          {\n            \"name\": \"HighlySpeculative\"\n          },\n          {\n            \"name\": \"Isolated\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AMMLiquiditySplit\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"ProtocolOwned\"\n          },\n          {\n            \"name\": \"LPOwned\"\n          },\n          {\n            \"name\": \"Shared\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AMMAvailability\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Immediate\"\n          },\n          {\n            \"name\": \"AfterMinDuration\"\n          },\n          {\n            \"name\": \"Unavailable\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SettlePnlMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"MustSettle\"\n          },\n          {\n            \"name\": \"TrySettle\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotBalanceType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Deposit\"\n          },\n          {\n            \"name\": \"Borrow\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotFulfillmentConfigStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Enabled\"\n          },\n          {\n            \"name\": \"Disabled\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AssetTier\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Collateral\"\n          },\n          {\n            \"name\": \"Protected\"\n          },\n          {\n            \"name\": \"Cross\"\n          },\n          {\n            \"name\": \"Isolated\"\n          },\n          {\n            \"name\": \"Unlisted\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ExchangeStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"DepositPaused\"\n          },\n          {\n            \"name\": \"WithdrawPaused\"\n          },\n          {\n            \"name\": \"AmmPaused\"\n          },\n          {\n            \"name\": \"FillPaused\"\n          },\n          {\n            \"name\": \"LiqPaused\"\n          },\n          {\n            \"name\": \"FundingPaused\"\n          },\n          {\n            \"name\": \"SettlePnlPaused\"\n          },\n          {\n            \"name\": \"AmmImmediateFillPaused\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"BeingLiquidated\"\n          },\n          {\n            \"name\": \"Bankrupt\"\n          },\n          {\n            \"name\": \"ReduceOnly\"\n          },\n          {\n            \"name\": \"AdvancedLp\"\n          },\n          {\n            \"name\": \"ProtectedMakerOrders\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AssetType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Base\"\n          },\n          {\n            \"name\": \"Quote\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Init\"\n          },\n          {\n            \"name\": \"Open\"\n          },\n          {\n            \"name\": \"Filled\"\n          },\n          {\n            \"name\": \"Canceled\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Market\"\n          },\n          {\n            \"name\": \"Limit\"\n          },\n          {\n            \"name\": \"TriggerMarket\"\n          },\n          {\n            \"name\": \"TriggerLimit\"\n          },\n          {\n            \"name\": \"Oracle\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderTriggerCondition\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Above\"\n          },\n          {\n            \"name\": \"Below\"\n          },\n          {\n            \"name\": \"TriggeredAbove\"\n          },\n          {\n            \"name\": \"TriggeredBelow\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketType\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Spot\"\n          },\n          {\n            \"name\": \"Perp\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReferrerStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"IsReferrer\"\n          },\n          {\n            \"name\": \"IsReferred\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarginMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Default\"\n          },\n          {\n            \"name\": \"HighLeverage\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FuelOverflowStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Exists\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignatureVerificationError\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"InvalidEd25519InstructionProgramId\"\n          },\n          {\n            \"name\": \"InvalidEd25519InstructionDataLength\"\n          },\n          {\n            \"name\": \"InvalidSignatureIndex\"\n          },\n          {\n            \"name\": \"InvalidSignatureOffset\"\n          },\n          {\n            \"name\": \"InvalidPublicKeyOffset\"\n          },\n          {\n            \"name\": \"InvalidMessageOffset\"\n          },\n          {\n            \"name\": \"InvalidMessageDataSize\"\n          },\n          {\n            \"name\": \"InvalidInstructionIndex\"\n          },\n          {\n            \"name\": \"MessageOffsetOverflow\"\n          },\n          {\n            \"name\": \"InvalidMessageHex\"\n          },\n          {\n            \"name\": \"InvalidMessageData\"\n          },\n          {\n            \"name\": \"LoadInstructionAtFailed\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OpenbookV2FulfillmentConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_program_id\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_market_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_event_heap\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_bids\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_asks\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_base_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"openbook_v2_quote_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"fulfillment_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          },\n          {\n            \"name\": \"status\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentConfigStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 4]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PhoenixV1FulfillmentConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"phoenix_program_id\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"phoenix_log_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"phoenix_market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"phoenix_base_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"phoenix_quote_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"fulfillment_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          },\n          {\n            \"name\": \"status\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentConfigStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 4]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SerumV3FulfillmentConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_program_id\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_request_queue\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_event_queue\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_bids\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_asks\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_base_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_quote_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_open_orders\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"serum_signer_nonce\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"fulfillment_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentType\"\n              }\n            }\n          },\n          {\n            \"name\": \"status\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotFulfillmentConfigStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 4]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"HighLeverageModeConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"max_users\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"current_users\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"reduce_only\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 31]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceFundStake\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"if_shares\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"last_withdraw_request_shares\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"if_base\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"last_valid_ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_withdraw_request_value\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_withdraw_request_ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cost_basis\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 14]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ProtocolIfSharesTransferConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"whitelisted_signers\",\n            \"type\": {\n              \"array\": [\"pubkey\", 4]\n            }\n          },\n          {\n            \"name\": \"max_transfer_per_epoch\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"current_epoch_transfer\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"next_epoch_ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u128\", 8]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PrelaunchOracle\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"max_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"confidence\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amm_last_update_slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"perp_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 70]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PerpMarket\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"docs\": [\n              \"The perp market's address. It is a pda of the market index\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amm\",\n            \"docs\": [\"The automated market maker\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AMM\"\n              }\n            }\n          },\n          {\n            \"name\": \"pnl_pool\",\n            \"docs\": [\n              \"The market's pnl pool. When users settle negative pnl, the balance increases.\",\n              \"When users settle positive pnl, the balance decreases. Can not go negative.\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PoolBalance\"\n              }\n            }\n          },\n          {\n            \"name\": \"name\",\n            \"docs\": [\"Encoded display name for the perp market e.g. SOL-PERP\"],\n            \"type\": {\n              \"array\": [\"u8\", 32]\n            }\n          },\n          {\n            \"name\": \"insurance_claim\",\n            \"docs\": [\"The perp market's claim on the insurance fund\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"InsuranceClaim\"\n              }\n            }\n          },\n          {\n            \"name\": \"unrealized_pnl_max_imbalance\",\n            \"docs\": [\n              \"The max pnl imbalance before positive pnl asset weight is discounted\",\n              \"pnl imbalance is the difference between long and short pnl. When it's greater than 0,\",\n              \"the amm has negative pnl and the initial asset weight for positive pnl is discounted\",\n              \"precision = QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"expiry_ts\",\n            \"docs\": [\n              \"The ts when the market will be expired. Only set if market is in reduce only mode\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"expiry_price\",\n            \"docs\": [\n              \"The price at which positions will be settled. Only set if market is expired\",\n              \"precision = PRICE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"next_fill_record_id\",\n            \"docs\": [\n              \"Every trade has a fill record id. This is the next id to be used\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_funding_rate_record_id\",\n            \"docs\": [\n              \"Every funding rate update has a record id. This is the next id to be used\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_curve_record_id\",\n            \"docs\": [\n              \"Every amm k updated has a record id. This is the next id to be used\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"imf_factor\",\n            \"docs\": [\n              \"The initial margin fraction factor. Used to increase margin ratio for large positions\",\n              \"precision: MARGIN_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"unrealized_pnl_imf_factor\",\n            \"docs\": [\n              \"The imf factor for unrealized pnl. Used to discount asset weight for large positive pnl\",\n              \"precision: MARGIN_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"liquidator_fee\",\n            \"docs\": [\n              \"The fee the liquidator is paid for taking over perp position\",\n              \"precision: LIQUIDATOR_FEE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"if_liquidation_fee\",\n            \"docs\": [\n              \"The fee the insurance fund receives from liquidation\",\n              \"precision: LIQUIDATOR_FEE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"margin_ratio_initial\",\n            \"docs\": [\n              \"The margin ratio which determines how much collateral is required to open a position\",\n              \"e.g. margin ratio of .1 means a user must have $100 of total collateral to open a $1000 position\",\n              \"precision: MARGIN_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"margin_ratio_maintenance\",\n            \"docs\": [\n              \"The margin ratio which determines when a user will be liquidated\",\n              \"e.g. margin ratio of .05 means a user must have $50 of total collateral to maintain a $1000 position\",\n              \"else they will be liquidated\",\n              \"precision: MARGIN_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"unrealized_pnl_initial_asset_weight\",\n            \"docs\": [\n              \"The initial asset weight for positive pnl. Negative pnl always has an asset weight of 1\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"unrealized_pnl_maintenance_asset_weight\",\n            \"docs\": [\n              \"The maintenance asset weight for positive pnl. Negative pnl always has an asset weight of 1\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"number_of_users_with_base\",\n            \"docs\": [\"number of users in a position (base)\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"number_of_users\",\n            \"docs\": [\"number of users in a position (pnl) or pnl (quote)\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"status\",\n            \"docs\": [\n              \"Whether a market is active, reduce only, expired, etc\",\n              \"Affects whether users can open/close positions\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"contract_type\",\n            \"docs\": [\"Currently only Perpetual markets are supported\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ContractType\"\n              }\n            }\n          },\n          {\n            \"name\": \"contract_tier\",\n            \"docs\": [\n              \"The contract tier determines how much insurance a market can receive, with more speculative markets receiving less insurance\",\n              \"It also influences the order perp markets can be liquidated, with less speculative markets being liquidated first\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ContractTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"paused_operations\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"quote_spot_market_index\",\n            \"docs\": [\"The spot market that pnl is settled in\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"fee_adjustment\",\n            \"docs\": [\n              \"Between -100 and 100, represents what % to increase/decrease the fee by\",\n              \"E.g. if this is -50 and the fee is 5bps, the new fee will be 2.5bps\",\n              \"if this is 50 and the fee is 5bps, the new fee will be 7.5bps\"\n            ],\n            \"type\": \"i16\"\n          },\n          {\n            \"name\": \"fuel_boost_position\",\n            \"docs\": [\"fuel multiplier for perp funding\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_taker\",\n            \"docs\": [\"fuel multiplier for perp taker\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_maker\",\n            \"docs\": [\"fuel multiplier for perp maker\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"pool_id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"high_leverage_margin_ratio_initial\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"high_leverage_margin_ratio_maintenance\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 38]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ProtectedMakerModeConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"max_users\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"current_users\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"reduce_only\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 31]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PythLazerOracle\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"publish_time\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"posted_slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"exponent\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 4]\n            }\n          },\n          {\n            \"name\": \"conf\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgUserOrders\",\n      \"docs\": [\n        \"* This struct is a duplicate of SignedMsgUserOrdersZeroCopy\\n * It is used to give anchor an struct to generate the idl for clients\\n * The struct SignedMsgUserOrdersZeroCopy is used to load the data in efficiently\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority_pubkey\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"signed_msg_order_data\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"SignedMsgOrderId\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgWsDelegates\",\n      \"docs\": [\n        \"* Used to store authenticated delegates for swift-like ws connections\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"delegates\",\n            \"type\": {\n              \"vec\": \"pubkey\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotMarket\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"pubkey\",\n            \"docs\": [\n              \"The address of the spot market. It is a pda of the market index\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"oracle\",\n            \"docs\": [\"The oracle used to price the markets deposits/borrows\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"docs\": [\"The token mint of the market\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"docs\": [\n              \"The vault used to store the market's deposits\",\n              \"The amount in the vault should be equal to or greater than deposits - borrows\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"name\",\n            \"docs\": [\"The encoded display name for the market e.g. SOL\"],\n            \"type\": {\n              \"array\": [\"u8\", 32]\n            }\n          },\n          {\n            \"name\": \"historical_oracle_data\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"HistoricalOracleData\"\n              }\n            }\n          },\n          {\n            \"name\": \"historical_index_data\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"HistoricalIndexData\"\n              }\n            }\n          },\n          {\n            \"name\": \"revenue_pool\",\n            \"docs\": [\n              \"Revenue the protocol has collected in this markets token\",\n              \"e.g. for SOL-PERP, funds can be settled in usdc and will flow into the USDC revenue pool\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PoolBalance\"\n              }\n            }\n          },\n          {\n            \"name\": \"spot_fee_pool\",\n            \"docs\": [\n              \"The fees collected from swaps between this market and the quote market\",\n              \"Is settled to the quote markets revenue pool\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PoolBalance\"\n              }\n            }\n          },\n          {\n            \"name\": \"insurance_fund\",\n            \"docs\": [\n              \"Details on the insurance fund covering bankruptcies in this markets token\",\n              \"Covers bankruptcies for borrows with this markets token and perps settling in this markets token\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"InsuranceFund\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_spot_fee\",\n            \"docs\": [\n              \"The total spot fees collected for this market\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"deposit_balance\",\n            \"docs\": [\n              \"The sum of the scaled balances for deposits across users and pool balances\",\n              \"To convert to the deposit token amount, multiply by the cumulative deposit interest\",\n              \"precision: SPOT_BALANCE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrow_balance\",\n            \"docs\": [\n              \"The sum of the scaled balances for borrows across users and pool balances\",\n              \"To convert to the borrow token amount, multiply by the cumulative borrow interest\",\n              \"precision: SPOT_BALANCE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_deposit_interest\",\n            \"docs\": [\n              \"The cumulative interest earned by depositors\",\n              \"Used to calculate the deposit token amount from the deposit balance\",\n              \"precision: SPOT_CUMULATIVE_INTEREST_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_borrow_interest\",\n            \"docs\": [\n              \"The cumulative interest earned by borrowers\",\n              \"Used to calculate the borrow token amount from the borrow balance\",\n              \"precision: SPOT_CUMULATIVE_INTEREST_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_social_loss\",\n            \"docs\": [\n              \"The total socialized loss from borrows, in the mint's token\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_quote_social_loss\",\n            \"docs\": [\n              \"The total socialized loss from borrows, in the quote market's token\",\n              \"preicision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"withdraw_guard_threshold\",\n            \"docs\": [\n              \"no withdraw limits/guards when deposits below this threshold\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_token_deposits\",\n            \"docs\": [\n              \"The max amount of token deposits in this market\",\n              \"0 if there is no limit\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposit_token_twap\",\n            \"docs\": [\n              \"24hr average of deposit token amount\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_token_twap\",\n            \"docs\": [\n              \"24hr average of borrow token amount\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"utilization_twap\",\n            \"docs\": [\n              \"24hr average of utilization\",\n              \"which is borrow amount over token amount\",\n              \"precision: SPOT_UTILIZATION_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_interest_ts\",\n            \"docs\": [\n              \"Last time the cumulative deposit and borrow interest was updated\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_twap_ts\",\n            \"docs\": [\n              \"Last time the deposit/borrow/utilization averages were updated\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"expiry_ts\",\n            \"docs\": [\n              \"The time the market is set to expire. Only set if market is in reduce only mode\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"order_step_size\",\n            \"docs\": [\n              \"Spot orders must be a multiple of the step size\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"order_tick_size\",\n            \"docs\": [\n              \"Spot orders must be a multiple of the tick size\",\n              \"precision: PRICE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_order_size\",\n            \"docs\": [\n              \"The minimum order size\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_position_size\",\n            \"docs\": [\n              \"The maximum spot position size\",\n              \"if the limit is 0, there is no limit\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_fill_record_id\",\n            \"docs\": [\n              \"Every spot trade has a fill record id. This is the next id to use\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_deposit_record_id\",\n            \"docs\": [\n              \"Every deposit has a deposit record id. This is the next id to use\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"initial_asset_weight\",\n            \"docs\": [\n              \"The initial asset weight used to calculate a deposits contribution to a users initial total collateral\",\n              \"e.g. if the asset weight is .8, $100 of deposits contributes $80 to the users initial total collateral\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"maintenance_asset_weight\",\n            \"docs\": [\n              \"The maintenance asset weight used to calculate a deposits contribution to a users maintenance total collateral\",\n              \"e.g. if the asset weight is .9, $100 of deposits contributes $90 to the users maintenance total collateral\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"initial_liability_weight\",\n            \"docs\": [\n              \"The initial liability weight used to calculate a borrows contribution to a users initial margin requirement\",\n              \"e.g. if the liability weight is .9, $100 of borrows contributes $90 to the users initial margin requirement\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"maintenance_liability_weight\",\n            \"docs\": [\n              \"The maintenance liability weight used to calculate a borrows contribution to a users maintenance margin requirement\",\n              \"e.g. if the liability weight is .8, $100 of borrows contributes $80 to the users maintenance margin requirement\",\n              \"precision: SPOT_WEIGHT_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"imf_factor\",\n            \"docs\": [\n              \"The initial margin fraction factor. Used to increase liability weight/decrease asset weight for large positions\",\n              \"precision: MARGIN_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"liquidator_fee\",\n            \"docs\": [\n              \"The fee the liquidator is paid for taking over borrow/deposit\",\n              \"precision: LIQUIDATOR_FEE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"if_liquidation_fee\",\n            \"docs\": [\n              \"The fee the insurance fund receives from liquidation\",\n              \"precision: LIQUIDATOR_FEE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"optimal_utilization\",\n            \"docs\": [\n              \"The optimal utilization rate for this market.\",\n              \"Used to determine the markets borrow rate\",\n              \"precision: SPOT_UTILIZATION_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"optimal_borrow_rate\",\n            \"docs\": [\n              \"The borrow rate for this market when the market has optimal utilization\",\n              \"precision: SPOT_RATE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"max_borrow_rate\",\n            \"docs\": [\n              \"The borrow rate for this market when the market has 1000 utilization\",\n              \"precision: SPOT_RATE_PRECISION\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"decimals\",\n            \"docs\": [\n              \"The market's token mint's decimals. To from decimals to a precision, 10^decimals\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"orders_enabled\",\n            \"docs\": [\"Whether or not spot trading is enabled\"],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"oracle_source\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleSource\"\n              }\n            }\n          },\n          {\n            \"name\": \"status\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketStatus\"\n              }\n            }\n          },\n          {\n            \"name\": \"asset_tier\",\n            \"docs\": [\n              \"The asset tier affects how a deposit can be used as collateral and the priority for a borrow being liquidated\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"AssetTier\"\n              }\n            }\n          },\n          {\n            \"name\": \"paused_operations\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"if_paused_operations\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fee_adjustment\",\n            \"type\": \"i16\"\n          },\n          {\n            \"name\": \"max_token_borrows_fraction\",\n            \"docs\": [\n              \"What fraction of max_token_deposits\",\n              \"disabled when 0, 1 => 1/10000 => .01% of max_token_deposits\",\n              \"precision: X/10000\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"flash_loan_amount\",\n            \"docs\": [\n              \"For swaps, the amount of token loaned out in the begin_swap ix\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"flash_loan_initial_token_amount\",\n            \"docs\": [\n              \"For swaps, the amount in the users token account in the begin_swap ix\",\n              \"Used to calculate how much of the token left the system in end_swap ix\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_swap_fee\",\n            \"docs\": [\n              \"The total fees received from swaps\",\n              \"precision: token mint precision\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"scale_initial_asset_weight_start\",\n            \"docs\": [\n              \"When to begin scaling down the initial asset weight\",\n              \"disabled when 0\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_borrow_rate\",\n            \"docs\": [\n              \"The min borrow rate for this market when the market regardless of utilization\",\n              \"1 => 1/200 => .5%\",\n              \"precision: X/200\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_deposits\",\n            \"docs\": [\"fuel multiplier for spot deposits\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_borrows\",\n            \"docs\": [\"fuel multiplier for spot borrows\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_taker\",\n            \"docs\": [\"fuel multiplier for spot taker\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_maker\",\n            \"docs\": [\"fuel multiplier for spot maker\", \"precision: 10\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_boost_insurance\",\n            \"docs\": [\n              \"fuel multiplier for spot insurance stake\",\n              \"precision: 10\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"token_program\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"pool_id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 40]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"State\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"whitelist_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"discount_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"signer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"srm_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"perp_fee_structure\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"FeeStructure\"\n              }\n            }\n          },\n          {\n            \"name\": \"spot_fee_structure\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"FeeStructure\"\n              }\n            }\n          },\n          {\n            \"name\": \"oracle_guard_rails\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OracleGuardRails\"\n              }\n            }\n          },\n          {\n            \"name\": \"number_of_authorities\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"number_of_sub_accounts\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_cooldown_time\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"liquidation_margin_buffer_ratio\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"settlement_duration\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"number_of_markets\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"number_of_spot_markets\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"signer_nonce\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"min_perp_auction_duration\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"default_market_order_time_in_force\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"default_spot_auction_duration\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"exchange_status\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidation_duration\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"initial_pct_to_liquidate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_number_of_sub_accounts\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_initialize_user_fee\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 10]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"User\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"docs\": [\"The owner/authority of the account\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"delegate\",\n            \"docs\": [\n              \"An addresses that can control the account on the authority's behalf. Has limited power, cant withdraw\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"name\",\n            \"docs\": [\"Encoded display name e.g. \\\"toly\\\"\"],\n            \"type\": {\n              \"array\": [\"u8\", 32]\n            }\n          },\n          {\n            \"name\": \"spot_positions\",\n            \"docs\": [\"The user's spot positions\"],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"SpotPosition\"\n                  }\n                },\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"perp_positions\",\n            \"docs\": [\"The user's perp positions\"],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"PerpPosition\"\n                  }\n                },\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"orders\",\n            \"docs\": [\"The user's orders\"],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"Order\"\n                  }\n                },\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"last_add_perp_lp_shares_ts\",\n            \"docs\": [\"The last time the user added perp lp positions\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"total_deposits\",\n            \"docs\": [\n              \"The total values of deposits the user has made\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_withdraws\",\n            \"docs\": [\n              \"The total values of withdrawals the user has made\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_social_loss\",\n            \"docs\": [\n              \"The total socialized loss the users has incurred upon the protocol\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"settled_perp_pnl\",\n            \"docs\": [\n              \"Fees (taker fees, maker rebate, referrer reward, filler reward) and pnl for perps\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cumulative_spot_fees\",\n            \"docs\": [\n              \"Fees (taker fees, maker rebate, filler reward) for spot\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"cumulative_perp_funding\",\n            \"docs\": [\n              \"Cumulative funding paid/received for perps\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"liquidation_margin_freed\",\n            \"docs\": [\n              \"The amount of margin freed during liquidation. Used to force the liquidation to occur over a period of time\",\n              \"Defaults to zero when not being liquidated\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_active_slot\",\n            \"docs\": [\n              \"The last slot a user was active. Used to determine if a user is idle\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_order_id\",\n            \"docs\": [\n              \"Every user order has an order id. This is the next order id to be used\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"max_margin_ratio\",\n            \"docs\": [\"Custom max initial margin ratio for the user\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"next_liquidation_id\",\n            \"docs\": [\"The next liquidation id to be used for user\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"sub_account_id\",\n            \"docs\": [\"The sub account id for this user\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"status\",\n            \"docs\": [\n              \"Whether the user is active, being liquidated or bankrupt\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"is_margin_trading_enabled\",\n            \"docs\": [\"Whether the user has enabled margin trading\"],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"idle\",\n            \"docs\": [\n              \"User is idle if they haven't interacted with the protocol in 1 week and they have no orders, perp positions or borrows\",\n              \"Off-chain keeper bots can ignore users that are idle\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"open_orders\",\n            \"docs\": [\"number of open orders\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_open_order\",\n            \"docs\": [\"Whether or not user has open order\"],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"open_auctions\",\n            \"docs\": [\"number of open orders with auction\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_open_auction\",\n            \"docs\": [\"Whether or not user has open order with auction\"],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"margin_mode\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarginMode\"\n              }\n            }\n          },\n          {\n            \"name\": \"pool_id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\"u8\", 3]\n            }\n          },\n          {\n            \"name\": \"last_fuel_bonus_update_ts\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 12]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserStats\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"docs\": [\"The authority for all of a users sub accounts\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"referrer\",\n            \"docs\": [\"The address that referred this user\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fees\",\n            \"docs\": [\"Stats on the fees paid by the user\"],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"UserFees\"\n              }\n            }\n          },\n          {\n            \"name\": \"next_epoch_ts\",\n            \"docs\": [\n              \"The timestamp of the next epoch\",\n              \"Epoch is used to limit referrer rewards earned in single epoch\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"maker_volume30d\",\n            \"docs\": [\n              \"Rolling 30day maker volume for user\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"taker_volume30d\",\n            \"docs\": [\n              \"Rolling 30day taker volume for user\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"filler_volume30d\",\n            \"docs\": [\n              \"Rolling 30day filler volume for user\",\n              \"precision: QUOTE_PRECISION\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_maker_volume30d_ts\",\n            \"docs\": [\"last time the maker volume was updated\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_taker_volume30d_ts\",\n            \"docs\": [\"last time the taker volume was updated\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_filler_volume30d_ts\",\n            \"docs\": [\"last time the filler volume was updated\"],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"if_staked_quote_asset_amount\",\n            \"docs\": [\n              \"The amount of tokens staked in the quote spot markets if\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"number_of_sub_accounts\",\n            \"docs\": [\"The current number of sub accounts\"],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"number_of_sub_accounts_created\",\n            \"docs\": [\n              \"The number of sub accounts created. Can be greater than the number of sub accounts if user\",\n              \"has deleted sub accounts\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"referrer_status\",\n            \"docs\": [\n              \"Flags for referrer status:\",\n              \"First bit (LSB): 1 if user is a referrer, 0 otherwise\",\n              \"Second bit: 1 if user was referred, 0 otherwise\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"disable_update_perp_bid_ask_twap\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\"u8\", 1]\n            }\n          },\n          {\n            \"name\": \"fuel_overflow_status\",\n            \"docs\": [\"whether the user has a FuelOverflow account\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"fuel_insurance\",\n            \"docs\": [\"accumulated fuel for token amounts of insurance\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_deposits\",\n            \"docs\": [\"accumulated fuel for notional of deposits\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_borrows\",\n            \"docs\": [\"accumulate fuel bonus for notional of borrows\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_positions\",\n            \"docs\": [\"accumulated fuel for perp open interest\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_taker\",\n            \"docs\": [\"accumulate fuel bonus for taker volume\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_maker\",\n            \"docs\": [\"accumulate fuel bonus for maker volume\"],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"if_staked_gov_token_amount\",\n            \"docs\": [\n              \"The amount of tokens staked in the governance spot markets if\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_fuel_if_bonus_update_ts\",\n            \"docs\": [\n              \"last unix ts user stats data was used to update if fuel (u32 to save space)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u8\", 12]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReferrerName\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_stats\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": {\n              \"array\": [\"u8\", 32]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FuelOverflow\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"docs\": [\"The authority of this overflow account\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fuel_insurance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_deposits\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_borrows\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_positions\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_taker\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_maker\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"last_fuel_sweep_ts\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"last_reset_ts\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\"u128\", 6]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"NewUserRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sub_account_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": {\n              \"array\": [\"u8\", 32]\n            }\n          },\n          {\n            \"name\": \"referrer\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"direction\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"DepositDirection\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_record_id\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_deposit_balance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_withdraw_balance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_cumulative_deposit_interest\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_cumulative_borrow_interest\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_deposits_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_withdraws_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"explanation\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"DepositExplanation\"\n              }\n            }\n          },\n          {\n            \"name\": \"transfer_user\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotInterestRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"deposit_balance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_deposit_interest\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrow_balance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_borrow_interest\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"optimal_utilization\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"optimal_borrow_rate\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"max_borrow_rate\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FundingPaymentRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"funding_payment\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_last_cumulative_funding\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"amm_cumulative_funding_long\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"amm_cumulative_funding_short\",\n            \"type\": \"i128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FundingRateRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"record_id\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"funding_rate\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"funding_rate_long\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"funding_rate_short\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"cumulative_funding_rate_long\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"cumulative_funding_rate_short\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"oracle_price_twap\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"mark_price_twap\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"period_revenue\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"base_asset_amount_with_amm\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"base_asset_amount_with_unsettled_lp\",\n            \"type\": \"i128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CurveRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"record_id\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"peg_multiplier_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_reserve_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"quote_asset_reserve_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"sqrt_k_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"peg_multiplier_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_reserve_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"quote_asset_reserve_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"sqrt_k_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_amount_long\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_amount_short\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"base_asset_amount_with_amm\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_fee\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"total_fee_minus_distributions\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"adjustment_cost\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"fill_record\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"number_of_users\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SignedMsgOrderRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"hash\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"matching_order_params\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderParams\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_order_id\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"signed_msg_order_max_slot\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"signed_msg_order_uuid\",\n            \"type\": {\n              \"array\": [\"u8\", 8]\n            }\n          },\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"order\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Order\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"OrderActionRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"action\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderAction\"\n              }\n            }\n          },\n          {\n            \"name\": \"action_explanation\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"OrderActionExplanation\"\n              }\n            }\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"market_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketType\"\n              }\n            }\n          },\n          {\n            \"name\": \"filler\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"filler_reward\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"fill_record_id\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"base_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"quote_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"taker_fee\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"maker_fee\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"referrer_reward\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"quote_asset_amount_surplus\",\n            \"type\": {\n              \"option\": \"i64\"\n            }\n          },\n          {\n            \"name\": \"spot_fulfillment_method_fee\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"taker\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"taker_order_id\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"taker_order_direction\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"PositionDirection\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"taker_order_base_asset_amount\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"taker_order_cumulative_base_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"taker_order_cumulative_quote_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"maker\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"maker_order_id\",\n            \"type\": {\n              \"option\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"maker_order_direction\",\n            \"type\": {\n              \"option\": {\n                \"defined\": {\n                  \"name\": \"PositionDirection\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"maker_order_base_asset_amount\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"maker_order_cumulative_base_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"maker_order_cumulative_quote_asset_amount_filled\",\n            \"type\": {\n              \"option\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"oracle_price\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LPRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"action\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LPAction\"\n              }\n            }\n          },\n          {\n            \"name\": \"n_shares\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"delta_base_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"delta_quote_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"pnl\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidationRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"liquidation_type\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidationType\"\n              }\n            }\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidator\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"margin_requirement\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_collateral\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"margin_freed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"liquidation_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bankrupt\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"canceled_order_ids\",\n            \"type\": {\n              \"vec\": \"u32\"\n            }\n          },\n          {\n            \"name\": \"liquidate_perp\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidatePerpRecord\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidate_spot\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidateSpotRecord\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidate_borrow_for_perp_pnl\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidateBorrowForPerpPnlRecord\"\n              }\n            }\n          },\n          {\n            \"name\": \"liquidate_perp_pnl_for_deposit\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidatePerpPnlForDepositRecord\"\n              }\n            }\n          },\n          {\n            \"name\": \"perp_bankruptcy\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PerpBankruptcyRecord\"\n              }\n            }\n          },\n          {\n            \"name\": \"spot_bankruptcy\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SpotBankruptcyRecord\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SettlePnlRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pnl\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"base_asset_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_asset_amount_after\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"quote_entry_amount\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"settle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"explanation\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SettlePnlExplanation\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceFundRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"spot_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"perp_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"user_if_factor\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"total_if_factor\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"vault_amount_before\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"insurance_vault_amount_before\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_if_shares_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_if_shares_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InsuranceFundStakeRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"action\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"StakeAction\"\n              }\n            }\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"insurance_vault_amount_before\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"if_shares_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"user_if_shares_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_if_shares_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"if_shares_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"user_if_shares_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"total_if_shares_after\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SwapRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"out_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"in_market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"out_oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"in_oracle_price\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"fee\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SpotMarketVaultDepositRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"market_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"deposit_balance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_deposit_interest_before\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"cumulative_deposit_interest_after\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"deposit_token_amount_before\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DeleteUserRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sub_account_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"keeper\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FuelSweepRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_stats_fuel_insurance\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_stats_fuel_deposits\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_stats_fuel_borrows\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_stats_fuel_positions\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_stats_fuel_taker\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"user_stats_fuel_maker\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_insurance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_deposits\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_borrows\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_positions\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_taker\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_overflow_fuel_maker\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FuelSeasonRecord\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"ts\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fuel_insurance\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_deposits\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_borrows\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_positions\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_taker\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_maker\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"fuel_total\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    }\n  ]\n}\n","import { Drift } from \"./drift\";\nimport DRIFT_IDL_JSON from \"./drift.json\";\n\nexport const DRIFT_IDL = DRIFT_IDL_JSON as Drift;\nexport type DriftIdlType = Drift;\n","import {\n  DriftUserStats,\n  DriftUserStatsJSON,\n  UserFeesJSON,\n  DriftUser,\n  DriftUserJSON,\n  DriftState,\n  DriftStateJSON,\n  DriftSpotMarket,\n  DriftSpotMarketJSON,\n  DriftSpotMarketRaw,\n  DriftRewards,\n  DriftRewardsJSON,\n} from \"../types\";\n\nexport function driftUserStatsRawToDto(\n  userStatsRaw: DriftUserStats\n): DriftUserStatsJSON {\n  return {\n    authority: userStatsRaw.authority.toBase58(),\n    referrer: userStatsRaw.referrer.toBase58(),\n    fees: userFeesToDto(userStatsRaw.fees),\n    nextEpochTs: userStatsRaw.nextEpochTs.toString(),\n    makerVolume30d: userStatsRaw.makerVolume30d.toString(),\n    takerVolume30d: userStatsRaw.takerVolume30d.toString(),\n    fillerVolume30d: userStatsRaw.fillerVolume30d.toString(),\n    lastMakerVolume30dTs: userStatsRaw.lastMakerVolume30dTs.toString(),\n    lastTakerVolume30dTs: userStatsRaw.lastTakerVolume30dTs.toString(),\n    lastFillerVolume30dTs: userStatsRaw.lastFillerVolume30dTs.toString(),\n    ifStakedQuoteAssetAmount: userStatsRaw.ifStakedQuoteAssetAmount.toString(),\n    numberOfSubAccounts: userStatsRaw.numberOfSubAccounts,\n    numberOfSubAccountsCreated: userStatsRaw.numberOfSubAccountsCreated,\n    referrerStatus: userStatsRaw.referrerStatus,\n    disableUpdatePerpBidAskTwap: userStatsRaw.disableUpdatePerpBidAskTwap,\n    padding1: userStatsRaw.padding1,\n    fuelOverflowStatus: userStatsRaw.fuelOverflowStatus,\n    fuelInsurance: userStatsRaw.fuelInsurance,\n    fuelDeposits: userStatsRaw.fuelDeposits,\n    fuelBorrows: userStatsRaw.fuelBorrows,\n    fuelPositions: userStatsRaw.fuelPositions,\n    fuelTaker: userStatsRaw.fuelTaker,\n    fuelMaker: userStatsRaw.fuelMaker,\n    ifStakedGovTokenAmount: userStatsRaw.ifStakedGovTokenAmount.toString(),\n    lastFuelIfBonusUpdateTs: userStatsRaw.lastFuelIfBonusUpdateTs,\n    padding: userStatsRaw.padding,\n  };\n}\n\nexport function driftUserRawToDto(userRaw: DriftUser): DriftUserJSON {\n  return {\n    authority: userRaw.authority.toBase58(),\n    spotPositions: userRaw.spotPositions.map((p) => ({\n      scaledBalance: p.scaledBalance?.toString() ?? \"0\",\n      openBids: p.openBids?.toString() ?? \"0\",\n      openAsks: p.openAsks?.toString() ?? \"0\",\n      cumulativeDeposits: p.cumulativeDeposits?.toString() ?? \"0\",\n      marketIndex: p.marketIndex ?? 0,\n      balanceType: p.balanceType,\n      openOrders: p.openOrders ?? 0,\n      padding: p.padding ?? [],\n    })),\n  };\n}\n\nexport function driftStateRawToDto(stateRaw: DriftState): DriftStateJSON {\n  return {\n    admin: stateRaw.admin.toBase58(),\n    whitelistMint: stateRaw.whitelistMint.toBase58(),\n    discountMint: stateRaw.discountMint.toBase58(),\n    signer: stateRaw.signer.toBase58(),\n    srmVault: stateRaw.srmVault.toBase58(),\n    perpFeeStructure: stateRaw.perpFeeStructure as any,\n    spotFeeStructure: stateRaw.spotFeeStructure as any,\n    oracleGuardRails: stateRaw.oracleGuardRails as any,\n    numberOfAuthorities: stateRaw.numberOfAuthorities.toString(),\n    numberOfSubAccounts: stateRaw.numberOfSubAccounts.toString(),\n    lpCooldownTime: stateRaw.lpCooldownTime.toString(),\n    liquidationMarginBufferRatio: stateRaw.liquidationMarginBufferRatio,\n    settlementDuration: stateRaw.settlementDuration,\n    numberOfMarkets: stateRaw.numberOfMarkets,\n    numberOfSpotMarkets: stateRaw.numberOfSpotMarkets,\n    signerNonce: stateRaw.signerNonce,\n    minPerpAuctionDuration: stateRaw.minPerpAuctionDuration,\n    defaultMarketOrderTimeInForce: stateRaw.defaultMarketOrderTimeInForce,\n    defaultSpotAuctionDuration: stateRaw.defaultSpotAuctionDuration,\n    exchangeStatus: stateRaw.exchangeStatus,\n    liquidationDuration: stateRaw.liquidationDuration,\n    initialPctToLiquidate: stateRaw.initialPctToLiquidate,\n    maxNumberOfSubAccounts: stateRaw.maxNumberOfSubAccounts,\n    maxInitializeUserFee: stateRaw.maxInitializeUserFee,\n    padding: stateRaw.padding,\n  };\n}\n\nexport function driftSpotMarketRawToDto(\n  spotMarketRaw: DriftSpotMarket | DriftSpotMarketRaw\n): DriftSpotMarketJSON {\n  return {\n    pubkey: spotMarketRaw.pubkey.toBase58(),\n    oracle: spotMarketRaw.oracle.toBase58(),\n    mint: spotMarketRaw.mint.toBase58(),\n    decimals: spotMarketRaw.decimals,\n    cumulativeDepositInterest:\n      spotMarketRaw.cumulativeDepositInterest.toString(),\n    marketIndex: spotMarketRaw.marketIndex,\n\n    depositBalance: spotMarketRaw.depositBalance.toString(),\n    borrowBalance: spotMarketRaw.borrowBalance.toString(),\n    cumulativeBorrowInterest: spotMarketRaw.cumulativeBorrowInterest.toString(),\n    optimalUtilization: spotMarketRaw.optimalUtilization,\n    optimalBorrowRate: spotMarketRaw.optimalBorrowRate,\n    maxBorrowRate: spotMarketRaw.maxBorrowRate,\n    minBorrowRate: spotMarketRaw.minBorrowRate,\n    insuranceFund: {\n      totalFactor: spotMarketRaw.insuranceFund.totalFactor,\n    },\n    poolId: spotMarketRaw.poolId,\n  };\n}\n\nexport function driftRewardsRawToDto(\n  rewardsRaw: DriftRewards\n): DriftRewardsJSON {\n  return {\n    oracle: rewardsRaw.oracle.toBase58(),\n    marketIndex: rewardsRaw.marketIndex,\n    spotMarket: rewardsRaw.spotMarket.toBase58(),\n    mint: rewardsRaw.mint.toBase58(),\n    spotPosition: {\n      scaledBalance: rewardsRaw.spotPosition.scaledBalance.toString(),\n      openBids: rewardsRaw.spotPosition.openBids.toString(),\n      openAsks: rewardsRaw.spotPosition.openAsks.toString(),\n      cumulativeDeposits: rewardsRaw.spotPosition.cumulativeDeposits.toString(),\n      marketIndex: rewardsRaw.spotPosition.marketIndex,\n      balanceType: rewardsRaw.spotPosition.balanceType,\n      openOrders: rewardsRaw.spotPosition.openOrders,\n      padding: rewardsRaw.spotPosition.padding,\n    },\n  };\n}\n\nfunction userFeesToDto(feesRaw: any): UserFeesJSON {\n  return {\n    totalFeePaid: feesRaw.totalFeePaid.toString(),\n    totalFeeRebate: feesRaw.totalFeeRebate.toString(),\n    totalTokenDiscount: feesRaw.totalTokenDiscount.toString(),\n    totalRefereeDiscount: feesRaw.totalRefereeDiscount.toString(),\n    totalReferrerReward: feesRaw.totalReferrerReward.toString(),\n    currentEpochReferrerReward: feesRaw.currentEpochReferrerReward.toString(),\n  };\n}\n","import { BorshAccountsCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { DRIFT_IDL } from \"../idl\";\nimport {\n  DriftUserStats,\n  DriftUserStatsJSON,\n  DriftUser,\n  DriftUserJSON,\n  DriftState,\n  DriftStateJSON,\n  DriftSpotMarket,\n  DriftSpotMarketJSON,\n  DriftSpotMarketRaw,\n  DriftRewards,\n  DriftRewardsJSON,\n} from \"../types\";\n\nconst DRIFT_ACCOUNTS_CODER = new BorshAccountsCoder(DRIFT_IDL);\n\nconst spotMarketDiscriminator = Buffer.from([100, 177, 8, 107, 168, 65, 65, 39]);\nconst stateDiscriminator = Buffer.from([216, 146, 107, 94, 104, 75, 182, 177]);\nconst userDiscriminator = Buffer.from([159, 117, 95, 227, 239, 151, 58, 236]);\nconst userStatsDiscriminator = Buffer.from([176, 223, 136, 27, 122, 79, 32, 227]);\n\nexport function dtoToDriftUserStatsRaw(userStatsDto: DriftUserStatsJSON): DriftUserStats {\n  return {\n    authority: new PublicKey(userStatsDto.authority),\n    referrer: new PublicKey(userStatsDto.referrer),\n    fees: {\n      totalFeePaid: new BN(userStatsDto.fees.totalFeePaid),\n      totalFeeRebate: new BN(userStatsDto.fees.totalFeeRebate),\n      totalTokenDiscount: new BN(userStatsDto.fees.totalTokenDiscount),\n      totalRefereeDiscount: new BN(userStatsDto.fees.totalRefereeDiscount),\n      totalReferrerReward: new BN(userStatsDto.fees.totalReferrerReward),\n      currentEpochReferrerReward: new BN(userStatsDto.fees.currentEpochReferrerReward),\n    },\n    nextEpochTs: new BN(userStatsDto.nextEpochTs),\n    makerVolume30d: new BN(userStatsDto.makerVolume30d),\n    takerVolume30d: new BN(userStatsDto.takerVolume30d),\n    fillerVolume30d: new BN(userStatsDto.fillerVolume30d),\n    lastMakerVolume30dTs: new BN(userStatsDto.lastMakerVolume30dTs),\n    lastTakerVolume30dTs: new BN(userStatsDto.lastTakerVolume30dTs),\n    lastFillerVolume30dTs: new BN(userStatsDto.lastFillerVolume30dTs),\n    ifStakedQuoteAssetAmount: new BN(userStatsDto.ifStakedQuoteAssetAmount),\n    numberOfSubAccounts: userStatsDto.numberOfSubAccounts,\n    numberOfSubAccountsCreated: userStatsDto.numberOfSubAccountsCreated,\n    referrerStatus: userStatsDto.referrerStatus,\n    disableUpdatePerpBidAskTwap: userStatsDto.disableUpdatePerpBidAskTwap,\n    padding1: userStatsDto.padding1,\n    fuelOverflowStatus: userStatsDto.fuelOverflowStatus,\n    fuelInsurance: userStatsDto.fuelInsurance,\n    fuelDeposits: userStatsDto.fuelDeposits,\n    fuelBorrows: userStatsDto.fuelBorrows,\n    fuelPositions: userStatsDto.fuelPositions,\n    fuelTaker: userStatsDto.fuelTaker,\n    fuelMaker: userStatsDto.fuelMaker,\n    ifStakedGovTokenAmount: new BN(userStatsDto.ifStakedGovTokenAmount),\n    lastFuelIfBonusUpdateTs: userStatsDto.lastFuelIfBonusUpdateTs,\n    padding: userStatsDto.padding,\n  };\n}\n\nexport function dtoToDriftUserRaw(userDto: DriftUserJSON): DriftUser {\n  return {\n    authority: new PublicKey(userDto.authority),\n    spotPositions: userDto.spotPositions.map((p) => ({\n      scaledBalance: new BN(p.scaledBalance),\n      openBids: new BN(p.openBids),\n      openAsks: new BN(p.openAsks),\n      cumulativeDeposits: new BN(p.cumulativeDeposits),\n      marketIndex: p.marketIndex,\n      balanceType: p.balanceType,\n      openOrders: p.openOrders,\n      padding: p.padding,\n    })),\n  };\n}\n\nexport function dtoToDriftStateRaw(stateDto: DriftStateJSON): DriftState {\n  return {\n    admin: new PublicKey(stateDto.admin),\n    whitelistMint: new PublicKey(stateDto.whitelistMint),\n    discountMint: new PublicKey(stateDto.discountMint),\n    signer: new PublicKey(stateDto.signer),\n    srmVault: new PublicKey(stateDto.srmVault),\n    perpFeeStructure: stateDto.perpFeeStructure as any,\n    spotFeeStructure: stateDto.spotFeeStructure as any,\n    oracleGuardRails: stateDto.oracleGuardRails as any,\n    numberOfAuthorities: new BN(stateDto.numberOfAuthorities),\n    numberOfSubAccounts: new BN(stateDto.numberOfSubAccounts),\n    lpCooldownTime: new BN(stateDto.lpCooldownTime),\n    liquidationMarginBufferRatio: stateDto.liquidationMarginBufferRatio,\n    settlementDuration: stateDto.settlementDuration,\n    numberOfMarkets: stateDto.numberOfMarkets,\n    numberOfSpotMarkets: stateDto.numberOfSpotMarkets,\n    signerNonce: stateDto.signerNonce,\n    minPerpAuctionDuration: stateDto.minPerpAuctionDuration,\n    defaultMarketOrderTimeInForce: stateDto.defaultMarketOrderTimeInForce,\n    defaultSpotAuctionDuration: stateDto.defaultSpotAuctionDuration,\n    exchangeStatus: stateDto.exchangeStatus,\n    liquidationDuration: stateDto.liquidationDuration,\n    initialPctToLiquidate: stateDto.initialPctToLiquidate,\n    maxNumberOfSubAccounts: stateDto.maxNumberOfSubAccounts,\n    maxInitializeUserFee: stateDto.maxInitializeUserFee,\n    padding: stateDto.padding,\n  };\n}\n\nexport function dtoToDriftRewardsRaw(rewardsDto: DriftRewardsJSON): DriftRewards {\n  return {\n    oracle: new PublicKey(rewardsDto.oracle),\n    marketIndex: rewardsDto.marketIndex,\n    spotMarket: new PublicKey(rewardsDto.spotMarket),\n    mint: new PublicKey(rewardsDto.mint),\n    spotPosition: {\n      scaledBalance: new BN(rewardsDto.spotPosition.scaledBalance),\n      openBids: new BN(rewardsDto.spotPosition.openBids),\n      openAsks: new BN(rewardsDto.spotPosition.openAsks),\n      cumulativeDeposits: new BN(rewardsDto.spotPosition.cumulativeDeposits),\n      marketIndex: rewardsDto.spotPosition.marketIndex,\n      balanceType: rewardsDto.spotPosition.balanceType,\n      openOrders: rewardsDto.spotPosition.openOrders,\n      padding: rewardsDto.spotPosition.padding,\n    },\n  };\n}\n\nexport function dtoToDriftSpotMarketRaw(spotMarketDto: DriftSpotMarketJSON): DriftSpotMarket {\n  return {\n    pubkey: new PublicKey(spotMarketDto.pubkey),\n    oracle: new PublicKey(spotMarketDto.oracle),\n    mint: new PublicKey(spotMarketDto.mint),\n    decimals: spotMarketDto.decimals,\n    cumulativeDepositInterest: new BN(spotMarketDto.cumulativeDepositInterest),\n    marketIndex: spotMarketDto.marketIndex,\n    depositBalance: new BN(spotMarketDto.depositBalance),\n    borrowBalance: new BN(spotMarketDto.borrowBalance),\n    cumulativeBorrowInterest: new BN(spotMarketDto.cumulativeBorrowInterest),\n    optimalUtilization: spotMarketDto.optimalUtilization,\n    optimalBorrowRate: spotMarketDto.optimalBorrowRate,\n    maxBorrowRate: spotMarketDto.maxBorrowRate,\n    minBorrowRate: spotMarketDto.minBorrowRate,\n    insuranceFund: spotMarketDto.insuranceFund,\n    poolId: spotMarketDto.poolId,\n  };\n}\n\nexport function decodeDriftSpotMarketData(data: Buffer): DriftSpotMarketRaw {\n  if (!data.slice(0, 8).equals(spotMarketDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  // BorshAccountsCoder.decode() expects the full buffer with discriminator\n  const decoded = DRIFT_ACCOUNTS_CODER.decode(\"SpotMarket\", data);\n\n  // Transform snake_case field names from IDL to camelCase for TypeScript types\n  return {\n    pubkey: decoded.pubkey,\n    oracle: decoded.oracle,\n    mint: decoded.mint,\n    vault: decoded.vault,\n    name: decoded.name,\n    historicalOracleData: decoded.historical_oracle_data,\n    historicalIndexData: decoded.historical_index_data,\n    revenuePool: decoded.revenue_pool,\n    spotFeePool: decoded.spot_fee_pool,\n    insuranceFund: decoded.insurance_fund,\n    totalSpotFee: decoded.total_spot_fee,\n    depositBalance: decoded.deposit_balance,\n    borrowBalance: decoded.borrow_balance,\n    cumulativeDepositInterest: decoded.cumulative_deposit_interest,\n    cumulativeBorrowInterest: decoded.cumulative_borrow_interest,\n    totalSocialLoss: decoded.total_social_loss,\n    totalQuoteSocialLoss: decoded.total_quote_social_loss,\n    withdrawGuardThreshold: decoded.withdraw_guard_threshold,\n    maxTokenDeposits: decoded.max_token_deposits,\n    depositTokenTwap: decoded.deposit_token_twap,\n    borrowTokenTwap: decoded.borrow_token_twap,\n    utilizationTwap: decoded.utilization_twap,\n    lastInterestTs: decoded.last_interest_ts,\n    lastTwapTs: decoded.last_twap_ts,\n    expiryTs: decoded.expiry_ts,\n    orderStepSize: decoded.order_step_size,\n    orderTickSize: decoded.order_tick_size,\n    minOrderSize: decoded.min_order_size,\n    maxPositionSize: decoded.max_position_size,\n    nextFillRecordId: decoded.next_fill_record_id,\n    nextDepositRecordId: decoded.next_deposit_record_id,\n    initialAssetWeight: decoded.initial_asset_weight,\n    maintenanceAssetWeight: decoded.maintenance_asset_weight,\n    initialLiabilityWeight: decoded.initial_liability_weight,\n    maintenanceLiabilityWeight: decoded.maintenance_liability_weight,\n    imfFactor: decoded.imf_factor,\n    liquidatorFee: decoded.liquidator_fee,\n    ifLiquidationFee: decoded.if_liquidation_fee,\n    optimalUtilization: decoded.optimal_utilization,\n    optimalBorrowRate: decoded.optimal_borrow_rate,\n    maxBorrowRate: decoded.max_borrow_rate,\n    decimals: decoded.decimals,\n    marketIndex: decoded.market_index,\n    ordersEnabled: decoded.orders_enabled,\n    oracleSource: decoded.oracle_source,\n    status: decoded.status,\n    assetTier: decoded.asset_tier,\n    pausedOperations: decoded.paused_operations,\n    ifPausedOperations: decoded.if_paused_operations,\n    feeAdjustment: decoded.fee_adjustment,\n    maxTokenBorrowsFraction: decoded.max_token_borrows_fraction,\n    flashLoanAmount: decoded.flash_loan_amount,\n    flashLoanInitialTokenAmount: decoded.flash_loan_initial_token_amount,\n    totalSwapFee: decoded.total_swap_fee,\n    scaleInitialAssetWeightStart: decoded.scale_initial_asset_weight_start,\n    minBorrowRate: decoded.min_borrow_rate,\n    fuelBoostDeposits: decoded.fuel_boost_deposits,\n    fuelBoostBorrows: decoded.fuel_boost_borrows,\n    fuelBoostTaker: decoded.fuel_boost_taker,\n    fuelBoostMaker: decoded.fuel_boost_maker,\n    fuelBoostInsurance: decoded.fuel_boost_insurance,\n    tokenProgram: decoded.token_program,\n    poolId: decoded.pool_id,\n    padding: decoded.padding,\n  } as DriftSpotMarketRaw;\n}\n\nexport function decodeDriftStateData(data: Buffer): DriftState {\n  if (!data.slice(0, 8).equals(stateDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const decoded = DRIFT_ACCOUNTS_CODER.decode(\"State\", data);\n\n  // Transform snake_case field names from IDL to camelCase for TypeScript types\n  return {\n    admin: decoded.admin,\n    whitelistMint: decoded.whitelist_mint,\n    discountMint: decoded.discount_mint,\n    signer: decoded.signer,\n    srmVault: decoded.srm_vault,\n    perpFeeStructure: decoded.perp_fee_structure,\n    spotFeeStructure: decoded.spot_fee_structure,\n    oracleGuardRails: decoded.oracle_guard_rails,\n    numberOfAuthorities: decoded.number_of_authorities,\n    numberOfSubAccounts: decoded.number_of_sub_accounts,\n    lpCooldownTime: decoded.lp_cooldown_time,\n    liquidationMarginBufferRatio: decoded.liquidation_margin_buffer_ratio,\n    settlementDuration: decoded.settlement_duration,\n    numberOfMarkets: decoded.number_of_markets,\n    numberOfSpotMarkets: decoded.number_of_spot_markets,\n    signerNonce: decoded.signer_nonce,\n    minPerpAuctionDuration: decoded.min_perp_auction_duration,\n    defaultMarketOrderTimeInForce: decoded.default_market_order_time_in_force,\n    defaultSpotAuctionDuration: decoded.default_spot_auction_duration,\n    exchangeStatus: decoded.exchange_status,\n    liquidationDuration: decoded.liquidation_duration,\n    initialPctToLiquidate: decoded.initial_pct_to_liquidate,\n    maxNumberOfSubAccounts: decoded.max_number_of_sub_accounts,\n    maxInitializeUserFee: decoded.max_initialize_user_fee,\n    padding: decoded.padding,\n  } as DriftState;\n}\n\nexport function decodeDriftUserData(data: Buffer): DriftUser {\n  if (!data.slice(0, 8).equals(userDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const decoded = DRIFT_ACCOUNTS_CODER.decode(\"User\", data);\n\n  // Transform snake_case field names from IDL to camelCase for TypeScript types\n  return {\n    authority: decoded.authority,\n    spotPositions: decoded.spot_positions.map((p: any) => ({\n      scaledBalance: new BN(p.scaled_balance),\n      openBids: new BN(p.open_bids),\n      openAsks: new BN(p.open_asks),\n      cumulativeDeposits: new BN(p.cumulative_deposits),\n      marketIndex: p.market_index,\n      balanceType: p.balance_type,\n      openOrders: p.open_orders,\n      padding: p.padding,\n    })),\n    // delegate: decoded.delegate,\n    // name: decoded.name,\n    // perpPositions: decoded.perp_positions,\n    // orders: decoded.orders,\n    // lastAddPerpLpSharesTs: decoded.last_add_perp_lp_shares_ts,\n    // totalDeposits: decoded.total_deposits,\n    // totalWithdraws: decoded.total_withdraws,\n    // totalSocialLoss: decoded.total_social_loss,\n    // settledPerpPnl: decoded.settled_perp_pnl,\n    // cumulativeSpotFees: decoded.cumulative_spot_fees,\n    // cumulativePerpFunding: decoded.cumulative_perp_funding,\n    // liquidationMarginFreed: decoded.liquidation_margin_freed,\n    // lastActiveSlot: decoded.last_active_slot,\n    // nextOrderId: decoded.next_order_id,\n    // maxMarginRatio: decoded.max_margin_ratio,\n    // nextLiquidationId: decoded.next_liquidation_id,\n    // subAccountId: decoded.sub_account_id,\n    // status: decoded.status,\n    // isMarginTradingEnabled: decoded.is_margin_trading_enabled,\n    // idle: decoded.idle,\n    // openOrders: decoded.open_orders,\n    // hasOpenOrder: decoded.has_open_order,d\n    // openAuctions: decoded.open_auctions,\n    // hasOpenAuction: decoded.has_open_auction,\n    // marginMode: decoded.margin_mode,\n    // poolId: decoded.pool_id,\n    // padding1: decoded.padding1,\n    // lastFuelBonusUpdateTs: decoded.last_fuel_bonus_update_ts,\n    // padding: decoded.padding,\n  } as DriftUser;\n}\n\nexport function decodeDriftUserStatsData(data: Buffer): DriftUserStats {\n  if (!data.slice(0, 8).equals(userStatsDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const decoded = DRIFT_ACCOUNTS_CODER.decode(\"UserStats\", data);\n\n  // Transform snake_case field names from IDL to camelCase for TypeScript types\n  return {\n    authority: decoded.authority,\n    referrer: decoded.referrer,\n    fees: decoded.fees,\n    nextEpochTs: decoded.next_epoch_ts,\n    makerVolume30d: decoded.maker_volume_30d,\n    takerVolume30d: decoded.taker_volume_30d,\n    fillerVolume30d: decoded.filler_volume_30d,\n    lastMakerVolume30dTs: decoded.last_maker_volume_30d_ts,\n    lastTakerVolume30dTs: decoded.last_taker_volume_30d_ts,\n    lastFillerVolume30dTs: decoded.last_filler_volume_30d_ts,\n    ifStakedQuoteAssetAmount: decoded.if_staked_quote_asset_amount,\n    numberOfSubAccounts: decoded.number_of_sub_accounts,\n    numberOfSubAccountsCreated: decoded.number_of_sub_accounts_created,\n    referrerStatus: decoded.referrer_status,\n    disableUpdatePerpBidAskTwap: decoded.disable_update_perp_bid_ask_twap,\n    padding1: decoded.padding1,\n    fuelOverflowStatus: decoded.fuel_overflow_status,\n    fuelInsurance: decoded.fuel_insurance,\n    fuelDeposits: decoded.fuel_deposits,\n    fuelBorrows: decoded.fuel_borrows,\n    fuelPositions: decoded.fuel_positions,\n    fuelTaker: decoded.fuel_taker,\n    fuelMaker: decoded.fuel_maker,\n    ifStakedGovTokenAmount: decoded.if_staked_gov_token_amount,\n    lastFuelIfBonusUpdateTs: decoded.last_fuel_if_bonus_update_ts,\n    padding: decoded.padding,\n  } as DriftUserStats;\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const DRIFT_PROGRAM_ID = new PublicKey(\n  \"dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH\"\n);\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { DRIFT_PROGRAM_ID } from \"../constants\";\n\nexport const SEED_DRIFT_STATE = \"drift_state\";\nexport const SEED_USER = \"user\";\nexport const SEED_USER_STATS = \"user_stats\";\nexport const SEED_SPOT_MARKET = \"spot_market\";\nexport const SEED_SPOT_MARKET_VAULT = \"spot_market_vault\";\nexport const SEED_DRIFT_SIGNER = \"drift_signer\";\n\nexport function getAllDerivedDriftAccounts(marketIndex: number) {\n  return {\n    driftState: deriveDriftState()[0],\n    driftSigner: deriveDriftSigner()[0],\n    driftSpotMarket: deriveDriftSpotMarket(marketIndex)[0],\n    driftSpotMarketVault: deriveDriftSpotMarketVault(marketIndex)[0],\n  };\n}\n\nexport function deriveDriftState(programId: PublicKey = DRIFT_PROGRAM_ID): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([Buffer.from(SEED_DRIFT_STATE)], programId);\n}\n\nexport function deriveDriftSigner(programId: PublicKey = DRIFT_PROGRAM_ID): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([Buffer.from(SEED_DRIFT_SIGNER)], programId);\n}\n\nexport function deriveDriftUser(\n  authority: PublicKey,\n  subAccountId: number,\n  programId: PublicKey = DRIFT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEED_USER),\n      authority.toBuffer(),\n      new BN(subAccountId).toArrayLike(Buffer, \"le\", 2),\n    ],\n    programId\n  );\n}\n\nexport function deriveDriftUserStats(\n  authority: PublicKey,\n  programId: PublicKey = DRIFT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_USER_STATS), authority.toBuffer()],\n    programId\n  );\n}\n\nexport function deriveDriftSpotMarket(\n  marketIndex: number,\n  programId: PublicKey = DRIFT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_SPOT_MARKET), new BN(marketIndex).toArrayLike(Buffer, \"le\", 2)],\n    programId\n  );\n}\n\nexport function deriveDriftSpotMarketVault(\n  marketIndex: number,\n  programId: PublicKey = DRIFT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_SPOT_MARKET_VAULT), new BN(marketIndex).toArrayLike(Buffer, \"le\", 2)],\n    programId\n  );\n}\n","import BN from \"bn.js\";\n\nimport { DriftSpotBalanceType, DriftSpotMarket, isSpotBalanceTypeVariant } from \"../types\";\n\n/**\n * All-in-one APY/APR calculation module for Drift Protocol\n *\n * This file contains:\n * - Constants\n * - Core rate calculations (APR)\n * - APY calculations (with compounding)\n */\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nexport const ZERO = new BN(0);\nexport const ONE = new BN(1);\nexport const TEN = new BN(10);\n\n// Precision constants\nexport const PERCENTAGE_PRECISION_EXP = new BN(6);\nexport const PERCENTAGE_PRECISION = new BN(10).pow(PERCENTAGE_PRECISION_EXP);\n\nexport const SPOT_MARKET_RATE_PRECISION_EXP = new BN(6);\nexport const SPOT_MARKET_RATE_PRECISION = new BN(10).pow(SPOT_MARKET_RATE_PRECISION_EXP);\n\nexport const SPOT_MARKET_UTILIZATION_PRECISION_EXP = new BN(6);\nexport const SPOT_MARKET_UTILIZATION_PRECISION = new BN(10).pow(\n  SPOT_MARKET_UTILIZATION_PRECISION_EXP\n);\n\n// Time constants\nexport const ONE_YEAR = new BN(31536000); // seconds in a year\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Ceiling division helper\n */\nfunction divCeil(a: BN, b: BN): BN {\n  const quotient = a.div(b);\n  const remainder = a.mod(b);\n  if (remainder.gt(ZERO)) {\n    return quotient.add(ONE);\n  }\n  return quotient;\n}\n\n/**\n * Calculates the spot token amount including any accumulated interest.\n */\nexport function getDriftTokenAmount(\n  balanceAmount: BN,\n  spotMarket: DriftSpotMarket,\n  balanceType: DriftSpotBalanceType\n): BN {\n  const precisionDecrease = TEN.pow(new BN(19 - spotMarket.decimals));\n\n  if (isSpotBalanceTypeVariant(balanceType, \"deposit\")) {\n    return balanceAmount.mul(spotMarket.cumulativeDepositInterest).div(precisionDecrease);\n  } else {\n    // For borrows, use ceiling division\n    return divCeil(balanceAmount.mul(spotMarket.cumulativeBorrowInterest), precisionDecrease);\n  }\n}\n\n// ============================================================================\n// CORE RATE CALCULATIONS (APR)\n// ============================================================================\n\n/**\n * Calculates the utilization rate of a spot market\n * Utilization = borrows / deposits\n */\nexport function calculateDriftUtilization(bank: DriftSpotMarket, delta: BN = ZERO): BN {\n  let tokenDepositAmount = getDriftTokenAmount(\n    bank.depositBalance,\n    bank,\n    DriftSpotBalanceType.DEPOSIT\n  );\n  let tokenBorrowAmount = getDriftTokenAmount(\n    bank.borrowBalance,\n    bank,\n    DriftSpotBalanceType.BORROW\n  );\n\n  if (delta.gt(ZERO)) {\n    tokenDepositAmount = tokenDepositAmount.add(delta);\n  } else if (delta.lt(ZERO)) {\n    tokenBorrowAmount = tokenBorrowAmount.add(delta.abs());\n  }\n\n  let utilization: BN;\n  if (tokenBorrowAmount.eq(ZERO) && tokenDepositAmount.eq(ZERO)) {\n    utilization = ZERO;\n  } else if (tokenDepositAmount.eq(ZERO)) {\n    utilization = SPOT_MARKET_UTILIZATION_PRECISION;\n  } else {\n    utilization = tokenBorrowAmount.mul(SPOT_MARKET_UTILIZATION_PRECISION).div(tokenDepositAmount);\n  }\n\n  return utilization;\n}\n\n/**\n * Calculates the interest rate based on utilization using a piecewise curve\n */\nexport function calculateDriftInterestRate(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null\n): BN {\n  const utilization = currentUtilization || calculateDriftUtilization(bank, delta);\n\n  const optimalUtil = new BN(bank.optimalUtilization);\n  const optimalRate = new BN(bank.optimalBorrowRate);\n  const maxRate = new BN(bank.maxBorrowRate);\n  const minRate = new BN(bank.minBorrowRate).mul(PERCENTAGE_PRECISION.divn(200));\n\n  const weightsDivisor = new BN(1000);\n  const segments: [BN, BN][] = [\n    [new BN(850_000), new BN(50)],\n    [new BN(900_000), new BN(100)],\n    [new BN(950_000), new BN(150)],\n    [new BN(990_000), new BN(200)],\n    [new BN(995_000), new BN(250)],\n    [SPOT_MARKET_UTILIZATION_PRECISION, new BN(250)],\n  ];\n\n  let rate: BN;\n  if (utilization.lte(optimalUtil)) {\n    // below optimal: linear ramp from 0 to optimalRate\n    const slope = optimalRate.mul(SPOT_MARKET_UTILIZATION_PRECISION).div(optimalUtil);\n    rate = utilization.mul(slope).div(SPOT_MARKET_UTILIZATION_PRECISION);\n  } else {\n    // above optimal: piecewise segments\n    const totalExtraRate = maxRate.sub(optimalRate);\n\n    rate = optimalRate.clone();\n    let prevUtil = optimalUtil.clone();\n\n    for (const [bp, weight] of segments) {\n      const segmentEnd = bp.gt(SPOT_MARKET_UTILIZATION_PRECISION)\n        ? SPOT_MARKET_UTILIZATION_PRECISION\n        : bp;\n      const segmentRange = segmentEnd.sub(prevUtil);\n\n      const segmentRateTotal = totalExtraRate.mul(weight).div(weightsDivisor);\n\n      if (utilization.lte(segmentEnd)) {\n        const partialUtil = utilization.sub(prevUtil);\n        const partialRate = segmentRateTotal.mul(partialUtil).div(segmentRange);\n        rate = rate.add(partialRate);\n        break;\n      } else {\n        rate = rate.add(segmentRateTotal);\n        prevUtil = segmentEnd;\n      }\n    }\n  }\n\n  return BN.max(minRate, rate);\n}\n\n/**\n * Calculates the borrow rate (APR) for a spot market\n */\nexport function calculateDriftBorrowRate(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null\n): BN {\n  return calculateDriftInterestRate(bank, delta, currentUtilization);\n}\n\n/**\n * Calculates the deposit rate (APR) for a spot market\n * This is the annualized interest rate lenders earn\n */\nexport function calculateDriftDepositRate(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null\n): BN {\n  // positive delta => adding to deposit\n  // negative delta => adding to borrow\n\n  const utilization = currentUtilization || calculateDriftUtilization(bank, delta);\n  const borrowRate = calculateDriftBorrowRate(bank, delta, utilization);\n  const depositRate = borrowRate\n    .mul(PERCENTAGE_PRECISION.sub(new BN(bank.insuranceFund.totalFactor)))\n    .mul(utilization)\n    .div(SPOT_MARKET_UTILIZATION_PRECISION)\n    .div(PERCENTAGE_PRECISION);\n  return depositRate;\n}\n\n// ============================================================================\n// APY CALCULATIONS (WITH COMPOUNDING)\n// ============================================================================\n\n/**\n * Calculates the Annual Percentage Yield (APY) for a lending/deposit position.\n *\n * APY accounts for compounding effects, unlike the simple deposit rate (APR).\n *\n * Formula: APY = e^(rate) - 1 (for continuous compounding approximation)\n *\n * @param bank - The SpotMarketAccount for the market\n * @param delta - Optional delta to simulate a deposit/borrow change (default: ZERO)\n * @param currentUtilization - Optional pre-calculated utilization (default: null, will be calculated)\n * @param compoundingPeriodsPerYear - Number of times interest compounds per year (default: 365 for daily)\n * @returns APY as a percentage scaled by PERCENTAGE_PRECISION (e.g., 5% = 5_000_000)\n *\n * @example\n * ```typescript\n * const bank = driftClient.getSpotMarketAccount(0); // USDC\n * const apy = calculateLendingAPY(bank);\n * const apyPercent = apy.toNumber() / PERCENTAGE_PRECISION.toNumber(); // Convert to decimal\n * console.log(`Lending APY: ${apyPercent.toFixed(2)}%`);\n * ```\n */\nexport function calculateDriftLendingAPY(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null,\n  _compoundingPeriodsPerYear: number = 365\n): BN {\n  // Get the annualized deposit rate (APR)\n  const depositRate = calculateDriftDepositRate(bank, delta, currentUtilization);\n\n  if (depositRate.eq(ZERO)) {\n    return ZERO;\n  }\n\n  // Calculate e^r using Taylor series expansion\n  // e^r = 1 + r + r^2/2! + r^3/3! + r^4/4! + r^5/5! + r^6/6! + r^7/7! + r^8/8!\n  const CALC_PRECISION = new BN(10).pow(new BN(18));\n\n  const rateInCalcPrecisionDecimal = depositRate\n    .mul(CALC_PRECISION)\n    .div(SPOT_MARKET_RATE_PRECISION);\n\n  // Calculate terms of Taylor series (first 8 terms for accuracy)\n  let expResult = CALC_PRECISION; // Start with 1\n  let term = rateInCalcPrecisionDecimal; // First term is r\n\n  // Add r\n  expResult = expResult.add(term);\n\n  // Add r^2/2!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(2);\n  expResult = expResult.add(term);\n\n  // Add r^3/3!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(3);\n  expResult = expResult.add(term);\n\n  // Add r^4/4!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(4);\n  expResult = expResult.add(term);\n\n  // Add r^5/5!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(5);\n  expResult = expResult.add(term);\n\n  // Add r^6/6!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(6);\n  expResult = expResult.add(term);\n\n  // Add r^7/7!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(7);\n  expResult = expResult.add(term);\n\n  // Add r^8/8!\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(8);\n  expResult = expResult.add(term);\n\n  // APY = e^r - 1\n  const apyInCalcPrecision = expResult.sub(CALC_PRECISION);\n\n  // Convert back to PERCENTAGE_PRECISION\n  const apy = apyInCalcPrecision.mul(PERCENTAGE_PRECISION).div(CALC_PRECISION);\n\n  return apy;\n}\n\n/**\n * Calculates a simplified lending APY without compounding (essentially the APR).\n * This is faster but less accurate than calculateLendingAPY.\n *\n * @param bank - The SpotMarketAccount for the market\n * @param delta - Optional delta to simulate a deposit/borrow change (default: ZERO)\n * @param currentUtilization - Optional pre-calculated utilization (default: null)\n * @returns APR as a percentage scaled by PERCENTAGE_PRECISION\n */\nexport function calculateDriftLendingAPR(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null\n): BN {\n  const depositRate = calculateDriftDepositRate(bank, delta, currentUtilization);\n\n  // Convert from SPOT_MARKET_RATE_PRECISION to PERCENTAGE_PRECISION\n  // depositRate is already annualized, just need to convert precision\n  const apr = depositRate.mul(PERCENTAGE_PRECISION).div(SPOT_MARKET_RATE_PRECISION);\n\n  return apr;\n}\n\n/**\n * Calculates the borrowing APY for a borrow position.\n *\n * @param bank - The SpotMarketAccount for the market\n * @param delta - Optional delta to simulate a deposit/borrow change (default: ZERO)\n * @param currentUtilization - Optional pre-calculated utilization (default: null)\n * @param compoundingPeriodsPerYear - Number of times interest compounds per year (default: 365)\n * @returns APY as a percentage scaled by PERCENTAGE_PRECISION\n */\nexport function calculateDriftBorrowAPY(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null,\n  _compoundingPeriodsPerYear: number = 365\n): BN {\n  const borrowRate = calculateDriftBorrowRate(bank, delta, currentUtilization);\n\n  if (borrowRate.eq(ZERO)) {\n    return ZERO;\n  }\n\n  // Same logic as lending APY but using borrow rate\n  const CALC_PRECISION = new BN(10).pow(new BN(18));\n\n  const rateInCalcPrecisionDecimal = borrowRate.mul(CALC_PRECISION).div(SPOT_MARKET_RATE_PRECISION);\n\n  let expResult = CALC_PRECISION;\n  let term = rateInCalcPrecisionDecimal;\n\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(2);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(3);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(4);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(5);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(6);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(7);\n  expResult = expResult.add(term);\n  term = term.mul(rateInCalcPrecisionDecimal).div(CALC_PRECISION).divn(8);\n  expResult = expResult.add(term);\n\n  const apyInCalcPrecision = expResult.sub(CALC_PRECISION);\n\n  const apy = apyInCalcPrecision.mul(PERCENTAGE_PRECISION).div(CALC_PRECISION);\n\n  return apy;\n}\n\n/**\n * Calculates the borrowing APR (without compounding).\n *\n * @param bank - The SpotMarketAccount for the market\n * @param delta - Optional delta to simulate a deposit/borrow change (default: ZERO)\n * @param currentUtilization - Optional pre-calculated utilization (default: null)\n * @returns APR as a percentage scaled by PERCENTAGE_PRECISION\n */\nexport function calculateDriftBorrowAPR(\n  bank: DriftSpotMarket,\n  delta: BN = ZERO,\n  currentUtilization: BN | null = null\n): BN {\n  const borrowRate = calculateDriftBorrowRate(bank, delta, currentUtilization);\n\n  // Convert from SPOT_MARKET_RATE_PRECISION to PERCENTAGE_PRECISION\n  const apr = borrowRate.mul(PERCENTAGE_PRECISION).div(SPOT_MARKET_RATE_PRECISION);\n\n  return apr;\n}\n\n// ============================================================================\n// INTEREST RATE CURVE GENERATION\n// ============================================================================\n\n/**\n * Interest rate curve point for visualization\n */\nexport interface DriftInterestRateCurvePoint {\n  utilization: number; // 0-100 percentage\n  borrowAPY: number; // percentage\n  supplyAPY: number; // percentage\n}\n\n// Solana slots per year (same as Kamino for consistency)\n// 2 slots/second * 60 seconds * 60 minutes * 24 hours * 365 days\nconst SLOTS_PER_YEAR = 63072000;\n\n/**\n * Convert APR to APY using discrete compounding formula\n * APY = (1 + APR/n)^n - 1, where n = SLOTS_PER_YEAR\n * This matches Kamino's approach for consistent curve generation\n *\n * @param apr - Annual Percentage Rate as decimal (e.g., 0.05 for 5%)\n * @returns Annual Percentage Yield as decimal\n */\nfunction calculateAPYFromAPR(apr: number): number {\n  if (apr === 0) return 0;\n  return Math.pow(1 + apr / SLOTS_PER_YEAR, SLOTS_PER_YEAR) - 1;\n}\n\n/**\n * Generate complete interest rate curve for a Drift spot market\n * Creates 101 data points from 0% to 100% utilization\n *\n * @param spotMarket - The Drift spot market account\n * @returns Array of curve points with utilization, borrow APY, and supply APY\n *\n * @example\n * ```typescript\n * const spotMarket = getDriftSpotMarket(0); // USDC market\n * const curve = generateDriftReserveCurve(spotMarket);\n *\n * curve.forEach(point => {\n *   console.log(`Utilization: ${point.utilization}%`);\n *   console.log(`Borrow APY: ${point.borrowAPY.toFixed(2)}%`);\n *   console.log(`Supply APY: ${point.supplyAPY.toFixed(2)}%`);\n * });\n * ```\n */\nexport function generateDriftReserveCurve(\n  spotMarket: DriftSpotMarket\n): DriftInterestRateCurvePoint[] {\n  return Array.from({ length: 101 }, (_, i) => {\n    const utilizationPercent = i / 100; // 0.00 to 1.00\n\n    // Convert to BN with SPOT_MARKET_UTILIZATION_PRECISION (1e6)\n    const utilizationBN = new BN(\n      Math.floor(utilizationPercent * SPOT_MARKET_UTILIZATION_PRECISION.toNumber())\n    );\n\n    // Calculate borrow rate (APR) at this utilization\n    const borrowRateBN = calculateDriftBorrowRate(spotMarket, ZERO, utilizationBN);\n\n    // Calculate deposit rate (APR) at this utilization\n    const depositRateBN = calculateDriftDepositRate(spotMarket, ZERO, utilizationBN);\n\n    // Convert from SPOT_MARKET_RATE_PRECISION to decimal\n    // SPOT_MARKET_RATE_PRECISION is 1e6, representing rates as integers\n    const borrowAPR = borrowRateBN.toNumber() / SPOT_MARKET_RATE_PRECISION.toNumber();\n    const supplyAPR = depositRateBN.toNumber() / SPOT_MARKET_RATE_PRECISION.toNumber();\n\n    // Convert APR to APY with compounding\n    const borrowAPY = calculateAPYFromAPR(borrowAPR);\n    const supplyAPY = calculateAPYFromAPR(supplyAPR);\n\n    return {\n      utilization: utilizationPercent * 100, // Convert to percentage (0-100)\n      borrowAPY: borrowAPY * 100, // Convert to percentage\n      supplyAPY: supplyAPY * 100, // Convert to percentage\n    };\n  });\n}\n","import { PublicKey, Connection } from \"@solana/web3.js\";\n\nimport {\n  DriftUser,\n  DriftRewards,\n  DriftSpotMarket,\n  DriftSpotMarketRaw,\n  SpotPosition,\n} from \"../types\";\n\nimport { deriveDriftSpotMarket } from \"./derive.utils\";\nimport { decodeDriftSpotMarketData } from \"./deserialize.utils\";\n\nimport { USDC_MINT } from \"~/constants\";\n\n/*\n *   Drift rewards get distributed to users in the form of spot positions.\n *   The spotPositions array in the DriftUser struct is an array of all the spot positions a user has.\n *   The first two positions are always [USDC, token]. The rest are the rewards\n *   (unless if bank is USDC then it's [USDC, ...rewards])\n *\n *   This function returns the rewards for each bank\n *\n *   NOTE: if bank has more then 2 Drift rewards, program will brick\n */\nexport async function getDriftRewards(\n  spotMarkets: DriftSpotMarket[],\n  userStates: {\n    bankAddress: PublicKey;\n    marketMint: PublicKey;\n    driftUser: DriftUser;\n  }[],\n  connection: Connection\n) {\n  // Not all rewards will be in spot markets we have fetched, so need to fetch seperately\n  const missingMarketIndexes: Set<number> = new Set();\n\n  const spotMarketsMap = new Map(spotMarkets.map((market) => [market.marketIndex, market]));\n\n  // Get all active rewards\n  const userStatesWithRewards = userStates.map((userState) => {\n    const spotPositions = userState.driftUser.spotPositions;\n    const isUsdc = userState.marketMint.equals(USDC_MINT);\n    const rewardIndex = isUsdc ? 1 : 2;\n    const rewards: SpotPosition[] = spotPositions\n      .slice(rewardIndex)\n      .filter((p) => p.marketIndex !== 0);\n\n    if (rewards.length > 0) {\n      rewards.forEach((reward) => {\n        const index = reward.marketIndex;\n        const market = spotMarketsMap.get(index);\n        if (!market) {\n          missingMarketIndexes.add(index);\n        }\n      });\n    }\n\n    return {\n      userState,\n      rewards,\n    };\n  });\n\n  const missingMarketIndexesArray = Array.from(missingMarketIndexes);\n\n  const missingMarketKeys = missingMarketIndexesArray.map(\n    (index) => deriveDriftSpotMarket(index)[0]\n  );\n\n  // Fetch missing markets\n  const missingMarketsAccounts = missingMarketKeys.length\n    ? await connection.getMultipleAccountsInfo(missingMarketKeys)\n    : [];\n\n  // Any console error here should not be ignored and indicate something seriously wrong\n  const missingMarketsMap: Map<number, DriftSpotMarketRaw> = new Map([\n    // Include all existing spot markets\n    ...spotMarkets.map((market) => [market.marketIndex, market] as [number, DriftSpotMarketRaw]),\n    // Add newly fetched missing markets\n    ...missingMarketsAccounts\n      .map((account, idx) => {\n        const marketIndex = missingMarketIndexesArray[idx];\n\n        if (!marketIndex) {\n          console.error(\"Missing market index, for \", marketIndex);\n          return null;\n        }\n\n        if (!account) {\n          console.error(\"Missing market account, for \", missingMarketKeys[idx]?.toBase58());\n          return null;\n        } else {\n          const decodedMarket = decodeDriftSpotMarketData(account.data);\n          return [marketIndex, decodedMarket];\n        }\n      })\n      .filter((market): market is [number, DriftSpotMarketRaw] => market !== null),\n  ]);\n\n  // Formats the rewards by bank\n  const driftRewardsByBank = new Map(\n    userStatesWithRewards.map((userStateWithRewards) => {\n      const { userState, rewards } = userStateWithRewards;\n      const driftRewards: DriftRewards[] = [];\n      rewards.forEach((reward) => {\n        const marketIndex = reward.marketIndex;\n        const market = missingMarketsMap.get(marketIndex);\n        if (!market) {\n          console.error(\"Missing market, for \", marketIndex);\n        } else {\n          driftRewards.push({\n            oracle: market.oracle,\n            marketIndex,\n            spotMarket: deriveDriftSpotMarket(marketIndex)[0],\n            mint: market.mint,\n            spotPosition: reward,\n          });\n        }\n      });\n      return [userState.bankAddress.toBase58(), driftRewards];\n    })\n  );\n\n  return driftRewardsByBank;\n}\n\nexport async function getAllRequiredMarkets(\n  spotMarkets: DriftSpotMarket[],\n  driftUsers: DriftUser[],\n  connection: Connection\n): Promise<DriftSpotMarketRaw[]> {\n  const allKeys = driftUsers.map((user) =>\n    user.spotPositions.map((position) => position.marketIndex)\n  );\n\n  const allKeysFlattened = new Set(allKeys.flat());\n\n  const missingMarketIndexes = Array.from(allKeysFlattened).filter(\n    (index) => !spotMarkets.some((market) => market.marketIndex === index)\n  );\n\n  const missingMarketKeys = missingMarketIndexes.map((index) => deriveDriftSpotMarket(index)[0]);\n\n  const missingMarketsAccounts = missingMarketKeys.length\n    ? await connection.getMultipleAccountsInfo(missingMarketKeys)\n    : [];\n\n  // Use a Map internally to deduplicate by marketIndex\n  const allMarketsMap: Map<number, DriftSpotMarketRaw> = new Map([\n    // Include all existing spot markets\n    ...spotMarkets.map((market) => [market.marketIndex, market] as [number, DriftSpotMarketRaw]),\n    // Add newly fetched missing markets\n    ...missingMarketsAccounts\n      .map((account, idx) => {\n        const marketIndex = missingMarketIndexes[idx];\n\n        if (!marketIndex) {\n          console.error(\"Missing market index, for \", marketIndex);\n          return null;\n        }\n\n        if (!account) {\n          console.error(\"Missing market account, for \", missingMarketKeys[idx]?.toBase58());\n          return null;\n        } else {\n          const decodedMarket = decodeDriftSpotMarketData(account.data);\n          return [marketIndex, decodedMarket];\n        }\n      })\n      .filter((market): market is [number, DriftSpotMarketRaw] => market !== null),\n  ]);\n\n  return Array.from(allMarketsMap.values());\n}\n","import { AccountMeta, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { DRIFT_PROGRAM_ID } from \"./constants\";\n\n/**\n * Update Drift spot market cumulative interest\n * This instruction should be called periodically to update the cumulative interest\n * for a spot market based on current utilization and interest rates.\n */\nconst UPDATE_SPOT_MARKET_CUMULATIVE_INTEREST_DISCRIMINATOR = Buffer.from([\n  39, 166, 139, 243, 158, 165, 155, 225,\n]);\n\nexport const makeUpdateSpotMarketCumulativeInterestIx = (\n  state: PublicKey,\n  spotMarket: PublicKey,\n  oracle: PublicKey,\n  spotMarketVault: PublicKey\n): TransactionInstruction => {\n  const keys: AccountMeta[] = [\n    // state: read-only, not a signer\n    { pubkey: state, isSigner: false, isWritable: false },\n\n    // spotMarket: writable, not a signer (being updated)\n    { pubkey: spotMarket, isSigner: false, isWritable: true },\n\n    // oracle: read-only, not a signer\n    { pubkey: oracle, isSigner: false, isWritable: false },\n\n    // spotMarketVault: read-only, not a signer\n    { pubkey: spotMarketVault, isSigner: false, isWritable: false },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: DRIFT_PROGRAM_ID,\n    data: UPDATE_SPOT_MARKET_CUMULATIVE_INTEREST_DISCRIMINATOR,\n  });\n};\n\nconst driftInstructions = {\n  makeUpdateSpotMarketCumulativeInterestIx,\n};\n\nexport default driftInstructions;\n","import driftInstructions from \"../instructions\";\nimport { DriftSpotMarket } from \"../types\";\nimport { deriveDriftSpotMarketVault, deriveDriftState } from \"../utils\";\n\ntype MakeUpdateSpotMarketIxParams = {\n  spotMarket: DriftSpotMarket;\n};\n\nexport function makeUpdateSpotMarketIx({ spotMarket }: MakeUpdateSpotMarketIxParams) {\n  const spotMarketKey = spotMarket.pubkey;\n  const spotMarketOracle = spotMarket.oracle;\n  const driftState = deriveDriftState()[0];\n  const spotMarketVault = deriveDriftSpotMarketVault(spotMarket.marketIndex)[0];\n\n  return driftInstructions.makeUpdateSpotMarketCumulativeInterestIx(\n    driftState,\n    spotMarketKey,\n    spotMarketOracle,\n    spotMarketVault\n  );\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const JUP_LEND_PROGRAM_ID = new PublicKey(\"jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9\");\n\nexport const JUP_LIQUIDITY_PROGRAM_ID = new PublicKey(\n  \"jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC\"\n);\n\nexport const JUP_REWARDS_PROGRAM_ID = new PublicKey(\"jup7TthsMgcR9Y3L277b8Eo9uboVSmu1utkuXHNUKar\");\n","{\n  \"address\": \"jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9\",\n  \"metadata\": {\n    \"name\": \"lending\",\n    \"version\": \"0.1.4\",\n    \"spec\": \"0.1.0\",\n    \"description\": \"Created with Anchor\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"deposit\",\n      \"discriminator\": [242, 35, 198, 137, 82, 225, 242, 182],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"assets\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    },\n    {\n      \"name\": \"deposit_with_min_amount_out\",\n      \"discriminator\": [116, 144, 16, 97, 118, 109, 40, 119],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"assets\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_amount_out\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"init_lending\",\n      \"discriminator\": [156, 224, 67, 46, 89, 189, 157, 209],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"token_reserves_liquidity\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  102, 95, 116, 111, 107, 101, 110, 95, 109, 105, 110, 116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"mint\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"metadata_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [109, 101, 116, 97, 100, 97, 116, 97]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107,\n                  4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182,\n                  209, 188, 3, 248, 41, 70\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"f_token_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4,\n                195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209,\n                188, 3, 248, 41, 70\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [108, 101, 110, 100, 105, 110, 103]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"mint\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"f_token_mint\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_reserves_liquidity\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"sysvar_instruction\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"metadata_program\",\n          \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n        },\n        {\n          \"name\": \"rent\",\n          \"address\": \"SysvarRent111111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"init_lending_admin\",\n      \"discriminator\": [203, 185, 241, 165, 56, 254, 33, 9],\n      \"accounts\": [\n        {\n          \"name\": \"authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  108, 101, 110, 100, 105, 110, 103, 95, 97, 100, 109, 105, 110\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_program\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"rebalancer\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"authority\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"mint\",\n      \"discriminator\": [51, 57, 225, 47, 182, 146, 137, 166],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    },\n    {\n      \"name\": \"mint_with_max_assets\",\n      \"discriminator\": [6, 94, 69, 122, 30, 179, 146, 171],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_assets\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    },\n    {\n      \"name\": \"rebalance\",\n      \"discriminator\": [108, 158, 77, 9, 210, 52, 88, 62],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"signer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"rebalance_with_amounts\",\n      \"discriminator\": [190, 33, 144, 182, 86, 4, 141, 73],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"depositor_token_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"signer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n                13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n                219, 233, 248, 89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"redeem\",\n      \"discriminator\": [184, 12, 86, 149, 70, 196, 97, 225],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    },\n    {\n      \"name\": \"redeem_with_min_amount_out\",\n      \"discriminator\": [235, 189, 237, 56, 166, 180, 184, 149],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_amount_out\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"set_rewards_rate_model\",\n      \"discriminator\": [174, 231, 116, 203, 8, 58, 143, 203],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"new_rewards_rate_model\"\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mint\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_authority\",\n      \"discriminator\": [32, 46, 64, 28, 149, 75, 243, 88],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_authority\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_auths\",\n      \"discriminator\": [93, 96, 178, 156, 57, 117, 253, 209],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"auth_status\",\n          \"type\": {\n            \"vec\": {\n              \"defined\": {\n                \"name\": \"AddressBool\"\n              }\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_rate\",\n      \"discriminator\": [24, 225, 53, 189, 72, 212, 225, 178],\n      \"accounts\": [\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"supply_token_reserves_liquidity\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\"\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_rebalancer\",\n      \"discriminator\": [206, 187, 54, 228, 145, 8, 203, 111],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_admin\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_rebalancer\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw\",\n      \"discriminator\": [183, 18, 70, 156, 148, 109, 161, 34],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    },\n    {\n      \"name\": \"withdraw_with_max_shares_burn\",\n      \"discriminator\": [47, 197, 183, 171, 239, 18, 245, 171],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"recipient_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_admin\"\n        },\n        {\n          \"name\": \"lending\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\",\n          \"relations\": [\"lending\", \"rewards_rate_model\"]\n        },\n        {\n          \"name\": \"f_token_mint\",\n          \"writable\": true,\n          \"relations\": [\"lending\"]\n        },\n        {\n          \"name\": \"supply_token_reserves_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_supply_position_on_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rate_model\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"claim_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"liquidity_program\",\n          \"relations\": [\"lending_admin\"]\n        },\n        {\n          \"name\": \"rewards_rate_model\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"optional\": true,\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_shares_burn\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": \"u64\"\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"Lending\",\n      \"discriminator\": [135, 199, 82, 16, 249, 131, 182, 241]\n    },\n    {\n      \"name\": \"LendingAdmin\",\n      \"discriminator\": [42, 8, 33, 220, 163, 40, 210, 5]\n    },\n    {\n      \"name\": \"LendingRewardsRateModel\",\n      \"discriminator\": [166, 72, 71, 131, 172, 74, 166, 181]\n    },\n    {\n      \"name\": \"TokenReserve\",\n      \"discriminator\": [21, 18, 59, 135, 120, 20, 31, 12]\n    },\n    {\n      \"name\": \"UserSupplyPosition\",\n      \"discriminator\": [202, 219, 136, 118, 61, 177, 21, 146]\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"LogDeposit\",\n      \"discriminator\": [176, 243, 1, 56, 142, 206, 1, 106]\n    },\n    {\n      \"name\": \"LogRebalance\",\n      \"discriminator\": [90, 67, 219, 41, 181, 118, 132, 9]\n    },\n    {\n      \"name\": \"LogUpdateAuthority\",\n      \"discriminator\": [150, 152, 157, 143, 6, 135, 193, 101]\n    },\n    {\n      \"name\": \"LogUpdateAuths\",\n      \"discriminator\": [88, 80, 109, 48, 111, 203, 76, 251]\n    },\n    {\n      \"name\": \"LogUpdateRates\",\n      \"discriminator\": [222, 11, 113, 60, 147, 15, 68, 217]\n    },\n    {\n      \"name\": \"LogUpdateRebalancer\",\n      \"discriminator\": [66, 79, 144, 204, 26, 217, 153, 225]\n    },\n    {\n      \"name\": \"LogUpdateRewards\",\n      \"discriminator\": [37, 13, 111, 186, 47, 245, 162, 121]\n    },\n    {\n      \"name\": \"LogWithdraw\",\n      \"discriminator\": [49, 9, 176, 179, 222, 190, 6, 117]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"FTokenDepositInsignificant\",\n      \"msg\": \"F_TOKEN_DEPOSIT_INSIGNIFICANT\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"FTokenMinAmountOut\",\n      \"msg\": \"F_TOKEN_MIN_AMOUNT_OUT\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"FTokenMaxAmount\",\n      \"msg\": \"F_TOKEN_MAX_AMOUNT\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"FTokenInvalidParams\",\n      \"msg\": \"F_TOKEN_INVALID_PARAMS\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"FTokenRewardsRateModelAlreadySet\",\n      \"msg\": \"F_TOKEN_REWARDS_RATE_MODEL_ALREADY_SET\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"FTokenMaxAuthCountReached\",\n      \"msg\": \"F_TOKEN_MAX_AUTH_COUNT\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"FTokenLiquidityExchangePriceUnexpected\",\n      \"msg\": \"F_TOKEN_LIQUIDITY_EXCHANGE_PRICE_UNEXPECTED\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"FTokenCpiToLiquidityFailed\",\n      \"msg\": \"F_TOKEN_CPI_TO_LIQUIDITY_FAILED\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"FTokenOnlyAuth\",\n      \"msg\": \"F_TOKEN_ONLY_AUTH\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"FTokenOnlyAuthority\",\n      \"msg\": \"F_TOKEN_ONLY_AUTHORITY\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"FTokenOnlyRebalancer\",\n      \"msg\": \"F_TOKEN_ONLY_REBALANCER\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"FTokenUserSupplyPositionRequired\",\n      \"msg\": \"F_TOKEN_USER_SUPPLY_POSITION_REQUIRED\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"FTokenLiquidityProgramMismatch\",\n      \"msg\": \"F_TOKEN_LIQUIDITY_PROGRAM_MISMATCH\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"AddressBool\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"addr\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"value\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Lending\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"f_token_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lending_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"decimals\",\n            \"docs\": [\"@dev number of decimals for the fToken, same as ASSET\"],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"rewards_rate_model\",\n            \"docs\": [\n              \"@dev To read PDA of rewards rate model to get_rate instruction\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_exchange_price\",\n            \"docs\": [\n              \"@dev exchange price for the underlying asset in the liquidity protocol (without rewards)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"token_exchange_price\",\n            \"docs\": [\n              \"@dev exchange price between fToken and the underlying asset (with rewards)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update_timestamp\",\n            \"docs\": [\n              \"@dev timestamp when exchange prices were updated the last time\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"token_reserves_liquidity\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"supply_position_on_liquidity\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingAdmin\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity_program\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"rebalancer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"next_lending_id\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"auths\",\n            \"type\": {\n              \"vec\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingRewardsRateModel\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"docs\": [\"@dev mint address\"],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"start_tvl\",\n            \"docs\": [\n              \"@dev tvl below which rewards rate is 0. If current TVL is below this value, triggering `update_rate()` on the fToken\",\n              \"might bring the total TVL above this cut-off.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"duration\",\n            \"docs\": [\"@dev for how long current rewards should run\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"start_time\",\n            \"docs\": [\"@dev when current rewards got started\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"yearly_reward\",\n            \"docs\": [\n              \"@dev current annualized reward based on input params (duration, rewardAmount)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_duration\",\n            \"docs\": [\"@dev Duration for the next rewards phase\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"next_reward_amount\",\n            \"docs\": [\"@dev Amount of rewards for the next phase\"],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogDeposit\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"sender\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"receiver\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"shares_minted\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogRebalance\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"assets\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogUpdateAuthority\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"new_authority\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogUpdateAuths\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"auth_status\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"AddressBool\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogUpdateRates\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"token_exchange_price\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"liquidity_exchange_price\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogUpdateRebalancer\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"new_rebalancer\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogUpdateRewards\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"rewards_rate_model\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LogWithdraw\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"sender\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"receiver\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"shares_burned\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"TokenReserve\",\n      \"docs\": [\"Token configuration and exchange prices\"],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\",\n        \"packed\": true\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"borrow_rate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"fee_on_interest\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"last_utilization\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"last_update_timestamp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"supply_exchange_price\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_exchange_price\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_utilization\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"total_supply_with_interest\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_supply_interest_free\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_borrow_with_interest\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_borrow_interest_free\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_claim_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"interacting_protocol\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"interacting_timestamp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"interacting_balance\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserSupplyPosition\",\n      \"docs\": [\"User supply position\"],\n      \"serialization\": \"bytemuck\",\n      \"repr\": {\n        \"kind\": \"c\",\n        \"packed\": true\n      },\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"protocol\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"with_interest\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"withdrawal_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"decay_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"expand_pct\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"expand_duration\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"decay_duration\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"base_withdrawal_limit\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"status\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    }\n  ]\n}\n","import { JupLend } from \"./jup-lend\";\nimport { Liquidity } from \"./jup-lend-liquidity\";\nimport JUP_LIQUIDITY_IDL_JSON from \"./jup-lend-liquidity.json\";\nimport JUP_LEND_IDL_JSON from \"./jup-lend.json\";\n\nexport const JUP_LEND_IDL = JUP_LEND_IDL_JSON as unknown as JupLend;\nexport type JupLendIdlType = JupLend;\n\nexport const JUP_LIQUIDITY_IDL = JUP_LIQUIDITY_IDL_JSON as unknown as Liquidity;\nexport type JupLiquidityIdlType = Liquidity;\n","import {\n  JupLendingState,\n  JupLendingStateJSON,\n  JupLendingRewardsRateModel,\n  JupLendingRewardsRateModelJSON,\n  JupTokenReserve,\n  JupTokenReserveJSON,\n  JupRateModel,\n  JupRateModelJSON,\n} from \"../types\";\n\n// ============================================================================\n// RAW → DTO CONVERTERS\n// ============================================================================\n\nexport function jupLendingStateRawToDto(raw: JupLendingState): JupLendingStateJSON {\n  return {\n    pubkey: raw.pubkey.toBase58(),\n    mint: raw.mint.toBase58(),\n    fTokenMint: raw.fTokenMint.toBase58(),\n    lendingId: raw.lendingId,\n    decimals: raw.decimals,\n    rewardsRateModel: raw.rewardsRateModel.toBase58(),\n    liquidityExchangePrice: raw.liquidityExchangePrice.toString(),\n    tokenExchangePrice: raw.tokenExchangePrice.toString(),\n    lastUpdateTimestamp: raw.lastUpdateTimestamp.toString(),\n    tokenReservesLiquidity: raw.tokenReservesLiquidity.toBase58(),\n    supplyPositionOnLiquidity: raw.supplyPositionOnLiquidity.toBase58(),\n  };\n}\n\nexport function jupTokenReserveRawToDto(raw: JupTokenReserve): JupTokenReserveJSON {\n  return {\n    pubkey: raw.pubkey.toBase58(),\n    borrowRate: raw.borrowRate,\n    feeOnInterest: raw.feeOnInterest,\n    lastUtilization: raw.lastUtilization,\n    supplyExchangePrice: raw.supplyExchangePrice.toString(),\n    borrowExchangePrice: raw.borrowExchangePrice.toString(),\n    totalSupplyWithInterest: raw.totalSupplyWithInterest.toString(),\n    totalSupplyInterestFree: raw.totalSupplyInterestFree.toString(),\n    totalBorrowWithInterest: raw.totalBorrowWithInterest.toString(),\n    totalBorrowInterestFree: raw.totalBorrowInterestFree.toString(),\n  };\n}\n\nexport function jupLendingRewardsRateModelRawToDto(\n  raw: JupLendingRewardsRateModel\n): JupLendingRewardsRateModelJSON {\n  return {\n    startTvl: raw.startTvl.toString(),\n    duration: raw.duration.toString(),\n    startTime: raw.startTime.toString(),\n    yearlyReward: raw.yearlyReward.toString(),\n  };\n}\n\nexport function jupRateModelRawToDto(raw: JupRateModel): JupRateModelJSON {\n  return {\n    version: raw.version,\n    rateAtZero: raw.rateAtZero,\n    kink1Utilization: raw.kink1Utilization,\n    rateAtKink1: raw.rateAtKink1,\n    rateAtMax: raw.rateAtMax,\n    kink2Utilization: raw.kink2Utilization,\n    rateAtKink2: raw.rateAtKink2,\n  };\n}\n","import { BorshAccountsCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { JUP_LEND_IDL } from \"../idl\";\nimport {\n  JupLendingState,\n  JupLendingStateRaw,\n  JupLendingStateJSON,\n  JupLendingRewardsRateModel,\n  JupLendingRewardsRateModelRaw,\n  JupLendingRewardsRateModelJSON,\n  JupTokenReserve,\n  JupTokenReserveRaw,\n  JupTokenReserveJSON,\n  JupRateModel,\n  JupRateModelRaw,\n  JupRateModelJSON,\n} from \"../types\";\n\nconst JUP_LEND_ACCOUNTS_CODER = new BorshAccountsCoder(JUP_LEND_IDL);\n\nconst lendingDiscriminator = Buffer.from([135, 199, 82, 16, 249, 131, 182, 241]);\nconst lendingRewardsRateModelDiscriminator = Buffer.from([166, 72, 71, 131, 172, 74, 166, 181]);\nconst rateModelDiscriminator = Buffer.from([94, 3, 203, 219, 107, 137, 4, 162]);\n\n// ============================================================================\n// BUFFER → RAW DECODERS\n// ============================================================================\n\nexport function decodeJupLendingStateData(data: Buffer, pubkey: PublicKey): JupLendingStateRaw {\n  if (!data.slice(0, 8).equals(lendingDiscriminator)) {\n    throw new Error(\"invalid Lending account discriminator\");\n  }\n\n  const decoded = JUP_LEND_ACCOUNTS_CODER.decode(\"Lending\", data);\n\n  return {\n    pubkey,\n    mint: decoded.mint,\n    fTokenMint: decoded.f_token_mint ?? decoded.fTokenMint,\n    lendingId: decoded.lending_id ?? decoded.lendingId,\n    decimals: decoded.decimals,\n    rewardsRateModel: decoded.rewards_rate_model ?? decoded.rewardsRateModel,\n    liquidityExchangePrice: decoded.liquidity_exchange_price ?? decoded.liquidityExchangePrice,\n    tokenExchangePrice: decoded.token_exchange_price ?? decoded.tokenExchangePrice,\n    lastUpdateTimestamp: decoded.last_update_timestamp ?? decoded.lastUpdateTimestamp,\n    tokenReservesLiquidity: decoded.token_reserves_liquidity ?? decoded.tokenReservesLiquidity,\n    supplyPositionOnLiquidity:\n      decoded.supply_position_on_liquidity ?? decoded.supplyPositionOnLiquidity,\n    bump: decoded.bump,\n  };\n}\n\nexport function decodeJupLendingRewardsRateModelData(\n  data: Buffer,\n  pubkey: PublicKey\n): JupLendingRewardsRateModelRaw {\n  if (!data.slice(0, 8).equals(lendingRewardsRateModelDiscriminator)) {\n    throw new Error(\"invalid LendingRewardsRateModel account discriminator\");\n  }\n\n  const decoded = JUP_LEND_ACCOUNTS_CODER.decode(\"LendingRewardsRateModel\", data);\n\n  return {\n    pubkey,\n    mint: decoded.mint,\n    startTvl: decoded.start_tvl ?? decoded.startTvl,\n    duration: decoded.duration,\n    startTime: decoded.start_time ?? decoded.startTime,\n    yearlyReward: decoded.yearly_reward ?? decoded.yearlyReward,\n    nextDuration: decoded.next_duration ?? decoded.nextDuration,\n    nextRewardAmount: decoded.next_reward_amount ?? decoded.nextRewardAmount,\n    bump: decoded.bump,\n  };\n}\n\n/**\n * Decode a TokenReserve account from raw buffer data.\n * TokenReserve uses bytemuck (packed C repr) — manual fixed-offset reads.\n * Layout (after 8-byte discriminator):\n *   mint[32] vault[32] borrow_rate[2] fee_on_interest[2] last_utilization[2]\n *   last_update_timestamp[8] supply_exchange_price[8] borrow_exchange_price[8]\n *   max_utilization[2] total_supply_with_interest[8] total_supply_interest_free[8]\n *   total_borrow_with_interest[8] total_borrow_interest_free[8] total_claim_amount[8]\n *   interacting_protocol[32] interacting_timestamp[8] interacting_balance[8]\n */\nexport function decodeJupTokenReserveData(data: Buffer, pubkey: PublicKey): JupTokenReserveRaw {\n  let offset = 8; // skip 8-byte discriminator\n\n  const mint = new PublicKey(data.slice(offset, offset + 32));\n  offset += 32;\n  const vault = new PublicKey(data.slice(offset, offset + 32));\n  offset += 32;\n  const borrowRate = data.readUInt16LE(offset);\n  offset += 2;\n  const feeOnInterest = data.readUInt16LE(offset);\n  offset += 2;\n  const lastUtilization = data.readUInt16LE(offset);\n  offset += 2;\n  const lastUpdateTimestamp = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const supplyExchangePrice = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const borrowExchangePrice = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const maxUtilization = data.readUInt16LE(offset);\n  offset += 2;\n  const totalSupplyWithInterest = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const totalSupplyInterestFree = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const totalBorrowWithInterest = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const totalBorrowInterestFree = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const totalClaimAmount = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const interactingProtocol = new PublicKey(data.slice(offset, offset + 32));\n  offset += 32;\n  const interactingTimestamp = new BN(data.slice(offset, offset + 8), \"le\");\n  offset += 8;\n  const interactingBalance = new BN(data.slice(offset, offset + 8), \"le\");\n\n  return {\n    pubkey,\n    mint,\n    vault,\n    borrowRate,\n    feeOnInterest,\n    lastUtilization,\n    lastUpdateTimestamp,\n    supplyExchangePrice,\n    borrowExchangePrice,\n    maxUtilization,\n    totalSupplyWithInterest,\n    totalSupplyInterestFree,\n    totalBorrowWithInterest,\n    totalBorrowInterestFree,\n    totalClaimAmount,\n    interactingProtocol,\n    interactingTimestamp,\n    interactingBalance,\n  };\n}\n\n/**\n * Decode a RateModel account from raw buffer data.\n * RateModel uses bytemuck (packed C repr) — manual fixed-offset reads.\n * Layout (after 8-byte discriminator):\n *   mint[32] version[1] rate_at_zero[2] kink1_utilization[2]\n *   rate_at_kink1[2] rate_at_max[2] kink2_utilization[2] rate_at_kink2[2]\n */\nexport function decodeJupRateModelData(data: Buffer, pubkey: PublicKey): JupRateModelRaw {\n  if (!data.slice(0, 8).equals(rateModelDiscriminator)) {\n    throw new Error(\"invalid RateModel account discriminator\");\n  }\n\n  let offset = 8; // skip 8-byte discriminator\n\n  const mint = new PublicKey(data.slice(offset, offset + 32));\n  offset += 32;\n  const version = data.readUInt8(offset);\n  offset += 1;\n  const rateAtZero = data.readUInt16LE(offset);\n  offset += 2;\n  const kink1Utilization = data.readUInt16LE(offset);\n  offset += 2;\n  const rateAtKink1 = data.readUInt16LE(offset);\n  offset += 2;\n  const rateAtMax = data.readUInt16LE(offset);\n  offset += 2;\n  const kink2Utilization = data.readUInt16LE(offset);\n  offset += 2;\n  const rateAtKink2 = data.readUInt16LE(offset);\n\n  return {\n    pubkey,\n    mint,\n    version,\n    rateAtZero,\n    kink1Utilization,\n    rateAtKink1,\n    rateAtMax,\n    kink2Utilization,\n    rateAtKink2,\n  };\n}\n\n// ============================================================================\n// DTO → RAW CONVERTERS\n// ============================================================================\n\nexport function dtoToJupLendingStateRaw(dto: JupLendingStateJSON): JupLendingState {\n  return {\n    pubkey: new PublicKey(dto.pubkey),\n    mint: new PublicKey(dto.mint),\n    fTokenMint: new PublicKey(dto.fTokenMint),\n    lendingId: dto.lendingId,\n    decimals: dto.decimals,\n    rewardsRateModel: new PublicKey(dto.rewardsRateModel),\n    liquidityExchangePrice: new BN(dto.liquidityExchangePrice),\n    tokenExchangePrice: new BN(dto.tokenExchangePrice),\n    lastUpdateTimestamp: new BN(dto.lastUpdateTimestamp),\n    tokenReservesLiquidity: new PublicKey(dto.tokenReservesLiquidity),\n    supplyPositionOnLiquidity: new PublicKey(dto.supplyPositionOnLiquidity),\n  };\n}\n\nexport function dtoToJupTokenReserveRaw(dto: JupTokenReserveJSON): JupTokenReserve {\n  return {\n    pubkey: new PublicKey(dto.pubkey),\n    borrowRate: dto.borrowRate,\n    feeOnInterest: dto.feeOnInterest,\n    lastUtilization: dto.lastUtilization,\n    supplyExchangePrice: new BN(dto.supplyExchangePrice),\n    borrowExchangePrice: new BN(dto.borrowExchangePrice),\n    totalSupplyWithInterest: new BN(dto.totalSupplyWithInterest),\n    totalSupplyInterestFree: new BN(dto.totalSupplyInterestFree),\n    totalBorrowWithInterest: new BN(dto.totalBorrowWithInterest),\n    totalBorrowInterestFree: new BN(dto.totalBorrowInterestFree),\n  };\n}\n\nexport function dtoToJupLendingRewardsRateModelRaw(\n  dto: JupLendingRewardsRateModelJSON\n): JupLendingRewardsRateModel {\n  return {\n    startTvl: new BN(dto.startTvl),\n    duration: new BN(dto.duration),\n    startTime: new BN(dto.startTime),\n    yearlyReward: new BN(dto.yearlyReward),\n  };\n}\n\nexport function dtoToJupRateModelRaw(dto: JupRateModelJSON): JupRateModel {\n  return {\n    version: dto.version,\n    rateAtZero: dto.rateAtZero,\n    kink1Utilization: dto.kink1Utilization,\n    rateAtKink1: dto.rateAtKink1,\n    rateAtMax: dto.rateAtMax,\n    kink2Utilization: dto.kink2Utilization,\n    rateAtKink2: dto.rateAtKink2,\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport {\n  JUP_LEND_PROGRAM_ID,\n  JUP_LIQUIDITY_PROGRAM_ID,\n  JUP_REWARDS_PROGRAM_ID,\n} from \"../constants\";\n\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n  TOKEN_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\n// Lending Program Seeds\nexport const SEED_LENDING_ADMIN = \"lending_admin\";\nexport const SEED_F_TOKEN_MINT = \"f_token_mint\";\nexport const SEED_LENDING = \"lending\";\n\n// Liquidity Program Seeds\nexport const SEED_LIQUIDITY = \"liquidity\";\nexport const SEED_RESERVE = \"reserve\";\nexport const SEED_RATE_MODEL = \"rate_model\";\nexport const SEED_USER_SUPPLY_POSITION = \"user_supply_position\";\nexport const SEED_USER_CLAIM = \"user_claim\";\n\n// Rewards Program Seeds\nexport const SEED_LENDING_REWARDS_RATE_MODEL = \"lending_rewards_rate_model\";\n\nexport function getAllDerivedJupLendAccounts(mint: PublicKey, tokenProgram?: PublicKey) {\n  const [fTokenMint] = deriveJupLendFTokenMint(mint);\n  const [lending] = deriveJupLendLending(mint, fTokenMint);\n  const [liquidity] = deriveJupLendLiquidity();\n\n  return {\n    fTokenMint,\n    lendingAdmin: deriveJupLendLendingAdmin()[0],\n    supplyTokenReservesLiquidity: deriveJupLendTokenReserve(mint)[0],\n    lendingSupplyPositionOnLiquidity: deriveJupLendLiquiditySupplyPositionPda(mint, lending)[0],\n    rateModel: deriveJupLendRateModel(mint)[0],\n    vault: deriveJupLendLiquidityVaultAta(mint, liquidity, tokenProgram),\n    liquidity: liquidity,\n    rewardsRateModel: deriveJupLendLendingRewardsRateModel(mint)[0],\n  };\n}\n\n// ============================================================================\n// LENDING PROGRAM PDAs\n// ============================================================================\n\nexport function deriveJupLendLendingPdas(\n  underlyingMint: PublicKey,\n  lendingProgramId: PublicKey = JUP_LEND_PROGRAM_ID\n): {\n  lendingAdmin: PublicKey;\n  lendingAdminBump: number;\n  fTokenMint: PublicKey;\n  fTokenMintBump: number;\n  lending: PublicKey;\n  lendingBump: number;\n} {\n  const [lendingAdmin, lendingAdminBump] = deriveJupLendLendingAdmin(lendingProgramId);\n  const [fTokenMint, fTokenMintBump] = deriveJupLendFTokenMint(underlyingMint, lendingProgramId);\n  const [lending, lendingBump] = deriveJupLendLending(underlyingMint, fTokenMint, lendingProgramId);\n\n  return {\n    lendingAdmin,\n    lendingAdminBump,\n    fTokenMint,\n    fTokenMintBump,\n    lending,\n    lendingBump,\n  };\n}\n\n/**\n * Derive the fToken mint PDA for a given asset.\n * Seeds: [\"f_token_mint\", asset]\n */\nexport function deriveJupLendFTokenMint(\n  asset: PublicKey,\n  lendingProgramId: PublicKey = JUP_LEND_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_F_TOKEN_MINT), asset.toBuffer()],\n    lendingProgramId\n  );\n}\n\n/**\n * Derive the Lending state PDA for a given asset.\n * Seeds: [\"lending\", asset, fTokenMint]\n */\nexport function deriveJupLendLending(\n  asset: PublicKey,\n  fTokenMint?: PublicKey,\n  lendingProgramId: PublicKey = JUP_LEND_PROGRAM_ID\n): [PublicKey, number] {\n  const [_fTokenMint] = fTokenMint\n    ? [fTokenMint]\n    : deriveJupLendFTokenMint(asset, lendingProgramId);\n\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_LENDING), asset.toBuffer(), _fTokenMint.toBuffer()],\n    lendingProgramId\n  );\n}\n\n/**\n * Derive the LendingAdmin PDA (singleton).\n * Seeds: [\"lending_admin\"]\n */\nexport function deriveJupLendLendingAdmin(\n  lendingProgramId: PublicKey = JUP_LEND_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([Buffer.from(SEED_LENDING_ADMIN)], lendingProgramId);\n}\n\n// ============================================================================\n// REWARDS PROGRAM PDAs\n// ============================================================================\n\n/**\n * Derive the LendingRewardsRateModel PDA for a given asset.\n * Seeds: [\"lending_rewards_rate_model\", asset]\n * Note: This PDA lives on the rewards program, not the lending program.\n */\nexport function deriveJupLendLendingRewardsRateModel(\n  asset: PublicKey,\n  rewardsProgramId: PublicKey = JUP_REWARDS_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_LENDING_REWARDS_RATE_MODEL), asset.toBuffer()],\n    rewardsProgramId\n  );\n}\n\n// ============================================================================\n// LIQUIDITY PROGRAM PDAs\n// ============================================================================\n\n/**\n * Derive the TokenReserve PDA for a given asset on the liquidity layer.\n * Seeds: [\"reserve\", asset]\n */\nexport function deriveJupLendTokenReserve(\n  asset: PublicKey,\n  liquidityProgramId: PublicKey = JUP_LIQUIDITY_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_RESERVE), asset.toBuffer()],\n    liquidityProgramId\n  );\n}\n\nexport function deriveJupLendLiquidityVaultAta(\n  underlyingMint: PublicKey,\n  liquidityPda: PublicKey,\n  tokenProgramId: PublicKey = TOKEN_PROGRAM_ID\n): PublicKey {\n  return getAssociatedTokenAddressSync(\n    underlyingMint,\n    liquidityPda,\n    true,\n    tokenProgramId,\n    ASSOCIATED_TOKEN_PROGRAM_ID\n  );\n}\n\n/**\n * Derive the interest rate model PDA for a given asset on the liquidity layer.\n * Seeds: [\"rate_model\", asset]\n */\nexport function deriveJupLendRateModel(\n  asset: PublicKey,\n  liquidityProgramId: PublicKey = JUP_LIQUIDITY_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_RATE_MODEL), asset.toBuffer()],\n    liquidityProgramId\n  );\n}\n\n/**\n * Derive the global Liquidity state PDA (singleton).\n * Seeds: [\"liquidity\"]\n */\nexport function deriveJupLendLiquidity(\n  liquidityProgramId: PublicKey = JUP_LIQUIDITY_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync([Buffer.from(SEED_LIQUIDITY)], liquidityProgramId);\n}\n\n/**\n * Derive the claim account PDA for a given owner and mint on the liquidity program.\n * Seeds: [\"user_claim\", owner, mint]\n */\nexport function deriveJupLendClaimAccount(\n  owner: PublicKey,\n  mint: PublicKey,\n  liquidityProgramId: PublicKey = JUP_LIQUIDITY_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_USER_CLAIM), owner.toBuffer(), mint.toBuffer()],\n    liquidityProgramId\n  );\n}\n\nexport function deriveJupLendLiquiditySupplyPositionPda(\n  underlyingMint: PublicKey,\n  lendingPda: PublicKey,\n  liquidityProgramId: PublicKey = JUP_LIQUIDITY_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_USER_SUPPLY_POSITION), underlyingMint.toBuffer(), lendingPda.toBuffer()],\n    liquidityProgramId\n  );\n}\n","import BN from \"bn.js\";\n\nimport {\n  JupLendingState,\n  JupLendingRewardsRateModel,\n  JupTokenReserve,\n  JupRateModel,\n} from \"../types\";\n\nimport { aprToApy } from \"~/utils\";\n\n/**\n * Jup-Lend Interest Rate & Exchange Price Utilities\n *\n * Extracted from the compiled @jup-ag/lend SDK (earn/index.mjs).\n * All functions work on pre-fetched state — no RPC calls.\n */\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nexport const JUP_EXCHANGE_PRICES_PRECISION = new BN(\"1000000000000\"); // 1e12\nexport const JUP_SECONDS_PER_YEAR = new BN(31_536_000);\nexport const JUP_MAX_REWARDS_RATE = new BN(\"50000000000000\"); // 50 * 1e12 = 50%\n\n// ============================================================================\n// TOTAL ASSETS\n// ============================================================================\n\n/**\n * Calculate total assets for a jup-lend market.\n * Formula: tokenExchangePrice * fTokenTotalSupply / EXCHANGE_PRICES_PRECISION\n *\n * @param lendingState - The on-chain Lending account\n * @param fTokenTotalSupply - Total supply of the fToken (from getTokenSupply)\n * @returns Total assets as BN in underlying token lamports\n */\nexport function calculateJupLendTotalAssets(\n  lendingState: JupLendingState,\n  fTokenTotalSupply: BN\n): BN {\n  return lendingState.tokenExchangePrice.mul(fTokenTotalSupply).div(JUP_EXCHANGE_PRICES_PRECISION);\n}\n\n// ============================================================================\n// REWARDS RATE\n// ============================================================================\n\nexport interface JupLendRewardsResult {\n  rewardsRate: BN;\n  rewardsEnded: boolean;\n  rewardsStartTime: BN;\n}\n\n/**\n * Calculate the rewards rate from a LendingRewardsRateModel.\n * Extracted from compiled SDK's `calculateRewardsRate`.\n *\n * @param rewardsModel - The on-chain LendingRewardsRateModel account\n * @param totalAssets - Total assets in the market (from calculateJupLendTotalAssets)\n * @param currentTimestamp - Current unix timestamp (seconds)\n * @returns Rewards rate, whether rewards ended, and start time\n */\nexport function calculateJupLendRewardsRate(\n  rewardsModel: JupLendingRewardsRateModel,\n  totalAssets: BN,\n  currentTimestamp: BN\n): JupLendRewardsResult {\n  const defaultResult: JupLendRewardsResult = {\n    rewardsRate: new BN(0),\n    rewardsEnded: false,\n    rewardsStartTime: rewardsModel.startTime,\n  };\n\n  if (rewardsModel.startTime.isZero() || rewardsModel.duration.isZero()) {\n    return defaultResult;\n  }\n\n  if (currentTimestamp.gt(rewardsModel.startTime.add(rewardsModel.duration))) {\n    return { ...defaultResult, rewardsEnded: true };\n  }\n\n  if (totalAssets.lt(rewardsModel.startTvl)) {\n    return defaultResult;\n  }\n\n  let rewardsRate = rewardsModel.yearlyReward.mul(new BN(1e4)).div(totalAssets);\n\n  if (rewardsRate.gt(JUP_MAX_REWARDS_RATE)) {\n    rewardsRate = JUP_MAX_REWARDS_RATE;\n  }\n\n  return {\n    rewardsRate,\n    rewardsEnded: false,\n    rewardsStartTime: rewardsModel.startTime,\n  };\n}\n\n// ============================================================================\n// REWARDS RATE FOR EXCHANGE PRICE (1e12 precision)\n// ============================================================================\n\n/**\n * Calculate the rewards rate at 1e12 precision for use in exchange price projection.\n * Mirrors SDK's `getRewardsRate` (earn/index.mjs line 261), NOT `calculateRewardsRate`.\n *\n * This is distinct from `calculateJupLendRewardsRate` which uses 1e4 precision for APR display.\n *\n * @param rewardsModel - The on-chain LendingRewardsRateModel account\n * @param totalAssets - Total assets in the market (from calculateJupLendTotalAssets)\n * @param currentTimestamp - Current unix timestamp (seconds)\n * @returns Rate at 1e12 precision and rewards start time\n */\nexport function calculateJupLendRewardsRateForExchangePrice(\n  rewardsModel: JupLendingRewardsRateModel,\n  totalAssets: BN,\n  currentTimestamp: BN\n): { rate: BN; rewardsStartTime: BN } {\n  const defaultResult = { rate: new BN(0), rewardsStartTime: rewardsModel.startTime };\n\n  if (rewardsModel.startTime.isZero() || rewardsModel.duration.isZero()) {\n    return defaultResult;\n  }\n\n  if (currentTimestamp.gt(rewardsModel.startTime.add(rewardsModel.duration))) {\n    return defaultResult;\n  }\n\n  if (totalAssets.lt(rewardsModel.startTvl)) {\n    return defaultResult;\n  }\n\n  let rate = rewardsModel.yearlyReward.mul(JUP_EXCHANGE_PRICES_PRECISION).div(totalAssets);\n\n  if (rate.gt(JUP_MAX_REWARDS_RATE)) {\n    rate = JUP_MAX_REWARDS_RATE;\n  }\n\n  return { rate, rewardsStartTime: rewardsModel.startTime };\n}\n\n// ============================================================================\n// EXCHANGE PRICE PROJECTION\n// ============================================================================\n\n/**\n * Project the new token exchange price offline (no RPC calls).\n * Extracted from compiled SDK's `getNewExchangePrice` (earn/index.mjs line 316).\n *\n * This combines:\n * 1. Rewards rate contribution (time-weighted, 1e12 precision via getRewardsRate)\n * 2. Liquidity exchange price delta (scaled to 1e14)\n *\n * Both components are accumulated in 1e14 space before being applied.\n *\n * @param lendingState - The on-chain Lending account\n * @param tokenReserve - The on-chain TokenReserve account (provides current supplyExchangePrice)\n * @param rewardsModel - The on-chain LendingRewardsRateModel (or null if no rewards)\n * @param fTokenTotalSupply - Total supply of the fToken (for totalAssets calculation)\n * @param currentTimestamp - Current unix timestamp (seconds)\n * @returns Projected token exchange price as BN (1e12 precision)\n */\nexport function calculateJupLendNewExchangePrice(\n  lendingState: JupLendingState,\n  tokenReserve: JupTokenReserve,\n  rewardsModel: JupLendingRewardsRateModel | null,\n  fTokenTotalSupply: BN,\n  currentTimestamp: BN\n): BN {\n  const oldTokenExchangePrice = lendingState.tokenExchangePrice;\n  const oldLiquidityExchangePrice = lendingState.liquidityExchangePrice;\n  const currentLiquidityExchangePrice = tokenReserve.supplyExchangePrice;\n\n  // Rewards component — must use 1e12-precision rate (mirrors SDK getRewardsRate, not calculateRewardsRate)\n  let rewardsRate = new BN(0);\n  let rewardsStartTime = lendingState.lastUpdateTimestamp;\n\n  if (rewardsModel) {\n    const totalAssets = calculateJupLendTotalAssets(lendingState, fTokenTotalSupply);\n    const result = calculateJupLendRewardsRateForExchangePrice(\n      rewardsModel,\n      totalAssets,\n      currentTimestamp\n    );\n    rewardsRate = result.rate;\n    rewardsStartTime = result.rewardsStartTime;\n  }\n\n  let lastUpdateTime = lendingState.lastUpdateTimestamp;\n  if (lastUpdateTime.lt(rewardsStartTime)) {\n    lastUpdateTime = rewardsStartTime;\n  }\n\n  const secondsElapsed = currentTimestamp.sub(lastUpdateTime);\n\n  // Rewards contribution: rate (1e12) * secondsElapsed / SECONDS_PER_YEAR → ~1e12 scale\n  // Scaled up to 1e14 to match the liquidity delta component\n  let totalReturnPercent = rewardsRate\n    .mul(secondsElapsed)\n    .div(JUP_SECONDS_PER_YEAR)\n    .mul(new BN(100)); // 1e12 → 1e14\n\n  // Liquidity exchange price delta contribution (1e14 precision)\n  const delta = currentLiquidityExchangePrice.sub(oldLiquidityExchangePrice);\n  totalReturnPercent = totalReturnPercent.add(\n    delta.mul(new BN(1e14)).div(oldLiquidityExchangePrice)\n  );\n\n  return oldTokenExchangePrice.add(oldTokenExchangePrice.mul(totalReturnPercent).div(new BN(1e14)));\n}\n\n// ============================================================================\n// LIQUIDITY SUPPLY RATE\n// ============================================================================\n\n/**\n * Calculate the liquidity layer supply rate for an asset.\n * Extracted from compiled SDK's `getLiquidityAssetSupplyRate`.\n *\n * Formula: borrowRate * (1 - fee) * borrowWithInterest / supplyWithInterest\n *\n * @param tokenReserve - The on-chain TokenReserve account\n * @returns Supply rate as BN (in bps-like precision from the liquidity layer)\n */\nexport function calculateJupLendLiquiditySupplyRate(tokenReserve: JupTokenReserve): BN {\n  const borrowRate = new BN(tokenReserve.borrowRate);\n  const fee = new BN(tokenReserve.feeOnInterest);\n\n  if (tokenReserve.totalSupplyWithInterest.isZero()) {\n    return new BN(0);\n  }\n\n  const borrowWithInterestForRate = tokenReserve.totalBorrowWithInterest\n    .mul(tokenReserve.borrowExchangePrice)\n    .div(JUP_EXCHANGE_PRICES_PRECISION);\n\n  const supplyWithInterestForRate = tokenReserve.totalSupplyWithInterest\n    .mul(tokenReserve.supplyExchangePrice)\n    .div(JUP_EXCHANGE_PRICES_PRECISION);\n\n  if (supplyWithInterestForRate.isZero()) {\n    return new BN(0);\n  }\n\n  return borrowRate\n    .mul(new BN(1e4).sub(fee))\n    .mul(borrowWithInterestForRate)\n    .div(supplyWithInterestForRate.mul(new BN(1e4)));\n}\n\n// ============================================================================\n// COMBINED SUPPLY RATE (APR)\n// ============================================================================\n\n/**\n * Calculate the total supply rate (APR) for a jup-lend market,\n * combining both base liquidity supply rate and rewards rate.\n *\n * Returns a number as a decimal (e.g. 0.05 = 5% APR).\n *\n * @param lendingState - The on-chain Lending account\n * @param tokenReserve - The on-chain TokenReserve account\n * @param rewardsModel - The on-chain LendingRewardsRateModel account (or null if no rewards)\n * @param fTokenTotalSupply - Total supply of the fToken\n * @returns Supply rate as decimal number\n */\nexport function calculateJupLendSupplyRate(\n  lendingState: JupLendingState,\n  tokenReserve: JupTokenReserve,\n  rewardsModel: JupLendingRewardsRateModel | null,\n  fTokenTotalSupply: BN\n): number {\n  const supplyRate = calculateJupLendLiquiditySupplyRate(tokenReserve);\n\n  // supplyRate is in bps (e.g. 500 = 5%)\n  let totalRateBps = supplyRate.toNumber();\n\n  if (rewardsModel) {\n    const totalAssets = calculateJupLendTotalAssets(lendingState, fTokenTotalSupply);\n    const currentTimestamp = new BN(Math.floor(Date.now() / 1000));\n    const { rewardsRate } = calculateJupLendRewardsRate(\n      rewardsModel,\n      totalAssets,\n      currentTimestamp\n    );\n    // rewardsRate is scaled by 1e4 relative to totalAssets\n    totalRateBps += rewardsRate.toNumber();\n  }\n\n  return totalRateBps / 10_000;\n}\n\n// ============================================================================\n// SUPPLY APY\n// ============================================================================\n\n/**\n * Calculate the supply APY for a jup-lend market (base rate only, no rewards).\n *\n * Uses hourly compounding: (1 + apr/HOURS_PER_YEAR)^HOURS_PER_YEAR - 1\n *\n * @param tokenReserve - The on-chain TokenReserve account\n * @returns Supply APY as decimal (e.g. 0.0512 = 5.12% APY)\n */\nexport function calculateJupLendSupplyAPY(tokenReserve: JupTokenReserve): number {\n  const supplyRateBps = calculateJupLendLiquiditySupplyRate(tokenReserve);\n  const apr = supplyRateBps.toNumber() / 1e4;\n  return aprToApy(apr);\n}\n\n// ============================================================================\n// BORROW RATE FROM RATE MODEL (PIECEWISE LINEAR)\n// ============================================================================\n\n/**\n * Calculate the borrow rate at a given utilization using the on-chain RateModel.\n *\n * V1 (version=1, single kink):\n *   [0, kink1] → linear rateAtZero → rateAtKink1\n *   [kink1, 10000] → linear rateAtKink1 → rateAtMax\n *\n * V2 (version=2, dual kink):\n *   [0, kink1] → linear rateAtZero → rateAtKink1\n *   [kink1, kink2] → linear rateAtKink1 → rateAtKink2\n *   [kink2, 10000] → linear rateAtKink2 → rateAtMax\n *\n * @param rateModel - The on-chain RateModel account\n * @param utilizationBps - Utilization in bps (0–10000)\n * @returns Borrow rate in bps\n */\nexport function calculateJupLendBorrowRate(\n  rateModel: JupRateModel,\n  utilizationBps: number\n): number {\n  const u = Math.max(0, Math.min(10000, utilizationBps));\n\n  if (rateModel.version === 2) {\n    // V2: dual kink\n    if (u <= rateModel.kink1Utilization) {\n      return linearInterpolate(\n        0,\n        rateModel.rateAtZero,\n        rateModel.kink1Utilization,\n        rateModel.rateAtKink1,\n        u\n      );\n    } else if (u <= rateModel.kink2Utilization) {\n      return linearInterpolate(\n        rateModel.kink1Utilization,\n        rateModel.rateAtKink1,\n        rateModel.kink2Utilization,\n        rateModel.rateAtKink2,\n        u\n      );\n    } else {\n      return linearInterpolate(\n        rateModel.kink2Utilization,\n        rateModel.rateAtKink2,\n        10000,\n        rateModel.rateAtMax,\n        u\n      );\n    }\n  } else {\n    // V1: single kink\n    if (u <= rateModel.kink1Utilization) {\n      return linearInterpolate(\n        0,\n        rateModel.rateAtZero,\n        rateModel.kink1Utilization,\n        rateModel.rateAtKink1,\n        u\n      );\n    } else {\n      return linearInterpolate(\n        rateModel.kink1Utilization,\n        rateModel.rateAtKink1,\n        10000,\n        rateModel.rateAtMax,\n        u\n      );\n    }\n  }\n}\n\n/**\n * Linear interpolation between two points.\n */\nfunction linearInterpolate(x0: number, y0: number, x1: number, y1: number, x: number): number {\n  if (x1 === x0) return y0;\n  return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0);\n}\n\n// ============================================================================\n// SUPPLY INTEREST RATE CURVE\n// ============================================================================\n\n/**\n * Interest rate curve point for visualization (supply only).\n */\nexport interface JupLendInterestRateCurvePoint {\n  utilization: number; // 0-100 percentage\n  supplyAPY: number; // percentage\n}\n\n/**\n * Generate a supply interest rate curve for a JupLend reserve using the on-chain RateModel.\n *\n * Uses the piecewise linear borrow rate curve from the RateModel account:\n *   borrowAPR(U) = calculateJupLendBorrowRate(rateModel, U * 10000)\n *   supplyAPR(U) = borrowAPR(U) * (1 - feeOnInterest / 1e4) * U\n *   supplyAPY(U) = aprToApy(supplyAPR(U))\n *\n * @param rateModel - The on-chain RateModel account (from liquidity program)\n * @param feeOnInterest - Fee on interest in bps (from TokenReserve.feeOnInterest)\n * @returns 101 curve points (utilization 0–100%)\n */\nexport function generateJupLendSupplyCurve(\n  rateModel: JupRateModel,\n  feeOnInterest: number\n): JupLendInterestRateCurvePoint[] {\n  const feeMultiplier = 1 - feeOnInterest / 1e4;\n\n  return Array.from({ length: 101 }, (_, i) => {\n    const utilizationFraction = i / 100; // 0.00 to 1.00\n    const utilizationBps = i * 100; // 0 to 10000\n\n    const borrowRateBps = calculateJupLendBorrowRate(rateModel, utilizationBps);\n    const borrowRateDecimal = borrowRateBps / 1e4;\n\n    const supplyAPR = borrowRateDecimal * feeMultiplier * utilizationFraction;\n    const supplyAPY = aprToApy(supplyAPR);\n\n    return {\n      utilization: i, // 0-100\n      supplyAPY: supplyAPY * 100, // Convert to percentage\n    };\n  });\n}\n","import { AccountMeta, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { JUP_LEND_PROGRAM_ID } from \"./constants\";\n\n/**\n * Refresh JupLend exchange rates (permissionless crank).\n * Must run before risk-sensitive flows (liquidation, borrow, non-JupLend withdraw)\n * for every involved JupLend bank in the same tx.\n *\n * Note: juplend_deposit and juplend_withdraw call updateRate internally.\n */\nconst UPDATE_RATE_DISCRIMINATOR = Buffer.from([24, 225, 53, 189, 72, 212, 225, 178]);\n\nexport const makeUpdateJupLendRateIx = (\n  lending: PublicKey,\n  mint: PublicKey,\n  fTokenMint: PublicKey,\n  supplyTokenReservesLiquidity: PublicKey,\n  rewardsRateModel: PublicKey\n): TransactionInstruction => {\n  const keys: AccountMeta[] = [\n    // lending: writable (exchange prices are updated)\n    { pubkey: lending, isSigner: false, isWritable: true },\n\n    // mint: read-only\n    { pubkey: mint, isSigner: false, isWritable: false },\n\n    // fTokenMint: read-only\n    { pubkey: fTokenMint, isSigner: false, isWritable: false },\n\n    // supplyTokenReservesLiquidity: read-only\n    { pubkey: supplyTokenReservesLiquidity, isSigner: false, isWritable: false },\n\n    // rewardsRateModel: read-only\n    { pubkey: rewardsRateModel, isSigner: false, isWritable: false },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: JUP_LEND_PROGRAM_ID,\n    data: UPDATE_RATE_DISCRIMINATOR,\n  });\n};\n\nconst jupLendInstructions = {\n  makeUpdateJupLendRateIx,\n};\n\nexport default jupLendInstructions;\n","import { makeUpdateJupLendRateIx } from \"../instructions\";\nimport { JupLendingState } from \"../types\";\n\ntype MakeUpdateJupLendRateParams = {\n  lendingState: JupLendingState;\n};\n\nexport function makeUpdateJupLendRate({ lendingState }: MakeUpdateJupLendRateParams) {\n  return makeUpdateJupLendRateIx(\n    lendingState.pubkey,\n    lendingState.mint,\n    lendingState.fTokenMint,\n    lendingState.tokenReservesLiquidity,\n    lendingState.rewardsRateModel\n  );\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport const KLEND_PROGRAM_ID = new PublicKey(\n  \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\"\n);\nexport const FARMS_PROGRAM_ID = new PublicKey(\n  \"FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr\"\n);\n\nconst MAIN_MARKET: PublicKey = new PublicKey(\n  \"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF\"\n);\nconst MAIN_MARKET_LUT: PublicKey = new PublicKey(\n  \"284iwGtA9X9aLy3KsyV8uT2pXLARhYbiSi5SiM2g47M2\"\n);\n\n// Slot timing constants (matches Kamino SDK)\nexport const SLOTS_PER_SECOND = 2;\n\nexport const SLOTS_PER_MINUTE = SLOTS_PER_SECOND * 60;\n\nexport const SLOTS_PER_HOUR = SLOTS_PER_MINUTE * 60;\n\nexport const SLOTS_PER_DAY = SLOTS_PER_HOUR * 24;\n\nexport const SLOTS_PER_YEAR = SLOTS_PER_DAY * 365;\n\n// Wall-clock year used by the klend program for `TrueApr` reserves\n// (`SECONDS_PER_YEAR = 60 * 60 * 24 * 365`, no leap-year correction).\nexport const SECONDS_PER_YEAR = 31_536_000;\n\n// Default slot duration in milliseconds (matches klend-sdk >= 11)\nexport const DEFAULT_RECENT_SLOT_DURATION_MS = 350;\n\nexport const ONE_HUNDRED_PCT_IN_BPS = 10_000;\n\nconst klendConstants = {\n  MAIN_MARKET,\n  MAIN_MARKET_LUT,\n  KLEND_PROGRAM_ID,\n  FARMS_PROGRAM_ID,\n};\n\nexport default klendConstants;\n","import { Address, Program } from \"@coral-xyz/anchor\";\nimport { bool, struct } from \"@coral-xyz/borsh\";\nimport { AccountMeta, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { KLEND_PROGRAM_ID } from \"./constants\";\nimport { KlendIdlType } from \"./idl\";\n\n/**\n * Refresh a generic Kamino reserve with a legacy Pyth oracle\n * @param program\n * @param reserve\n * @param market\n * @param oracle\n * @returns\n */\ntype MakeRefreshReserveIxParams = {\n  program: Program<KlendIdlType>;\n  reserve: PublicKey;\n  market: PublicKey;\n  pythOracle: PublicKey | null;\n  switchboardPriceOracle: PublicKey | null;\n  switchboardTwapOracle: PublicKey | null;\n  scopePrices: PublicKey | null;\n};\n\nconst DEFAULT_PUBLIC_KEY: PublicKey = new PublicKey(\"11111111111111111111111111111111\");\nconst NULL_PUBKEY: PublicKey = new PublicKey(\"nu11111111111111111111111111111111111111111\");\n\nfunction isNotNullPubkey(pubkey: PublicKey | null): boolean {\n  if (!pubkey) {\n    return false;\n  }\n  return !pubkey.equals(NULL_PUBKEY) && !pubkey.equals(DEFAULT_PUBLIC_KEY);\n}\n\nfunction optionalAccount(pubkey: PublicKey | null): PublicKey | null {\n  if (isNotNullPubkey(pubkey)) {\n    return pubkey;\n  } else {\n    return null;\n  }\n}\n\nconst makeRefreshReserveIx = ({\n  program,\n  reserve,\n  market,\n  pythOracle,\n  switchboardPriceOracle,\n  switchboardTwapOracle,\n  scopePrices,\n}: MakeRefreshReserveIxParams) => {\n  const ix = program.methods\n    .refreshReserve()\n    .accounts({\n      reserve: reserve,\n      lendingMarket: market,\n      pythOracle: optionalAccount(pythOracle),\n      switchboardPriceOracle: optionalAccount(switchboardPriceOracle),\n      switchboardTwapOracle: optionalAccount(switchboardTwapOracle),\n      scopePrices: optionalAccount(scopePrices),\n    })\n    .instruction();\n\n  return ix;\n};\n\n/**\n * Refresh a generic Kamino obligation\n * @param program\n * @param market\n * @param obligation\n * @param remaining - pack the reserves used in this obligation, in the order they appear, starting\n * with lending reserves. For example, a user lending USDC at index 0, SOL at index 1, borrowing\n * BONK at index 0, pass [USDC, SOL, BONK] reserves\n * @returns\n */\nexport const REFRESH_OBLIGATION_DISCRIMINATOR = Buffer.from([33, 132, 147, 228, 151, 192, 72, 89]);\n\nexport interface RefreshObligationAccounts {\n  lendingMarket: Address;\n  obligation: Address;\n}\n\nexport const makeRefreshObligationIx = (\n  lendingMarket: PublicKey,\n  obligation: PublicKey,\n  reserve: PublicKey\n): TransactionInstruction => {\n  const keys: AccountMeta[] = [\n    // lendingMarket: read-only, not a signer\n    { pubkey: lendingMarket, isSigner: false, isWritable: false },\n\n    // obligation: writable, not a signer (typical for state being updated)\n    { pubkey: obligation, isSigner: false, isWritable: true },\n\n    // any additional metas (e.g., oracles, reserves, payer signer, sysvars, etc.)\n    {\n      pubkey: reserve,\n      isSigner: false,\n      isWritable: false,\n    },\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: KLEND_PROGRAM_ID,\n    data: REFRESH_OBLIGATION_DISCRIMINATOR, // no extra encoding—just the 8-byte discriminator\n  });\n};\n\nconst REFRESH_BATCH_DISCRIMINATOR = Buffer.from([144, 110, 26, 103, 162, 204, 252, 147]);\n\ninterface RefreshReservesBatchArgs {\n  skipPriceUpdates: boolean;\n}\n\nexport const layout = struct<RefreshReservesBatchArgs>([bool(\"skipPriceUpdates\")]);\n\ntype ReserveRemainingAccounts = {\n  reserve: PublicKey;\n  lendingMarket: PublicKey;\n};\n\nexport function makeRefreshReservesBatchIx(\n  reserves: ReserveRemainingAccounts[],\n  programId: PublicKey = KLEND_PROGRAM_ID\n) {\n  const remainingAccounts = reserves.flatMap((reserve) => [\n    {\n      pubkey: reserve.reserve,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: reserve.lendingMarket,\n      isSigner: false,\n      isWritable: false,\n    },\n  ]);\n\n  const keys: Array<AccountMeta> = [...remainingAccounts];\n  const buffer = Buffer.alloc(1000);\n  const len = layout.encode(\n    {\n      skipPriceUpdates: true,\n    },\n    buffer\n  );\n  const data = Buffer.concat([REFRESH_BATCH_DISCRIMINATOR, buffer]).slice(0, 8 + len);\n  const ix = new TransactionInstruction({\n    programId,\n    keys,\n    data,\n  });\n  return ix;\n}\n\nconst klendInstructions = {\n  makeRefreshReserveIx,\n  makeRefreshObligationIx,\n  makeRefreshReservesBatchIx,\n};\n\nexport default klendInstructions;\n","import { Program } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { KlendIdlType } from \"./idl\";\nimport klendInstructions from \"./instructions\";\nimport { KaminoReserve } from \"./types\";\n\ntype MakeRefreshingIxsParams = {\n  klendProgram: Program<KlendIdlType>;\n  // A \"bank\" in Kamino parlance\n  reserve: KaminoReserve;\n  reserveKey: PublicKey;\n  obligationKey: PublicKey;\n  program: Program<KlendIdlType>;\n};\n\nexport async function makeRefreshingIxs({\n  klendProgram,\n  reserve,\n  reserveKey,\n  obligationKey,\n}: MakeRefreshingIxsParams) {\n  const tokenInfo = reserve.config.tokenInfo;\n  const lendingMarket = reserve.lendingMarket;\n  const refreshReserveIx = await klendInstructions.makeRefreshReserveIx({\n    program: klendProgram,\n    reserve: reserveKey,\n    market: lendingMarket,\n    pythOracle: tokenInfo.pythConfiguration.price,\n    switchboardPriceOracle: tokenInfo.switchboardConfiguration.priceAggregator,\n    switchboardTwapOracle: tokenInfo.switchboardConfiguration.twapAggregator,\n    scopePrices: tokenInfo.scopeConfiguration.priceFeed,\n  });\n\n  const refreshObligationIx = klendInstructions.makeRefreshObligationIx(\n    lendingMarket,\n    obligationKey,\n    reserveKey\n  );\n\n  return [refreshReserveIx, refreshObligationIx];\n}\n","import {\n  KaminoInterestRateBasis,\n  KaminoObligation,\n  KaminoObligationJSON,\n  KaminoReserve,\n  KaminoReserveJSON,\n} from \"../../types\";\n\n/**\n * Serialize a Kamino Obligation to its JSON DTO.\n *\n * The parameter is typed as the curated {@link KaminoObligation}, so a\n * freshly decoded `ObligationRaw` is accepted structurally and trimmed\n * down to the curated shape here.\n */\nexport function kaminoObligationToDto(\n  obligation: KaminoObligation\n): KaminoObligationJSON {\n  return {\n    lendingMarket: obligation.lendingMarket.toBase58(),\n    owner: obligation.owner.toBase58(),\n    deposits: obligation.deposits.map((item) => ({\n      depositReserve: item.depositReserve.toBase58(),\n      depositedAmount: item.depositedAmount.toString(),\n      marketValueSf: item.marketValueSf.toString(),\n    })),\n    borrows: obligation.borrows.map((item) => ({\n      borrowReserve: item.borrowReserve.toBase58(),\n      borrowedAmountSf: item.borrowedAmountSf.toString(),\n      marketValueSf: item.marketValueSf.toString(),\n    })),\n  };\n}\n\n/**\n * Serialize a Kamino Reserve to its JSON DTO.\n *\n * The parameter is typed as the curated {@link KaminoReserve}, so a\n * freshly decoded `ReserveRaw` is accepted structurally and trimmed\n * down to the curated shape here.\n */\nexport function kaminoReserveToDto(reserve: KaminoReserve): KaminoReserveJSON {\n  return {\n    lendingMarket: reserve.lendingMarket.toBase58(),\n    farmCollateral: reserve.farmCollateral.toBase58(),\n    liquidity: {\n      mintPubkey: reserve.liquidity.mintPubkey.toBase58(),\n      supplyVault: reserve.liquidity.supplyVault.toBase58(),\n      mintDecimals: reserve.liquidity.mintDecimals.toString(),\n      availableAmount: reserve.liquidity.availableAmount.toString(),\n      borrowedAmountSf: reserve.liquidity.borrowedAmountSf.toString(),\n      accumulatedProtocolFeesSf:\n        reserve.liquidity.accumulatedProtocolFeesSf.toString(),\n      accumulatedReferrerFeesSf:\n        reserve.liquidity.accumulatedReferrerFeesSf.toString(),\n      pendingReferrerFeesSf: reserve.liquidity.pendingReferrerFeesSf.toString(),\n    },\n    collateral: {\n      mintPubkey: reserve.collateral.mintPubkey.toBase58(),\n      mintTotalSupply: reserve.collateral.mintTotalSupply.toString(),\n      supplyVault: reserve.collateral.supplyVault.toBase58(),\n    },\n    config: {\n      protocolTakeRatePct: reserve.config.protocolTakeRatePct,\n      hostFixedInterestRateBps: reserve.config.hostFixedInterestRateBps,\n      interestRateBasis:\n        reserve.config.interestRateBasis ?? KaminoInterestRateBasis.Legacy,\n      depositLimit: reserve.config.depositLimit.toString(),\n      borrowLimit: reserve.config.borrowLimit.toString(),\n      borrowRateCurve: {\n        points: reserve.config.borrowRateCurve.points.map((item) => ({\n          utilizationRateBps: item.utilizationRateBps,\n          borrowRateBps: item.borrowRateBps,\n        })),\n      },\n      tokenInfo: {\n        scopeConfiguration: {\n          priceFeed:\n            reserve.config.tokenInfo.scopeConfiguration.priceFeed.toBase58(),\n        },\n        switchboardConfiguration: {\n          priceAggregator:\n            reserve.config.tokenInfo.switchboardConfiguration.priceAggregator.toBase58(),\n          twapAggregator:\n            reserve.config.tokenInfo.switchboardConfiguration.twapAggregator.toBase58(),\n        },\n        pythConfiguration: {\n          price: reserve.config.tokenInfo.pythConfiguration.price.toBase58(),\n        },\n      },\n    },\n  };\n}\n","{\n  \"address\": \"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD\",\n  \"metadata\": {\n    \"name\": \"kamino_lending\",\n    \"version\": \"1.11.0\",\n    \"spec\": \"0.1.0\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"init_lending_market\",\n      \"discriminator\": [\n        34,\n        162,\n        116,\n        14,\n        101,\n        137,\n        94,\n        239\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market_owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"rent\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"quote_currency\",\n          \"type\": {\n            \"array\": [\n              \"u8\",\n              32\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_lending_market\",\n      \"discriminator\": [\n        209,\n        157,\n        53,\n        210,\n        97,\n        180,\n        31,\n        45\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market_owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": {\n            \"array\": [\n              \"u8\",\n              72\n            ]\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"update_lending_market_owner\",\n      \"discriminator\": [\n        118,\n        224,\n        10,\n        62,\n        196,\n        230,\n        184,\n        89\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market_owner_cached\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_reserve\",\n      \"discriminator\": [\n        138,\n        245,\n        71,\n        225,\n        153,\n        4,\n        3,\n        43\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market_owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"initial_liquidity_source\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_farms_for_reserve\",\n      \"discriminator\": [\n        218,\n        6,\n        62,\n        233,\n        1,\n        33,\n        232,\n        82\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market_owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"farms_program\"\n        },\n        {\n          \"name\": \"farms_global_config\"\n        },\n        {\n          \"name\": \"farm_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"farms_vault_authority\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_reserve_config\",\n      \"discriminator\": [\n        61,\n        148,\n        100,\n        70,\n        143,\n        107,\n        17,\n        13\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\"\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdateConfigMode\"\n            }\n          }\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"name\": \"skip_config_integrity_validation\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"redeem_fees\",\n      \"discriminator\": [\n        215,\n        39,\n        180,\n        41,\n        173,\n        46,\n        248,\n        220\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_liquidity_fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_supply_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"withdraw_protocol_fee\",\n      \"discriminator\": [\n        158,\n        201,\n        158,\n        189,\n        33,\n        93,\n        162,\n        103\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"global_config\"\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\"\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"fee_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"fee_collector_ata\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"socialize_loss\",\n      \"discriminator\": [\n        245,\n        75,\n        91,\n        0,\n        236,\n        97,\n        19,\n        3\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"risk_council\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"socialize_loss_v2\",\n      \"discriminator\": [\n        238,\n        95,\n        98,\n        220,\n        187,\n        40,\n        204,\n        154\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"socialize_loss_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"risk_council\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"mark_obligation_for_deleveraging\",\n      \"discriminator\": [\n        164,\n        35,\n        182,\n        19,\n        0,\n        116,\n        243,\n        127\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"risk_council\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"autodeleverage_target_ltv_pct\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"refresh_reserve\",\n      \"discriminator\": [\n        2,\n        218,\n        138,\n        235,\n        79,\n        201,\n        25,\n        102\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"pyth_oracle\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"switchboard_price_oracle\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"switchboard_twap_oracle\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"scope_prices\",\n          \"optional\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"refresh_reserves_batch\",\n      \"discriminator\": [\n        144,\n        110,\n        26,\n        103,\n        162,\n        204,\n        252,\n        147\n      ],\n      \"accounts\": [],\n      \"args\": [\n        {\n          \"name\": \"skip_price_updates\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_reserve_liquidity\",\n      \"discriminator\": [\n        169,\n        201,\n        30,\n        126,\n        6,\n        205,\n        102,\n        68\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"redeem_reserve_collateral\",\n      \"discriminator\": [\n        234,\n        117,\n        181,\n        125,\n        185,\n        142,\n        220,\n        29\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"init_obligation\",\n      \"discriminator\": [\n        251,\n        10,\n        231,\n        76,\n        27,\n        11,\n        159,\n        96\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"obligation_owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"seed1_account\"\n        },\n        {\n          \"name\": \"seed2_account\"\n        },\n        {\n          \"name\": \"owner_user_metadata\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"InitObligationArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"init_obligation_farms_for_reserve\",\n      \"discriminator\": [\n        136,\n        63,\n        15,\n        186,\n        211,\n        152,\n        168,\n        164\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner\"\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_farm_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"obligation_farm\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"farms_program\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"refresh_obligation_farms_for_reserve\",\n      \"discriminator\": [\n        140,\n        144,\n        253,\n        21,\n        10,\n        74,\n        248,\n        3\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"crank\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"base_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"reserve\"\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"refresh_obligation\",\n      \"discriminator\": [\n        33,\n        132,\n        147,\n        228,\n        151,\n        192,\n        72,\n        89\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"deposit_obligation_collateral\",\n      \"discriminator\": [\n        108,\n        209,\n        4,\n        72,\n        21,\n        22,\n        118,\n        133\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"deposit_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_destination_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_obligation_collateral_v2\",\n      \"discriminator\": [\n        137,\n        145,\n        151,\n        94,\n        167,\n        113,\n        4,\n        145\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"deposit_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"deposit_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_destination_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_obligation_collateral\",\n      \"discriminator\": [\n        37,\n        116,\n        205,\n        103,\n        243,\n        192,\n        92,\n        198\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"withdraw_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_source_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_obligation_collateral_v2\",\n      \"discriminator\": [\n        202,\n        249,\n        117,\n        114,\n        231,\n        192,\n        47,\n        138\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"withdraw_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"withdraw_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_source_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"borrow_obligation_liquidity\",\n      \"discriminator\": [\n        121,\n        127,\n        18,\n        204,\n        73,\n        245,\n        225,\n        65\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"borrow_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"borrow_reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"borrow_reserve_liquidity_fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_token_state\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"borrow_obligation_liquidity_v2\",\n      \"discriminator\": [\n        161,\n        128,\n        143,\n        245,\n        171,\n        199,\n        194,\n        6\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"borrow_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"borrow_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"borrow_reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"borrow_reserve_liquidity_fee_receiver\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"referrer_token_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"repay_obligation_liquidity\",\n      \"discriminator\": [\n        145,\n        178,\n        13,\n        225,\n        76,\n        240,\n        147,\n        72\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"repay_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"repay_obligation_liquidity_v2\",\n      \"discriminator\": [\n        116,\n        174,\n        213,\n        76,\n        180,\n        53,\n        210,\n        144\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"repay_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"repay_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"repay_and_withdraw_and_redeem\",\n      \"discriminator\": [\n        2,\n        54,\n        152,\n        3,\n        148,\n        96,\n        109,\n        218\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"repay_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"repay_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"withdraw_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"writable\": true,\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"withdraw_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_source_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"placeholder_user_destination_collateral\",\n              \"optional\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"collateral_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"debt_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"repay_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_and_withdraw\",\n      \"discriminator\": [\n        141,\n        153,\n        39,\n        15,\n        64,\n        61,\n        88,\n        84\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"deposit_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"writable\": true,\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_destination_deposit_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"placeholder_user_destination_collateral\",\n              \"optional\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"withdraw_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"writable\": true,\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"withdraw_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_source_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"placeholder_user_destination_collateral\",\n              \"optional\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"deposit_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"withdraw_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"withdraw_collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_reserve_liquidity_and_obligation_collateral\",\n      \"discriminator\": [\n        129,\n        199,\n        4,\n        2,\n        222,\n        39,\n        26,\n        46\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_destination_deposit_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"placeholder_user_destination_collateral\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_reserve_liquidity_and_obligation_collateral_v2\",\n      \"discriminator\": [\n        216,\n        224,\n        191,\n        27,\n        204,\n        151,\n        102,\n        175\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"deposit_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"writable\": true,\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_destination_deposit_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"placeholder_user_destination_collateral\",\n              \"optional\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_obligation_collateral_and_redeem_reserve_collateral\",\n      \"discriminator\": [\n        75,\n        93,\n        93,\n        220,\n        34,\n        150,\n        218,\n        196\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"withdraw_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_source_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"placeholder_user_destination_collateral\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_obligation_collateral_and_redeem_reserve_collateral_v2\",\n      \"discriminator\": [\n        235,\n        52,\n        119,\n        152,\n        149,\n        197,\n        20,\n        7\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"withdraw_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"owner\",\n              \"writable\": true,\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\"\n            },\n            {\n              \"name\": \"withdraw_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"reserve_source_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"placeholder_user_destination_collateral\",\n              \"optional\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"collateral_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_obligation_and_redeem_reserve_collateral\",\n      \"discriminator\": [\n        177,\n        71,\n        154,\n        188,\n        226,\n        133,\n        74,\n        55\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"liquidator\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"repay_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"repay_reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"repay_reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"withdraw_reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"withdraw_reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"withdraw_reserve_collateral_mint\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"withdraw_reserve_collateral_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"withdraw_reserve_liquidity_supply\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"withdraw_reserve_liquidity_fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_collateral\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"collateral_token_program\"\n        },\n        {\n          \"name\": \"repay_liquidity_token_program\"\n        },\n        {\n          \"name\": \"withdraw_liquidity_token_program\"\n        },\n        {\n          \"name\": \"instruction_sysvar_account\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_acceptable_received_liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_allowed_ltv_override_percent\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"liquidate_obligation_and_redeem_reserve_collateral_v2\",\n      \"discriminator\": [\n        162,\n        161,\n        35,\n        143,\n        30,\n        187,\n        185,\n        103\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"liquidation_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"liquidator\",\n              \"signer\": true\n            },\n            {\n              \"name\": \"obligation\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"lending_market\"\n            },\n            {\n              \"name\": \"lending_market_authority\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"repay_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"repay_reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"repay_reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"withdraw_reserve\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"withdraw_reserve_liquidity_mint\"\n            },\n            {\n              \"name\": \"withdraw_reserve_collateral_mint\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"withdraw_reserve_collateral_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"withdraw_reserve_liquidity_supply\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"withdraw_reserve_liquidity_fee_receiver\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_source_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_collateral\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"user_destination_liquidity\",\n              \"writable\": true\n            },\n            {\n              \"name\": \"collateral_token_program\"\n            },\n            {\n              \"name\": \"repay_liquidity_token_program\"\n            },\n            {\n              \"name\": \"withdraw_liquidity_token_program\"\n            },\n            {\n              \"name\": \"instruction_sysvar_account\"\n            }\n          ]\n        },\n        {\n          \"name\": \"collateral_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"debt_farms_accounts\",\n          \"accounts\": [\n            {\n              \"name\": \"obligation_farm_user_state\",\n              \"writable\": true,\n              \"optional\": true\n            },\n            {\n              \"name\": \"reserve_farm_state\",\n              \"writable\": true,\n              \"optional\": true\n            }\n          ]\n        },\n        {\n          \"name\": \"farms_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_acceptable_received_liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_allowed_ltv_override_percent\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"flash_repay_reserve_liquidity\",\n      \"discriminator\": [\n        185,\n        117,\n        0,\n        203,\n        96,\n        245,\n        180,\n        186\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user_transfer_authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_token_state\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"referrer_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"sysvar_info\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"borrow_instruction_index\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"flash_borrow_reserve_liquidity\",\n      \"discriminator\": [\n        135,\n        231,\n        52,\n        167,\n        7,\n        52,\n        212,\n        193\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user_transfer_authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_source_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_destination_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_fee_receiver\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_token_state\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"referrer_account\",\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"sysvar_info\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"liquidity_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"request_elevation_group\",\n      \"discriminator\": [\n        36,\n        119,\n        251,\n        129,\n        34,\n        240,\n        7,\n        147\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"elevation_group\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"init_referrer_token_state\",\n      \"discriminator\": [\n        116,\n        45,\n        66,\n        148,\n        58,\n        13,\n        218,\n        115\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\"\n        },\n        {\n          \"name\": \"referrer\"\n        },\n        {\n          \"name\": \"referrer_token_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_user_metadata\",\n      \"discriminator\": [\n        117,\n        169,\n        176,\n        69,\n        197,\n        23,\n        15,\n        162\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"user_metadata\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_user_metadata\",\n          \"optional\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"user_lookup_table\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_referrer_fees\",\n      \"discriminator\": [\n        171,\n        118,\n        121,\n        201,\n        233,\n        140,\n        23,\n        228\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"referrer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"referrer_token_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"reserve_liquidity_mint\"\n        },\n        {\n          \"name\": \"reserve_supply_liquidity\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"lending_market_authority\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_referrer_state_and_short_url\",\n      \"discriminator\": [\n        165,\n        19,\n        25,\n        127,\n        100,\n        55,\n        31,\n        90\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"referrer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"referrer_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_short_url\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"referrer_user_metadata\"\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"short_url\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"delete_referrer_state_and_short_url\",\n      \"discriminator\": [\n        153,\n        185,\n        99,\n        28,\n        228,\n        179,\n        187,\n        150\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"referrer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"referrer_state\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"short_url\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"rent\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"set_obligation_order\",\n      \"discriminator\": [\n        81,\n        1,\n        99,\n        156,\n        211,\n        83,\n        78,\n        46\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"obligation\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lending_market\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"index\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"order\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ObligationOrder\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"init_global_config\",\n      \"discriminator\": [\n        140,\n        136,\n        214,\n        48,\n        87,\n        0,\n        120,\n        255\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"program_data\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"rent\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_global_config\",\n      \"discriminator\": [\n        164,\n        84,\n        130,\n        189,\n        111,\n        58,\n        250,\n        200\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"global_admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"mode\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdateGlobalConfigMode\"\n            }\n          }\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"bytes\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_global_config_admin\",\n      \"discriminator\": [\n        184,\n        87,\n        23,\n        193,\n        156,\n        238,\n        175,\n        119\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"pending_admin\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\",\n          \"writable\": true\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"idl_missing_types\",\n      \"discriminator\": [\n        130,\n        80,\n        38,\n        153,\n        80,\n        212,\n        182,\n        253\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\"\n        },\n        {\n          \"name\": \"lending_market\"\n        },\n        {\n          \"name\": \"reserve\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"reserve_farm_kind\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ReserveFarmKind\"\n            }\n          }\n        },\n        {\n          \"name\": \"asset_tier\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"AssetTier\"\n            }\n          }\n        },\n        {\n          \"name\": \"fee_calculation\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"FeeCalculation\"\n            }\n          }\n        },\n        {\n          \"name\": \"reserve_status\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"ReserveStatus\"\n            }\n          }\n        },\n        {\n          \"name\": \"update_config_mode\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdateConfigMode\"\n            }\n          }\n        },\n        {\n          \"name\": \"update_lending_market_config_value\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdateLendingMarketConfigValue\"\n            }\n          }\n        },\n        {\n          \"name\": \"update_lending_market_config_mode\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"UpdateLendingMarketMode\"\n            }\n          }\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"UserState\",\n      \"discriminator\": [\n        72,\n        177,\n        85,\n        249,\n        76,\n        167,\n        186,\n        126\n      ]\n    },\n    {\n      \"name\": \"GlobalConfig\",\n      \"discriminator\": [\n        149,\n        8,\n        156,\n        202,\n        160,\n        252,\n        176,\n        217\n      ]\n    },\n    {\n      \"name\": \"LendingMarket\",\n      \"discriminator\": [\n        246,\n        114,\n        50,\n        98,\n        72,\n        157,\n        28,\n        120\n      ]\n    },\n    {\n      \"name\": \"Obligation\",\n      \"discriminator\": [\n        168,\n        206,\n        141,\n        106,\n        88,\n        76,\n        172,\n        167\n      ]\n    },\n    {\n      \"name\": \"ReferrerState\",\n      \"discriminator\": [\n        194,\n        81,\n        217,\n        103,\n        12,\n        19,\n        12,\n        66\n      ]\n    },\n    {\n      \"name\": \"ReferrerTokenState\",\n      \"discriminator\": [\n        39,\n        15,\n        208,\n        77,\n        32,\n        195,\n        105,\n        56\n      ]\n    },\n    {\n      \"name\": \"ShortUrl\",\n      \"discriminator\": [\n        28,\n        89,\n        174,\n        25,\n        226,\n        124,\n        126,\n        212\n      ]\n    },\n    {\n      \"name\": \"UserMetadata\",\n      \"discriminator\": [\n        157,\n        214,\n        220,\n        235,\n        98,\n        135,\n        171,\n        28\n      ]\n    },\n    {\n      \"name\": \"Reserve\",\n      \"discriminator\": [\n        43,\n        242,\n        204,\n        202,\n        26,\n        247,\n        59,\n        127\n      ]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"InvalidMarketAuthority\",\n      \"msg\": \"Market authority is invalid\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"InvalidMarketOwner\",\n      \"msg\": \"Market owner is invalid\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"InvalidAccountOwner\",\n      \"msg\": \"Input account owner is not the program address\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"InvalidAmount\",\n      \"msg\": \"Input amount is invalid\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"InvalidConfig\",\n      \"msg\": \"Input config value is invalid\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"InvalidSigner\",\n      \"msg\": \"Input account must be a signer\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"InvalidAccountInput\",\n      \"msg\": \"Invalid account input\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"MathOverflow\",\n      \"msg\": \"Math operation overflow\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"InsufficientLiquidity\",\n      \"msg\": \"Insufficient liquidity available\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"ReserveStale\",\n      \"msg\": \"Reserve state needs to be refreshed\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"WithdrawTooSmall\",\n      \"msg\": \"Withdraw amount too small\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"WithdrawTooLarge\",\n      \"msg\": \"Withdraw amount too large\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"BorrowTooSmall\",\n      \"msg\": \"Borrow amount too small to receive liquidity after fees\"\n    },\n    {\n      \"code\": 6013,\n      \"name\": \"BorrowTooLarge\",\n      \"msg\": \"Borrow amount too large for deposited collateral\"\n    },\n    {\n      \"code\": 6014,\n      \"name\": \"RepayTooSmall\",\n      \"msg\": \"Repay amount too small to transfer liquidity\"\n    },\n    {\n      \"code\": 6015,\n      \"name\": \"LiquidationTooSmall\",\n      \"msg\": \"Liquidation amount too small to receive collateral\"\n    },\n    {\n      \"code\": 6016,\n      \"name\": \"ObligationHealthy\",\n      \"msg\": \"Cannot liquidate healthy obligations\"\n    },\n    {\n      \"code\": 6017,\n      \"name\": \"ObligationStale\",\n      \"msg\": \"Obligation state needs to be refreshed\"\n    },\n    {\n      \"code\": 6018,\n      \"name\": \"ObligationReserveLimit\",\n      \"msg\": \"Obligation reserve limit exceeded\"\n    },\n    {\n      \"code\": 6019,\n      \"name\": \"InvalidObligationOwner\",\n      \"msg\": \"Obligation owner is invalid\"\n    },\n    {\n      \"code\": 6020,\n      \"name\": \"ObligationDepositsEmpty\",\n      \"msg\": \"Obligation deposits are empty\"\n    },\n    {\n      \"code\": 6021,\n      \"name\": \"ObligationBorrowsEmpty\",\n      \"msg\": \"Obligation borrows are empty\"\n    },\n    {\n      \"code\": 6022,\n      \"name\": \"ObligationDepositsZero\",\n      \"msg\": \"Obligation deposits have zero value\"\n    },\n    {\n      \"code\": 6023,\n      \"name\": \"ObligationBorrowsZero\",\n      \"msg\": \"Obligation borrows have zero value\"\n    },\n    {\n      \"code\": 6024,\n      \"name\": \"InvalidObligationCollateral\",\n      \"msg\": \"Invalid obligation collateral\"\n    },\n    {\n      \"code\": 6025,\n      \"name\": \"InvalidObligationLiquidity\",\n      \"msg\": \"Invalid obligation liquidity\"\n    },\n    {\n      \"code\": 6026,\n      \"name\": \"ObligationCollateralEmpty\",\n      \"msg\": \"Obligation collateral is empty\"\n    },\n    {\n      \"code\": 6027,\n      \"name\": \"ObligationLiquidityEmpty\",\n      \"msg\": \"Obligation liquidity is empty\"\n    },\n    {\n      \"code\": 6028,\n      \"name\": \"NegativeInterestRate\",\n      \"msg\": \"Interest rate is negative\"\n    },\n    {\n      \"code\": 6029,\n      \"name\": \"InvalidOracleConfig\",\n      \"msg\": \"Input oracle config is invalid\"\n    },\n    {\n      \"code\": 6030,\n      \"name\": \"InsufficientProtocolFeesToRedeem\",\n      \"msg\": \"Insufficient protocol fees to claim or no liquidity available\"\n    },\n    {\n      \"code\": 6031,\n      \"name\": \"FlashBorrowCpi\",\n      \"msg\": \"No cpi flash borrows allowed\"\n    },\n    {\n      \"code\": 6032,\n      \"name\": \"NoFlashRepayFound\",\n      \"msg\": \"No corresponding repay found for flash borrow\"\n    },\n    {\n      \"code\": 6033,\n      \"name\": \"InvalidFlashRepay\",\n      \"msg\": \"Invalid repay found\"\n    },\n    {\n      \"code\": 6034,\n      \"name\": \"FlashRepayCpi\",\n      \"msg\": \"No cpi flash repays allowed\"\n    },\n    {\n      \"code\": 6035,\n      \"name\": \"MultipleFlashBorrows\",\n      \"msg\": \"Multiple flash borrows not allowed in the same transaction\"\n    },\n    {\n      \"code\": 6036,\n      \"name\": \"FlashLoansDisabled\",\n      \"msg\": \"Flash loans are disabled for this reserve\"\n    },\n    {\n      \"code\": 6037,\n      \"name\": \"SwitchboardV2Error\",\n      \"msg\": \"Switchboard error\"\n    },\n    {\n      \"code\": 6038,\n      \"name\": \"CouldNotDeserializeScope\",\n      \"msg\": \"Cannot deserialize the scope price account\"\n    },\n    {\n      \"code\": 6039,\n      \"name\": \"PriceTooOld\",\n      \"msg\": \"Price too old\"\n    },\n    {\n      \"code\": 6040,\n      \"name\": \"PriceTooDivergentFromTwap\",\n      \"msg\": \"Price too divergent from twap\"\n    },\n    {\n      \"code\": 6041,\n      \"name\": \"InvalidTwapPrice\",\n      \"msg\": \"Invalid twap price\"\n    },\n    {\n      \"code\": 6042,\n      \"name\": \"GlobalEmergencyMode\",\n      \"msg\": \"Emergency mode is enabled\"\n    },\n    {\n      \"code\": 6043,\n      \"name\": \"InvalidFlag\",\n      \"msg\": \"Invalid lending market config\"\n    },\n    {\n      \"code\": 6044,\n      \"name\": \"PriceNotValid\",\n      \"msg\": \"Price is not valid\"\n    },\n    {\n      \"code\": 6045,\n      \"name\": \"PriceIsBiggerThanHeuristic\",\n      \"msg\": \"Price is bigger than allowed by heuristic\"\n    },\n    {\n      \"code\": 6046,\n      \"name\": \"PriceIsLowerThanHeuristic\",\n      \"msg\": \"Price lower than allowed by heuristic\"\n    },\n    {\n      \"code\": 6047,\n      \"name\": \"PriceIsZero\",\n      \"msg\": \"Price is zero\"\n    },\n    {\n      \"code\": 6048,\n      \"name\": \"PriceConfidenceTooWide\",\n      \"msg\": \"Price confidence too wide\"\n    },\n    {\n      \"code\": 6049,\n      \"name\": \"IntegerOverflow\",\n      \"msg\": \"Conversion between integers failed\"\n    },\n    {\n      \"code\": 6050,\n      \"name\": \"NoFarmForReserve\",\n      \"msg\": \"This reserve does not have a farm\"\n    },\n    {\n      \"code\": 6051,\n      \"name\": \"IncorrectInstructionInPosition\",\n      \"msg\": \"Wrong instruction at expected position\"\n    },\n    {\n      \"code\": 6052,\n      \"name\": \"NoPriceFound\",\n      \"msg\": \"No price found\"\n    },\n    {\n      \"code\": 6053,\n      \"name\": \"InvalidTwapConfig\",\n      \"msg\": \"Invalid Twap configuration: Twap is enabled but one of the enabled price doesn't have a twap\"\n    },\n    {\n      \"code\": 6054,\n      \"name\": \"InvalidPythPriceAccount\",\n      \"msg\": \"Pyth price account does not match configuration\"\n    },\n    {\n      \"code\": 6055,\n      \"name\": \"InvalidSwitchboardAccount\",\n      \"msg\": \"Switchboard account(s) do not match configuration\"\n    },\n    {\n      \"code\": 6056,\n      \"name\": \"InvalidScopePriceAccount\",\n      \"msg\": \"Scope price account does not match configuration\"\n    },\n    {\n      \"code\": 6057,\n      \"name\": \"ObligationCollateralLtvZero\",\n      \"msg\": \"The obligation has one collateral with an LTV set to 0. Withdraw it before withdrawing other collaterals\"\n    },\n    {\n      \"code\": 6058,\n      \"name\": \"InvalidObligationSeedsValue\",\n      \"msg\": \"Seeds must be default pubkeys for tag 0, and mint addresses for tag 1 or 2\"\n    },\n    {\n      \"code\": 6059,\n      \"name\": \"DeprecatedInvalidObligationId\",\n      \"msg\": \"[DEPRECATED] Obligation id must be 0\"\n    },\n    {\n      \"code\": 6060,\n      \"name\": \"InvalidBorrowRateCurvePoint\",\n      \"msg\": \"Invalid borrow rate curve point\"\n    },\n    {\n      \"code\": 6061,\n      \"name\": \"InvalidUtilizationRate\",\n      \"msg\": \"Invalid utilization rate\"\n    },\n    {\n      \"code\": 6062,\n      \"name\": \"CannotSocializeObligationWithCollateral\",\n      \"msg\": \"Obligation hasn't been fully liquidated and debt cannot be socialized.\"\n    },\n    {\n      \"code\": 6063,\n      \"name\": \"ObligationEmpty\",\n      \"msg\": \"Obligation has no borrows or deposits.\"\n    },\n    {\n      \"code\": 6064,\n      \"name\": \"WithdrawalCapReached\",\n      \"msg\": \"Withdrawal cap is reached\"\n    },\n    {\n      \"code\": 6065,\n      \"name\": \"LastTimestampGreaterThanCurrent\",\n      \"msg\": \"The last interval start timestamp is greater than the current timestamp\"\n    },\n    {\n      \"code\": 6066,\n      \"name\": \"LiquidationRewardTooSmall\",\n      \"msg\": \"The reward amount is less than the minimum acceptable received liquidity\"\n    },\n    {\n      \"code\": 6067,\n      \"name\": \"IsolatedAssetTierViolation\",\n      \"msg\": \"Isolated Asset Tier Violation\"\n    },\n    {\n      \"code\": 6068,\n      \"name\": \"InconsistentElevationGroup\",\n      \"msg\": \"The obligation's elevation group and the reserve's are not the same\"\n    },\n    {\n      \"code\": 6069,\n      \"name\": \"InvalidElevationGroup\",\n      \"msg\": \"The elevation group chosen for the reserve does not exist in the lending market\"\n    },\n    {\n      \"code\": 6070,\n      \"name\": \"InvalidElevationGroupConfig\",\n      \"msg\": \"The elevation group updated has wrong parameters set\"\n    },\n    {\n      \"code\": 6071,\n      \"name\": \"UnhealthyElevationGroupLtv\",\n      \"msg\": \"The current obligation must have most or all its debt repaid before changing the elevation group\"\n    },\n    {\n      \"code\": 6072,\n      \"name\": \"ElevationGroupNewLoansDisabled\",\n      \"msg\": \"Elevation group does not accept any new loans or any new borrows/withdrawals\"\n    },\n    {\n      \"code\": 6073,\n      \"name\": \"ReserveDeprecated\",\n      \"msg\": \"Reserve was deprecated, no longer usable\"\n    },\n    {\n      \"code\": 6074,\n      \"name\": \"ReferrerAccountNotInitialized\",\n      \"msg\": \"Referrer account not initialized\"\n    },\n    {\n      \"code\": 6075,\n      \"name\": \"ReferrerAccountMintMissmatch\",\n      \"msg\": \"Referrer account mint does not match the operation reserve mint\"\n    },\n    {\n      \"code\": 6076,\n      \"name\": \"ReferrerAccountWrongAddress\",\n      \"msg\": \"Referrer account address is not a valid program address\"\n    },\n    {\n      \"code\": 6077,\n      \"name\": \"ReferrerAccountReferrerMissmatch\",\n      \"msg\": \"Referrer account referrer does not match the owner referrer\"\n    },\n    {\n      \"code\": 6078,\n      \"name\": \"ReferrerAccountMissing\",\n      \"msg\": \"Referrer account missing for obligation with referrer\"\n    },\n    {\n      \"code\": 6079,\n      \"name\": \"InsufficientReferralFeesToRedeem\",\n      \"msg\": \"Insufficient referral fees to claim or no liquidity available\"\n    },\n    {\n      \"code\": 6080,\n      \"name\": \"CpiDisabled\",\n      \"msg\": \"CPI disabled for this instruction\"\n    },\n    {\n      \"code\": 6081,\n      \"name\": \"ShortUrlNotAsciiAlphanumeric\",\n      \"msg\": \"Referrer short_url is not ascii alphanumeric\"\n    },\n    {\n      \"code\": 6082,\n      \"name\": \"ReserveObsolete\",\n      \"msg\": \"Reserve is marked as obsolete\"\n    },\n    {\n      \"code\": 6083,\n      \"name\": \"ElevationGroupAlreadyActivated\",\n      \"msg\": \"Obligation already part of the same elevation group\"\n    },\n    {\n      \"code\": 6084,\n      \"name\": \"ObligationInObsoleteReserve\",\n      \"msg\": \"Obligation has a deposit or borrow in an obsolete reserve\"\n    },\n    {\n      \"code\": 6085,\n      \"name\": \"ReferrerStateOwnerMismatch\",\n      \"msg\": \"Referrer state owner does not match the given signer\"\n    },\n    {\n      \"code\": 6086,\n      \"name\": \"UserMetadataOwnerAlreadySet\",\n      \"msg\": \"User metadata owner is already set\"\n    },\n    {\n      \"code\": 6087,\n      \"name\": \"CollateralNonLiquidatable\",\n      \"msg\": \"This collateral cannot be liquidated (LTV set to 0)\"\n    },\n    {\n      \"code\": 6088,\n      \"name\": \"BorrowingDisabled\",\n      \"msg\": \"Borrowing is disabled\"\n    },\n    {\n      \"code\": 6089,\n      \"name\": \"BorrowLimitExceeded\",\n      \"msg\": \"Cannot borrow above borrow limit\"\n    },\n    {\n      \"code\": 6090,\n      \"name\": \"DepositLimitExceeded\",\n      \"msg\": \"Cannot deposit above deposit limit\"\n    },\n    {\n      \"code\": 6091,\n      \"name\": \"BorrowingDisabledOutsideElevationGroup\",\n      \"msg\": \"Reserve does not accept any new borrows outside elevation group\"\n    },\n    {\n      \"code\": 6092,\n      \"name\": \"NetValueRemainingTooSmall\",\n      \"msg\": \"Net value remaining too small\"\n    },\n    {\n      \"code\": 6093,\n      \"name\": \"WorseLtvBlocked\",\n      \"msg\": \"Cannot get the obligation in a worse position\"\n    },\n    {\n      \"code\": 6094,\n      \"name\": \"LiabilitiesBiggerThanAssets\",\n      \"msg\": \"Cannot have more liabilities than assets in a position\"\n    },\n    {\n      \"code\": 6095,\n      \"name\": \"ReserveTokenBalanceMismatch\",\n      \"msg\": \"Reserve state and token account cannot drift\"\n    },\n    {\n      \"code\": 6096,\n      \"name\": \"ReserveVaultBalanceMismatch\",\n      \"msg\": \"Reserve token account has been unexpectedly modified\"\n    },\n    {\n      \"code\": 6097,\n      \"name\": \"ReserveAccountingMismatch\",\n      \"msg\": \"Reserve internal state accounting has been unexpectedly modified\"\n    },\n    {\n      \"code\": 6098,\n      \"name\": \"BorrowingAboveUtilizationRateDisabled\",\n      \"msg\": \"Borrowing above set utilization rate is disabled\"\n    },\n    {\n      \"code\": 6099,\n      \"name\": \"LiquidationBorrowFactorPriority\",\n      \"msg\": \"Liquidation must prioritize the debt with the highest borrow factor\"\n    },\n    {\n      \"code\": 6100,\n      \"name\": \"LiquidationLowestLiquidationLtvPriority\",\n      \"msg\": \"Liquidation must prioritize the collateral with the lowest liquidation LTV\"\n    },\n    {\n      \"code\": 6101,\n      \"name\": \"ElevationGroupBorrowLimitExceeded\",\n      \"msg\": \"Elevation group borrow limit exceeded\"\n    },\n    {\n      \"code\": 6102,\n      \"name\": \"ElevationGroupWithoutDebtReserve\",\n      \"msg\": \"The elevation group does not have a debt reserve defined\"\n    },\n    {\n      \"code\": 6103,\n      \"name\": \"ElevationGroupMaxCollateralReserveZero\",\n      \"msg\": \"The elevation group does not allow any collateral reserves\"\n    },\n    {\n      \"code\": 6104,\n      \"name\": \"ElevationGroupHasAnotherDebtReserve\",\n      \"msg\": \"In elevation group attempt to borrow from a reserve that is not the debt reserve\"\n    },\n    {\n      \"code\": 6105,\n      \"name\": \"ElevationGroupDebtReserveAsCollateral\",\n      \"msg\": \"The elevation group's debt reserve cannot be used as a collateral reserve\"\n    },\n    {\n      \"code\": 6106,\n      \"name\": \"ObligationCollateralExceedsElevationGroupLimit\",\n      \"msg\": \"Obligation have more collateral than the maximum allowed by the elevation group\"\n    },\n    {\n      \"code\": 6107,\n      \"name\": \"ObligationElevationGroupMultipleDebtReserve\",\n      \"msg\": \"Obligation is an elevation group but have more than one debt reserve\"\n    },\n    {\n      \"code\": 6108,\n      \"name\": \"UnsupportedTokenExtension\",\n      \"msg\": \"Mint has a token (2022) extension that is not supported\"\n    },\n    {\n      \"code\": 6109,\n      \"name\": \"InvalidTokenAccount\",\n      \"msg\": \"Can't have an spl token mint with a t22 account\"\n    },\n    {\n      \"code\": 6110,\n      \"name\": \"DepositDisabledOutsideElevationGroup\",\n      \"msg\": \"Can't deposit into this reserve outside elevation group\"\n    },\n    {\n      \"code\": 6111,\n      \"name\": \"CannotCalculateReferralAmountDueToSlotsMismatch\",\n      \"msg\": \"Cannot calculate referral amount due to slots mismatch\"\n    },\n    {\n      \"code\": 6112,\n      \"name\": \"ObligationOwnersMustMatch\",\n      \"msg\": \"Obligation owners must match\"\n    },\n    {\n      \"code\": 6113,\n      \"name\": \"ObligationsMustMatch\",\n      \"msg\": \"Obligations must match\"\n    },\n    {\n      \"code\": 6114,\n      \"name\": \"LendingMarketsMustMatch\",\n      \"msg\": \"Lending markets must match\"\n    },\n    {\n      \"code\": 6115,\n      \"name\": \"ObligationCurrentlyMarkedForDeleveraging\",\n      \"msg\": \"Obligation is already marked for deleveraging\"\n    },\n    {\n      \"code\": 6116,\n      \"name\": \"MaximumWithdrawValueZero\",\n      \"msg\": \"Maximum withdrawable value of this collateral is zero, LTV needs improved\"\n    },\n    {\n      \"code\": 6117,\n      \"name\": \"ZeroMaxLtvAssetsInDeposits\",\n      \"msg\": \"No max LTV 0 assets allowed in deposits for repay and withdraw\"\n    },\n    {\n      \"code\": 6118,\n      \"name\": \"LowestLtvAssetsPriority\",\n      \"msg\": \"Withdrawing must prioritize the collateral with the lowest reserve max-LTV\"\n    },\n    {\n      \"code\": 6119,\n      \"name\": \"WorseLtvThanUnhealthyLtv\",\n      \"msg\": \"Cannot get the obligation liquidatable\"\n    },\n    {\n      \"code\": 6120,\n      \"name\": \"FarmAccountsMissing\",\n      \"msg\": \"Farm accounts to refresh are missing\"\n    },\n    {\n      \"code\": 6121,\n      \"name\": \"RepayTooSmallForFullLiquidation\",\n      \"msg\": \"Repay amount is too small to satisfy the mandatory full liquidation\"\n    },\n    {\n      \"code\": 6122,\n      \"name\": \"InsufficientRepayAmount\",\n      \"msg\": \"Liquidator provided repay amount lower than required by liquidation rules\"\n    },\n    {\n      \"code\": 6123,\n      \"name\": \"OrderIndexOutOfBounds\",\n      \"msg\": \"Obligation order of the given index cannot exist\"\n    },\n    {\n      \"code\": 6124,\n      \"name\": \"InvalidOrderConfiguration\",\n      \"msg\": \"Given order configuration has wrong parameters\"\n    },\n    {\n      \"code\": 6125,\n      \"name\": \"OrderConfigurationNotSupportedByObligation\",\n      \"msg\": \"Given order configuration cannot be used with the current state of the obligation\"\n    },\n    {\n      \"code\": 6126,\n      \"name\": \"OperationNotPermittedWithCurrentObligationOrders\",\n      \"msg\": \"Single debt, single collateral obligation orders have to be cancelled before changing the deposit/borrow count\"\n    },\n    {\n      \"code\": 6127,\n      \"name\": \"OperationNotPermittedMarketImmutable\",\n      \"msg\": \"Cannot update lending market because it is set as immutable\"\n    },\n    {\n      \"code\": 6128,\n      \"name\": \"OrderCreationDisabled\",\n      \"msg\": \"Creation of new orders is disabled\"\n    },\n    {\n      \"code\": 6129,\n      \"name\": \"NoUpgradeAuthority\",\n      \"msg\": \"Cannot initialize global config because there is no upgrade authority to the program\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"UpdateConfigMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UpdateLoanToValuePct\"\n          },\n          {\n            \"name\": \"UpdateMaxLiquidationBonusBps\"\n          },\n          {\n            \"name\": \"UpdateLiquidationThresholdPct\"\n          },\n          {\n            \"name\": \"UpdateProtocolLiquidationFee\"\n          },\n          {\n            \"name\": \"UpdateProtocolTakeRate\"\n          },\n          {\n            \"name\": \"UpdateFeesBorrowFee\"\n          },\n          {\n            \"name\": \"UpdateFeesFlashLoanFee\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateFeesReferralFeeBps\"\n          },\n          {\n            \"name\": \"UpdateDepositLimit\"\n          },\n          {\n            \"name\": \"UpdateBorrowLimit\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoLowerHeuristic\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoUpperHeuristic\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoExpHeuristic\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoTwapDivergence\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoScopeTwap\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoScopeChain\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoName\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoPriceMaxAge\"\n          },\n          {\n            \"name\": \"UpdateTokenInfoTwapMaxAge\"\n          },\n          {\n            \"name\": \"UpdateScopePriceFeed\"\n          },\n          {\n            \"name\": \"UpdatePythPrice\"\n          },\n          {\n            \"name\": \"UpdateSwitchboardFeed\"\n          },\n          {\n            \"name\": \"UpdateSwitchboardTwapFeed\"\n          },\n          {\n            \"name\": \"UpdateBorrowRateCurve\"\n          },\n          {\n            \"name\": \"UpdateEntireReserveConfig\"\n          },\n          {\n            \"name\": \"UpdateDebtWithdrawalCap\"\n          },\n          {\n            \"name\": \"UpdateDepositWithdrawalCap\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateDebtWithdrawalCapCurrentTotal\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateDepositWithdrawalCapCurrentTotal\"\n          },\n          {\n            \"name\": \"UpdateBadDebtLiquidationBonusBps\"\n          },\n          {\n            \"name\": \"UpdateMinLiquidationBonusBps\"\n          },\n          {\n            \"name\": \"UpdateDeleveragingMarginCallPeriod\"\n          },\n          {\n            \"name\": \"UpdateBorrowFactor\"\n          },\n          {\n            \"name\": \"UpdateAssetTier\"\n          },\n          {\n            \"name\": \"UpdateElevationGroup\"\n          },\n          {\n            \"name\": \"UpdateDeleveragingThresholdDecreaseBpsPerDay\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateMultiplierSideBoost\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateMultiplierTagBoost\"\n          },\n          {\n            \"name\": \"UpdateReserveStatus\"\n          },\n          {\n            \"name\": \"UpdateFarmCollateral\"\n          },\n          {\n            \"name\": \"UpdateFarmDebt\"\n          },\n          {\n            \"name\": \"UpdateDisableUsageAsCollateralOutsideEmode\"\n          },\n          {\n            \"name\": \"UpdateBlockBorrowingAboveUtilizationPct\"\n          },\n          {\n            \"name\": \"UpdateBlockPriceUsage\"\n          },\n          {\n            \"name\": \"UpdateBorrowLimitOutsideElevationGroup\"\n          },\n          {\n            \"name\": \"UpdateBorrowLimitsInElevationGroupAgainstThisReserve\"\n          },\n          {\n            \"name\": \"UpdateHostFixedInterestRateBps\"\n          },\n          {\n            \"name\": \"UpdateAutodeleverageEnabled\"\n          },\n          {\n            \"name\": \"UpdateDeleveragingBonusIncreaseBpsPerDay\"\n          },\n          {\n            \"name\": \"UpdateProtocolOrderExecutionFee\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UpdateLendingMarketConfigValue\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Bool\",\n            \"fields\": [\n              \"bool\"\n            ]\n          },\n          {\n            \"name\": \"U8\",\n            \"fields\": [\n              \"u8\"\n            ]\n          },\n          {\n            \"name\": \"U8Array\",\n            \"fields\": [\n              {\n                \"array\": [\n                  \"u8\",\n                  8\n                ]\n              }\n            ]\n          },\n          {\n            \"name\": \"U16\",\n            \"fields\": [\n              \"u16\"\n            ]\n          },\n          {\n            \"name\": \"U64\",\n            \"fields\": [\n              \"u64\"\n            ]\n          },\n          {\n            \"name\": \"U128\",\n            \"fields\": [\n              \"u128\"\n            ]\n          },\n          {\n            \"name\": \"Pubkey\",\n            \"fields\": [\n              \"pubkey\"\n            ]\n          },\n          {\n            \"name\": \"ElevationGroup\",\n            \"fields\": [\n              {\n                \"defined\": {\n                  \"name\": \"ElevationGroup\"\n                }\n              }\n            ]\n          },\n          {\n            \"name\": \"Name\",\n            \"fields\": [\n              {\n                \"array\": [\n                  \"u8\",\n                  32\n                ]\n              }\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UpdateLendingMarketMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"UpdateOwner\"\n          },\n          {\n            \"name\": \"UpdateEmergencyMode\"\n          },\n          {\n            \"name\": \"UpdateLiquidationCloseFactor\"\n          },\n          {\n            \"name\": \"UpdateLiquidationMaxValue\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateGlobalUnhealthyBorrow\"\n          },\n          {\n            \"name\": \"UpdateGlobalAllowedBorrow\"\n          },\n          {\n            \"name\": \"UpdateRiskCouncil\"\n          },\n          {\n            \"name\": \"UpdateMinFullLiquidationThreshold\"\n          },\n          {\n            \"name\": \"UpdateInsolvencyRiskLtv\"\n          },\n          {\n            \"name\": \"UpdateElevationGroup\"\n          },\n          {\n            \"name\": \"UpdateReferralFeeBps\"\n          },\n          {\n            \"name\": \"DeprecatedUpdateMultiplierPoints\"\n          },\n          {\n            \"name\": \"UpdatePriceRefreshTriggerToMaxAgePct\"\n          },\n          {\n            \"name\": \"UpdateAutodeleverageEnabled\"\n          },\n          {\n            \"name\": \"UpdateBorrowingDisabled\"\n          },\n          {\n            \"name\": \"UpdateMinNetValueObligationPostAction\"\n          },\n          {\n            \"name\": \"UpdateMinValueLtvSkipPriorityLiqCheck\"\n          },\n          {\n            \"name\": \"UpdateMinValueBfSkipPriorityLiqCheck\"\n          },\n          {\n            \"name\": \"UpdatePaddingFields\"\n          },\n          {\n            \"name\": \"UpdateName\"\n          },\n          {\n            \"name\": \"UpdateIndividualAutodeleverageMarginCallPeriodSecs\"\n          },\n          {\n            \"name\": \"UpdateInitialDepositAmount\"\n          },\n          {\n            \"name\": \"UpdateObligationOrderExecutionEnabled\"\n          },\n          {\n            \"name\": \"UpdateImmutableFlag\"\n          },\n          {\n            \"name\": \"UpdateObligationOrderCreationEnabled\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UpdateGlobalConfigMode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"PendingAdmin\"\n          },\n          {\n            \"name\": \"FeeCollector\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LastUpdate\",\n      \"docs\": [\n        \"Last update state\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"slot\",\n            \"docs\": [\n              \"Last slot when updated\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"stale\",\n            \"docs\": [\n              \"True when marked stale, false when slot updated\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"price_status\",\n            \"docs\": [\n              \"Status of the prices used to calculate the last update\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"placeholder\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                6\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ElevationGroup\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"max_liquidation_bonus_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"id\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"ltv_pct\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidation_threshold_pct\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"allow_new_loans\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"max_reserves_as_collateral\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding0\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"debt_reserve\",\n            \"docs\": [\n              \"Mandatory debt reserve for this elevation group\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                4\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InitObligationArgs\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"tag\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"id\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ObligationCollateral\",\n      \"docs\": [\n        \"Obligation collateral state\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"deposit_reserve\",\n            \"docs\": [\n              \"Reserve collateral is deposited to\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposited_amount\",\n            \"docs\": [\n              \"Amount of collateral deposited\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"market_value_sf\",\n            \"docs\": [\n              \"Collateral market value in quote currency (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrowed_amount_against_this_collateral_in_elevation_group\",\n            \"docs\": [\n              \"Debt amount (lamport) taken against this collateral.\",\n              \"(only meaningful if this obligation is part of an elevation group, otherwise 0)\",\n              \"This is only indicative of the debt computed on the last refresh obligation.\",\n              \"If the obligation have multiple collateral this value is the same for all of them.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                9\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ObligationLiquidity\",\n      \"docs\": [\n        \"Obligation liquidity state\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"borrow_reserve\",\n            \"docs\": [\n              \"Reserve liquidity is borrowed from\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"cumulative_borrow_rate_bsf\",\n            \"docs\": [\n              \"Borrow rate used for calculating interest (big scaled fraction)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BigFractionBytes\"\n              }\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrowed_amount_sf\",\n            \"docs\": [\n              \"Amount of liquidity borrowed plus interest (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_value_sf\",\n            \"docs\": [\n              \"Liquidity market value in quote currency (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrow_factor_adjusted_market_value_sf\",\n            \"docs\": [\n              \"Risk adjusted liquidity market value in quote currency - DEBUG ONLY - use market_value instead\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrowed_amount_outside_elevation_groups\",\n            \"docs\": [\n              \"Amount of liquidity borrowed outside of an elevation group\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                7\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ObligationOrder\",\n      \"docs\": [\n        \"A single obligation order.\",\n        \"See [Obligation::orders].\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"condition_threshold_sf\",\n            \"docs\": [\n              \"A threshold value used by the condition (scaled [Fraction]).\",\n              \"The exact meaning depends on the specific [Self::condition_type].\",\n              \"\",\n              \"Examples:\",\n              \"- when `condition_type == 2 (UserLtvBelow)`:\",\n              \"then a value of `0.455` here means that the order is active only when the obligation's\",\n              \"user LTV is less than `0.455` (i.e. < 45.5%).\",\n              \"- when `condition_type == 3 (DebtCollPriceRatioAbove)`:\",\n              \"assuming the obligation uses BTC collateral for SOL debt, then a value of `491.3` here\",\n              \"means that the order is active only when the BTC-SOL price is greater than `491.3` (i.e.\",\n              \"> 491.3 SOL per BTC).\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"opportunity_parameter_sf\",\n            \"docs\": [\n              \"A configuration parameter used by the opportunity (scaled [Fraction]).\",\n              \"The exact meaning depends on the specific [Self::opportunity_type].\",\n              \"\",\n              \"Examples:\",\n              \"- when `opportunity_type == 0 (DeleverageSingleDebtAmount)`:\",\n              \"Assuming the obligation uses BTC collateral for SOL debt, then a value of `1_234_000_000`\",\n              \"here means that a liquidator may repay up to 1234000000 lamports (i.e. 1.234 SOL) on this\",\n              \"obligation.\",\n              \"Note: the special value of [Fraction::MAX] is *not* allowed in this case.\",\n              \"- when `opportunity_type == 1 (DeleverageAllDebtAmount)`:\",\n              \"The only allowed value in this case is [Fraction::MAX] (to emphasize that *all* debt\",\n              \"should be repaid).\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"min_execution_bonus_bps\",\n            \"docs\": [\n              \"A *minimum* additional fraction of collateral transferred to the liquidator, in bps.\",\n              \"\",\n              \"The minimum bonus is applied exactly when the [Self::condition_threshold_sf] is met, and\",\n              \"grows linearly towards the [Self::max_execution_bonus_bps].\",\n              \"\",\n              \"Example: a value of `50` here means 50bps == 0.5% bonus for an \\\"LTV > 65%\\\" order, when\",\n              \"executed precisely at the moment LTV exceeds 65%.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_execution_bonus_bps\",\n            \"docs\": [\n              \"A *maximum* additional fraction of collateral transferred to the liquidator, in bps.\",\n              \"\",\n              \"The maximum bonus is applied at the relevant \\\"extreme\\\" state of the obligation, i.e.:\",\n              \"- for a stop-loss condition, it is a point at which the obligation becomes liquidatable;\",\n              \"- for a take-profit condition, it is a point at which obligation has 0% LTV.\",\n              \"\",\n              \"In non-extreme states, the actual bonus value is interpolated linearly, starting from\",\n              \"[Self::min_execution_bonus_bps] (at the point specified by the order's condition).\",\n              \"\",\n              \"Example: a value of `300` here means 300bps == 3.0% bonus for a \\\"debt/coll price > 140\\\"\",\n              \"order, when executed at a higher price = 200, at which the obligation's LTV happens to\",\n              \"be equal to its liquidation LTV.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"condition_type\",\n            \"docs\": [\n              \"Serialized [ConditionType].\",\n              \"The entire order is void when this is zeroed (i.e. representing [ConditionType::Never]).\",\n              \"\",\n              \"Example: a value of `2` here denotes `UserLtvBelow` condition type. Of course, to\",\n              \"interpret this condition, we also need to take the [Self::condition_threshold_sf] into\",\n              \"account.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"opportunity_type\",\n            \"docs\": [\n              \"Serialized [OpportunityType].\",\n              \"\",\n              \"Example: a value of `0` here denotes `DeleverageSingleDebtAmount` opportunity. Of course, to\",\n              \"interpret this opportunity, we also need to take the [Self::opportunity_parameter_sf] into\",\n              \"account.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"docs\": [\n              \"Internal padding.\",\n              \"The fields above take up 2+2+1+1 bytes = 48 bits, which means we need 80 bits = 10 bytes to\",\n              \"align with `u128`s.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                10\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2\",\n            \"docs\": [\n              \"End padding.\",\n              \"The total size of a single instance is 8*u128 = 128 bytes.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                5\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AssetTier\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Regular\"\n          },\n          {\n            \"name\": \"IsolatedCollateral\"\n          },\n          {\n            \"name\": \"IsolatedDebt\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BigFractionBytes\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"value\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                2\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeCalculation\",\n      \"docs\": [\n        \"Calculate fees exlusive or inclusive of an amount\"\n      ],\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Exclusive\"\n          },\n          {\n            \"name\": \"Inclusive\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveCollateral\",\n      \"docs\": [\n        \"Reserve collateral\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint_pubkey\",\n            \"docs\": [\n              \"Reserve collateral mint address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_total_supply\",\n            \"docs\": [\n              \"Reserve collateral mint supply, used for exchange rate\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"supply_vault\",\n            \"docs\": [\n              \"Reserve collateral supply address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                32\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveConfig\",\n      \"docs\": [\n        \"Reserve configuration values\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"status\",\n            \"docs\": [\n              \"Status of the reserve Active/Obsolete/Hidden\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"asset_tier\",\n            \"docs\": [\n              \"Asset tier -> 0 - regular (collateral & debt), 1 - isolated collateral, 2 - isolated debt\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"host_fixed_interest_rate_bps\",\n            \"docs\": [\n              \"Flat rate that goes to the host\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"reserved2\",\n            \"docs\": [\n              \"[DEPRECATED] Space that used to hold 2 fields:\",\n              \"- Boost for side (debt or collateral)\",\n              \"- Reward points multiplier per obligation type\",\n              \"Can be re-used after making sure all underlying production account data is zeroed.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                9\n              ]\n            }\n          },\n          {\n            \"name\": \"protocol_order_execution_fee_pct\",\n            \"docs\": [\n              \"Cut of the order execution bonus that the protocol receives, as a percentage\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"protocol_take_rate_pct\",\n            \"docs\": [\n              \"Protocol take rate is the amount borrowed interest protocol receives, as a percentage\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"protocol_liquidation_fee_pct\",\n            \"docs\": [\n              \"Cut of the liquidation bonus that the protocol receives, as a percentage\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"loan_to_value_pct\",\n            \"docs\": [\n              \"Target ratio of the value of borrows to deposits, as a percentage\",\n              \"0 if use as collateral is disabled\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidation_threshold_pct\",\n            \"docs\": [\n              \"Loan to value ratio at which an obligation can be liquidated, as percentage\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"min_liquidation_bonus_bps\",\n            \"docs\": [\n              \"Minimum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_liquidation_bonus_bps\",\n            \"docs\": [\n              \"Maximum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bad_debt_liquidation_bonus_bps\",\n            \"docs\": [\n              \"Bad debt liquidation bonus for an undercollateralized obligation, as bps\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"deleveraging_margin_call_period_secs\",\n            \"docs\": [\n              \"Time in seconds that must pass before redemptions are enabled after the deposit limit is\",\n              \"crossed.\",\n              \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deleveraging_threshold_decrease_bps_per_day\",\n            \"docs\": [\n              \"The rate at which the deleveraging threshold decreases, in bps per day.\",\n              \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fees\",\n            \"docs\": [\n              \"Program owner fees assessed, separate from gains due to interest accrual\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ReserveFees\"\n              }\n            }\n          },\n          {\n            \"name\": \"borrow_rate_curve\",\n            \"docs\": [\n              \"Borrow rate curve based on utilization\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BorrowRateCurve\"\n              }\n            }\n          },\n          {\n            \"name\": \"borrow_factor_pct\",\n            \"docs\": [\n              \"Borrow factor in percentage - used for risk adjustment\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposit_limit\",\n            \"docs\": [\n              \"Maximum deposit limit of liquidity in native units, u64::MAX for inf\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_limit\",\n            \"docs\": [\n              \"Maximum amount borrowed, u64::MAX for inf, 0 to disable borrows (protected deposits)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"token_info\",\n            \"docs\": [\n              \"Token id from TokenInfos struct\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"TokenInfo\"\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_withdrawal_cap\",\n            \"docs\": [\n              \"Deposit withdrawal caps - deposit & redeem\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WithdrawalCaps\"\n              }\n            }\n          },\n          {\n            \"name\": \"debt_withdrawal_cap\",\n            \"docs\": [\n              \"Debt withdrawal caps - borrow & repay\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"WithdrawalCaps\"\n              }\n            }\n          },\n          {\n            \"name\": \"elevation_groups\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"disable_usage_as_coll_outside_emode\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"utilization_limit_block_borrowing_above_pct\",\n            \"docs\": [\n              \"Utilization (in percentage) above which borrowing is blocked. 0 to disable.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"autodeleverage_enabled\",\n            \"docs\": [\n              \"Whether this reserve should be subject to auto-deleveraging after deposit or borrow limit is\",\n              \"crossed.\",\n              \"Besides this flag, the lending market's flag also needs to be enabled (logical `AND`).\",\n              \"**NOTE:** the manual \\\"target LTV\\\" deleveraging (enabled by the risk council for individual\",\n              \"obligations) is NOT affected by this flag.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"reserved1\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"borrow_limit_outside_elevation_group\",\n            \"docs\": [\n              \"Maximum amount liquidity of this reserve borrowed outside all elevation groups\",\n              \"- u64::MAX for inf\",\n              \"- 0 to disable borrows outside elevation groups\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_limit_against_this_collateral_in_elevation_group\",\n            \"docs\": [\n              \"Defines the maximum amount (in lamports of elevation group debt asset)\",\n              \"that can be borrowed when this reserve is used as collateral.\",\n              \"- u64::MAX for inf\",\n              \"- 0 to disable borrows in this elevation group (expected value for the debt asset)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"deleveraging_bonus_increase_bps_per_day\",\n            \"docs\": [\n              \"The rate at which the deleveraging-related liquidation bonus increases, in bps per day.\",\n              \"Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case.\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveFarmKind\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Collateral\"\n          },\n          {\n            \"name\": \"Debt\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveFees\",\n      \"docs\": [\n        \"Additional fee information on a reserve\",\n        \"\",\n        \"These exist separately from interest accrual fees, and are specifically for the program owner\",\n        \"and referral fee. The fees are paid out as a percentage of liquidity token amounts during\",\n        \"repayments and liquidations.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"borrow_fee_sf\",\n            \"docs\": [\n              \"Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part)\",\n              \"Must be between `0` and `2^60`, such that `2^60 = 1`.  A few examples for\",\n              \"clarity:\",\n              \"1% = (1 << 60) / 100 = 11529215046068470\",\n              \"0.01% (1 basis point) = 115292150460685\",\n              \"0.00001% (Aave borrow fee) = 115292150461\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"flash_loan_fee_sf\",\n            \"docs\": [\n              \"Fee for flash loan, expressed as scaled fraction.\",\n              \"0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding\",\n            \"docs\": [\n              \"Used for allignment\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveLiquidity\",\n      \"docs\": [\n        \"Reserve liquidity\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint_pubkey\",\n            \"docs\": [\n              \"Reserve liquidity mint address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"supply_vault\",\n            \"docs\": [\n              \"Reserve liquidity supply address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_vault\",\n            \"docs\": [\n              \"Reserve liquidity fee collection address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"available_amount\",\n            \"docs\": [\n              \"Reserve liquidity available\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrowed_amount_sf\",\n            \"docs\": [\n              \"Reserve liquidity borrowed (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_price_sf\",\n            \"docs\": [\n              \"Reserve liquidity market price in quote currency (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"market_price_last_updated_ts\",\n            \"docs\": [\n              \"Unix timestamp of the market price (from the oracle)\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"mint_decimals\",\n            \"docs\": [\n              \"Reserve liquidity mint decimals\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposit_limit_crossed_timestamp\",\n            \"docs\": [\n              \"Timestamp when the last refresh reserve detected that the liquidity amount is above the deposit cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.\",\n              \"If the threshold is not crossed, then the timestamp is set to 0\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrow_limit_crossed_timestamp\",\n            \"docs\": [\n              \"Timestamp when the last refresh reserve detected that the borrowed amount is above the borrow cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.\",\n              \"If the threshold is not crossed, then the timestamp is set to 0\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"cumulative_borrow_rate_bsf\",\n            \"docs\": [\n              \"Reserve liquidity cumulative borrow rate (scaled fraction)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"BigFractionBytes\"\n              }\n            }\n          },\n          {\n            \"name\": \"accumulated_protocol_fees_sf\",\n            \"docs\": [\n              \"Reserve cumulative protocol fees (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"accumulated_referrer_fees_sf\",\n            \"docs\": [\n              \"Reserve cumulative referrer fees (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"pending_referrer_fees_sf\",\n            \"docs\": [\n              \"Reserve pending referrer fees, to be claimed in refresh_obligation by referrer or protocol (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"absolute_referral_rate_sf\",\n            \"docs\": [\n              \"Reserve referrer fee absolute rate calculated at each refresh_reserve operation (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"token_program\",\n            \"docs\": [\n              \"Token program of the liquidity mint\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                51\n              ]\n            }\n          },\n          {\n            \"name\": \"padding3\",\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                32\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReserveStatus\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"Active\"\n          },\n          {\n            \"name\": \"Obsolete\"\n          },\n          {\n            \"name\": \"Hidden\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawalCaps\",\n      \"docs\": [\n        \"Reserve Withdrawal Caps State\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"config_capacity\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"current_total\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_interval_start_timestamp\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"config_interval_length_seconds\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PriceHeuristic\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"lower\",\n            \"docs\": [\n              \"Lower value of acceptable price\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"upper\",\n            \"docs\": [\n              \"Upper value of acceptable price\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"exp\",\n            \"docs\": [\n              \"Number of decimals of the previously defined values\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PythConfiguration\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price\",\n            \"docs\": [\n              \"Pubkey of the base price feed (disabled if `null` or `default`)\"\n            ],\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ScopeConfiguration\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price_feed\",\n            \"docs\": [\n              \"Pubkey of the scope price feed (disabled if `null` or `default`)\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"price_chain\",\n            \"docs\": [\n              \"This is the scope_id price chain that results in a price for the token\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"twap_chain\",\n            \"docs\": [\n              \"This is the scope_id price chain for the twap\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u16\",\n                4\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SwitchboardConfiguration\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"price_aggregator\",\n            \"docs\": [\n              \"Pubkey of the base price feed (disabled if `null` or `default`)\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"twap_aggregator\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"TokenInfo\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"name\",\n            \"docs\": [\n              \"UTF-8 encoded name of the token (null-terminated)\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"heuristic\",\n            \"docs\": [\n              \"Heuristics limits of acceptable price\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PriceHeuristic\"\n              }\n            }\n          },\n          {\n            \"name\": \"max_twap_divergence_bps\",\n            \"docs\": [\n              \"Max divergence between twap and price in bps\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_age_price_seconds\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_age_twap_seconds\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"scope_configuration\",\n            \"docs\": [\n              \"Scope price configuration\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ScopeConfiguration\"\n              }\n            }\n          },\n          {\n            \"name\": \"switchboard_configuration\",\n            \"docs\": [\n              \"Switchboard configuration\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"SwitchboardConfiguration\"\n              }\n            }\n          },\n          {\n            \"name\": \"pyth_configuration\",\n            \"docs\": [\n              \"Pyth configuration\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PythConfiguration\"\n              }\n            }\n          },\n          {\n            \"name\": \"block_price_usage\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"reserved\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                19\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BorrowRateCurve\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"points\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"CurvePoint\"\n                  }\n                },\n                11\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CurvePoint\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"utilization_rate_bps\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"borrow_rate_bps\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserState\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_id\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"farm_state\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"is_farm_delegated\",\n            \"docs\": [\n              \"Indicate if this user state is part of a delegated farm\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding0\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                7\n              ]\n            }\n          },\n          {\n            \"name\": \"rewards_tally_scaled\",\n            \"docs\": [\n              \"Rewards tally used for computation of gained rewards\",\n              \"(scaled from `Decimal` representation).\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                10\n              ]\n            }\n          },\n          {\n            \"name\": \"rewards_issued_unclaimed\",\n            \"docs\": [\n              \"Number of reward tokens ready for claim\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                10\n              ]\n            }\n          },\n          {\n            \"name\": \"last_claim_ts\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                10\n              ]\n            }\n          },\n          {\n            \"name\": \"active_stake_scaled\",\n            \"docs\": [\n              \"User stake deposited and usable, generating rewards and fees.\",\n              \"(scaled from `Decimal` representation).\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"pending_deposit_stake_scaled\",\n            \"docs\": [\n              \"User stake deposited but not usable and not generating rewards yet.\",\n              \"(scaled from `Decimal` representation).\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"pending_deposit_stake_ts\",\n            \"docs\": [\n              \"After this timestamp, pending user stake can be moved to user stake\",\n              \"Initialized to now() + delayed user stake period\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pending_withdrawal_unstake_scaled\",\n            \"docs\": [\n              \"User deposits unstaked, pending for withdrawal, not usable and not generating rewards.\",\n              \"(scaled from `Decimal` representation).\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"pending_withdrawal_unstake_ts\",\n            \"docs\": [\n              \"After this timestamp, user can withdraw their deposit.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"User bump used for account address validation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"delegatee\",\n            \"docs\": [\n              \"Delegatee used for initialisation - useful to check against\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"last_stake_ts\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                50\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"GlobalConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"global_admin\",\n            \"docs\": [\n              \"Global admin of the program\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pending_admin\",\n            \"docs\": [\n              \"Pending admin must sign a specific transaction to become the global admin\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_collector\",\n            \"docs\": [\n              \"Fee collector is the only allowed owner of token accounts receiving protocol fees\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding\",\n            \"docs\": [\n              \"Padding to make the struct size 1024 bytes\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                928\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LendingMarket\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"version\",\n            \"docs\": [\n              \"Version of lending market\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump_seed\",\n            \"docs\": [\n              \"Bump seed for derived authority address\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lending_market_owner\",\n            \"docs\": [\n              \"Owner authority which can add new reserves\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lending_market_owner_cached\",\n            \"docs\": [\n              \"Temporary cache of the lending market owner, used in update_lending_market_owner\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"quote_currency\",\n            \"docs\": [\n              \"Currency market prices are quoted in\",\n              \"e.g. \\\"USD\\\" null padded (`*b\\\"USD\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\"`) or a SPL token mint pubkey\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"referral_fee_bps\",\n            \"docs\": [\n              \"Referral fee for the lending market, as bps out of the total protocol fee\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"emergency_mode\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"autodeleverage_enabled\",\n            \"docs\": [\n              \"Whether the obligations on this market should be subject to auto-deleveraging after deposit\",\n              \"or borrow limit is crossed.\",\n              \"Besides this flag, the particular reserve's flag also needs to be enabled (logical `AND`).\",\n              \"**NOTE:** this also affects the individual \\\"target LTV\\\" deleveraging.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"borrow_disabled\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"price_refresh_trigger_to_max_age_pct\",\n            \"docs\": [\n              \"Refresh price from oracle only if it's older than this percentage of the price max age.\",\n              \"e.g. if the max age is set to 100s and this is set to 80%, the price will be refreshed if it's older than 80s.\",\n              \"Price is always refreshed if this set to 0.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"liquidation_max_debt_close_factor_pct\",\n            \"docs\": [\n              \"Percentage of the total borrowed value in an obligation available for liquidation\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"insolvency_risk_unhealthy_ltv_pct\",\n            \"docs\": [\n              \"Minimum acceptable unhealthy LTV before max_debt_close_factor_pct becomes 100%\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"min_full_liquidation_value_threshold\",\n            \"docs\": [\n              \"Minimum liquidation value threshold triggering full liquidation for an obligation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_liquidatable_debt_market_value_at_once\",\n            \"docs\": [\n              \"Max allowed liquidation value in one ix call\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"reserved0\",\n            \"docs\": [\n              \"[DEPRECATED] Global maximum unhealthy borrow value allowed for any obligation\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"global_allowed_borrow_value\",\n            \"docs\": [\n              \"Global maximum allowed borrow value allowed for any obligation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"risk_council\",\n            \"docs\": [\n              \"The address of the risk council, in charge of making parameter and risk decisions on behalf of the protocol\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"reserved1\",\n            \"docs\": [\n              \"[DEPRECATED] Reward points multiplier per obligation type\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"elevation_groups\",\n            \"docs\": [\n              \"Elevation groups are used to group together reserves that have the same risk parameters and can bump the ltv and liquidation threshold\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"ElevationGroup\"\n                  }\n                },\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"elevation_group_padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                90\n              ]\n            }\n          },\n          {\n            \"name\": \"min_net_value_in_obligation_sf\",\n            \"docs\": [\n              \"Min net value accepted to be found in a position after any lending action in an obligation (scaled by quote currency decimals)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"min_value_skip_liquidation_ltv_checks\",\n            \"docs\": [\n              \"Minimum value to enforce smallest ltv priority checks on the collateral reserves on liquidation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"name\",\n            \"docs\": [\n              \"Market name, zero-padded.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"min_value_skip_liquidation_bf_checks\",\n            \"docs\": [\n              \"Minimum value to enforce highest borrow factor priority checks on the debt reserves on liquidation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"individual_autodeleverage_margin_call_period_secs\",\n            \"docs\": [\n              \"Time (in seconds) that must pass before liquidation is allowed on an obligation that has\",\n              \"been individually marked for auto-deleveraging (by the risk council).\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_initial_deposit_amount\",\n            \"docs\": [\n              \"Minimum amount of deposit at creation of a reserve to prevent artificial inflation\",\n              \"Note: this amount cannot be recovered, the ctoken associated are never minted\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"obligation_order_execution_enabled\",\n            \"docs\": [\n              \"Whether the obligation orders should be evaluated during liquidations.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"immutable\",\n            \"docs\": [\n              \"Whether the lending market is set as immutable.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"obligation_order_creation_enabled\",\n            \"docs\": [\n              \"Whether new obligation orders can be created.\",\n              \"Note: updating or cancelling existing orders is *not* affected by this flag.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                169\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Obligation\",\n      \"docs\": [\n        \"Lending market obligation state\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"tag\",\n            \"docs\": [\n              \"Version of the struct\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Last update to collateral, liquidity, or their market values\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LastUpdate\"\n              }\n            }\n          },\n          {\n            \"name\": \"lending_market\",\n            \"docs\": [\n              \"Lending market address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"docs\": [\n              \"Owner authority which can borrow liquidity\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposits\",\n            \"docs\": [\n              \"Deposited collateral for the obligation, unique by deposit reserve address\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"ObligationCollateral\"\n                  }\n                },\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"lowest_reserve_deposit_liquidation_ltv\",\n            \"docs\": [\n              \"Worst LTV for the collaterals backing the loan, represented as a percentage\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposited_value_sf\",\n            \"docs\": [\n              \"Market value of deposits (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrows\",\n            \"docs\": [\n              \"Borrowed liquidity for the obligation, unique by borrow reserve address\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"ObligationLiquidity\"\n                  }\n                },\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"borrow_factor_adjusted_debt_value_sf\",\n            \"docs\": [\n              \"Risk adjusted market value of borrows/debt (sum of price * borrowed_amount * borrow_factor) (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"borrowed_assets_market_value_sf\",\n            \"docs\": [\n              \"Market value of borrows - used for max_liquidatable_borrowed_amount (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"allowed_borrow_value_sf\",\n            \"docs\": [\n              \"The maximum borrow value at the weighted average loan to value ratio (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"unhealthy_borrow_value_sf\",\n            \"docs\": [\n              \"The dangerous borrow value at the weighted average liquidation threshold (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"deposits_asset_tiers\",\n            \"docs\": [\n              \"The asset tier of the deposits\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                8\n              ]\n            }\n          },\n          {\n            \"name\": \"borrows_asset_tiers\",\n            \"docs\": [\n              \"The asset tier of the borrows\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                5\n              ]\n            }\n          },\n          {\n            \"name\": \"elevation_group\",\n            \"docs\": [\n              \"The elevation group id the obligation opted into.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"num_of_obsolete_deposit_reserves\",\n            \"docs\": [\n              \"The number of obsolete reserves the obligation has a deposit in\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"has_debt\",\n            \"docs\": [\n              \"Marked = 1 if borrows array is not empty, 0 = borrows empty\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"referrer\",\n            \"docs\": [\n              \"Wallet address of the referrer\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"borrowing_disabled\",\n            \"docs\": [\n              \"Marked = 1 if borrowing disabled, 0 = borrowing enabled\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"autodeleverage_target_ltv_pct\",\n            \"docs\": [\n              \"A target LTV set by the risk council when marking this obligation for deleveraging.\",\n              \"Only effective when `deleveraging_margin_call_started_slot != 0`.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"lowest_reserve_deposit_max_ltv_pct\",\n            \"docs\": [\n              \"The lowest max LTV found amongst the collateral deposits\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"num_of_obsolete_borrow_reserves\",\n            \"docs\": [\n              \"The number of obsolete reserves the obligation has a borrow in\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"reserved\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                4\n              ]\n            }\n          },\n          {\n            \"name\": \"highest_borrow_factor_pct\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"autodeleverage_margin_call_started_timestamp\",\n            \"docs\": [\n              \"A timestamp at which the risk council most-recently marked this obligation for deleveraging.\",\n              \"Zero if not currently subject to deleveraging.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"orders\",\n            \"docs\": [\n              \"Owner-defined, liquidator-executed orders applicable to this obligation.\",\n              \"Typical use-cases would be a stop-loss and a take-profit (possibly co-existing).\"\n            ],\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": {\n                    \"name\": \"ObligationOrder\"\n                  }\n                },\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"padding3\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                93\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReferrerState\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"short_url\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ReferrerTokenState\",\n      \"docs\": [\n        \"Referrer account -> each owner can have multiple accounts for specific reserves\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"referrer\",\n            \"docs\": [\n              \"Pubkey of the referrer/owner\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"docs\": [\n              \"Token mint for the account\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_unclaimed_sf\",\n            \"docs\": [\n              \"Amount that has been accumulated and not claimed yet -> available to claim (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"amount_cumulative_sf\",\n            \"docs\": [\n              \"Amount that has been accumulated in total -> both already claimed and unclaimed (scaled fraction)\"\n            ],\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"Referrer token state bump, used for address validation\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                31\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ShortUrl\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"referrer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"short_url\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"UserMetadata\",\n      \"docs\": [\n        \"Referrer account -> each owner can have multiple accounts for specific reserves\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"referrer\",\n            \"docs\": [\n              \"Pubkey of the referrer/owner - pubkey::default if no referrer\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"Bump used for validation of account address\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_lookup_table\",\n            \"docs\": [\n              \"User lookup table - used to store all user accounts - atas for each reserve mint, each obligation PDA, UserMetadata itself and all referrer_token_states if there is a referrer\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"docs\": [\n              \"User metadata account owner\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"padding1\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                51\n              ]\n            }\n          },\n          {\n            \"name\": \"padding2\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                64\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Reserve\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"version\",\n            \"docs\": [\n              \"Version of the reserve\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"last_update\",\n            \"docs\": [\n              \"Last slot when supply and rates updated\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LastUpdate\"\n              }\n            }\n          },\n          {\n            \"name\": \"lending_market\",\n            \"docs\": [\n              \"Lending market address\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_collateral\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_debt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"liquidity\",\n            \"docs\": [\n              \"Reserve liquidity\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ReserveLiquidity\"\n              }\n            }\n          },\n          {\n            \"name\": \"reserve_liquidity_padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                150\n              ]\n            }\n          },\n          {\n            \"name\": \"collateral\",\n            \"docs\": [\n              \"Reserve collateral\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ReserveCollateral\"\n              }\n            }\n          },\n          {\n            \"name\": \"reserve_collateral_padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                150\n              ]\n            }\n          },\n          {\n            \"name\": \"config\",\n            \"docs\": [\n              \"Reserve configuration values\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ReserveConfig\"\n              }\n            }\n          },\n          {\n            \"name\": \"config_padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                116\n              ]\n            }\n          },\n          {\n            \"name\": \"borrowed_amount_outside_elevation_group\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"borrowed_amounts_against_this_reserve_in_elevation_groups\",\n            \"docs\": [\n              \"Amount of token borrowed in lamport of debt asset in the given\",\n              \"elevation group when this reserve is part of the collaterals.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"padding\",\n            \"type\": {\n              \"array\": [\n                \"u64\",\n                207\n              ]\n            }\n          }\n        ]\n      }\n    }\n  ]\n}","import { Farms } from \"./kfarms\";\nimport KFARMS_IDL_JSON from \"./kfarms.json\";\nimport { KaminoLending } from \"./klend\";\nimport KLEND_IDL_JSON from \"./klend.json\";\n\nexport const KLEND_IDL = KLEND_IDL_JSON as KaminoLending;\nexport const KFARMS_IDL = KFARMS_IDL_JSON as Farms;\nexport type KlendIdlType = KaminoLending;\nexport type KfarmsIdlType = Farms;\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport * as borsh from \"@coral-xyz/borsh\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { KLEND_IDL } from \"../../idl\";\nimport {\n  KaminoInterestRateBasis,\n  KaminoObligation,\n  KaminoObligationJSON,\n  KaminoReserve,\n  KaminoReserveJSON,\n  ObligationRaw,\n  ReserveRaw,\n} from \"../../types\";\n\nexport const KLEND_ACCOUNT_CODER = new BorshCoder(KLEND_IDL);\n\nconst reserveDiscriminator = Buffer.from([43, 242, 204, 202, 26, 247, 59, 127]);\n\nconst obligationDiscriminator = Buffer.from([168, 206, 141, 106, 88, 76, 172, 167]);\n\nconst obligationLayout = borsh.struct<ObligationRaw>([\n  borsh.u64(\"tag\"),\n  borsh.struct(\n    [\n      borsh.u64(\"slot\"),\n      borsh.u8(\"stale\"),\n      borsh.u8(\"priceStatus\"),\n      borsh.array(borsh.u8(), 6, \"placeholder\"),\n    ],\n    \"lastUpdate\"\n  ),\n  borsh.publicKey(\"lendingMarket\"),\n  borsh.publicKey(\"owner\"),\n  borsh.array(\n    borsh.struct([\n      borsh.publicKey(\"depositReserve\"),\n      borsh.u64(\"depositedAmount\"),\n      borsh.u128(\"marketValueSf\"),\n      borsh.u64(\"borrowedAmountAgainstThisCollateralInElevationGroup\"),\n      borsh.array(borsh.u64(), 9, \"padding\"),\n    ]),\n    8,\n    \"deposits\"\n  ),\n  borsh.u64(\"lowestReserveDepositLiquidationLtv\"),\n  borsh.u128(\"depositedValueSf\"),\n  borsh.array(\n    borsh.struct([\n      borsh.publicKey(\"borrowReserve\"),\n      borsh.struct(\n        [borsh.array(borsh.u64(), 4, \"value\"), borsh.array(borsh.u64(), 2, \"padding\")],\n        \"cumulativeBorrowRateBsf\"\n      ),\n      borsh.u64(\"padding\"),\n      borsh.u128(\"borrowedAmountSf\"),\n      borsh.u128(\"marketValueSf\"),\n      borsh.u128(\"borrowFactorAdjustedMarketValueSf\"),\n      borsh.u64(\"borrowedAmountOutsideElevationGroups\"),\n      borsh.array(borsh.u64(), 7, \"padding2\"),\n    ]),\n    5,\n    \"borrows\"\n  ),\n  borsh.u128(\"borrowFactorAdjustedDebtValueSf\"),\n  borsh.u128(\"borrowedAssetsMarketValueSf\"),\n  borsh.u128(\"allowedBorrowValueSf\"),\n  borsh.u128(\"unhealthyBorrowValueSf\"),\n  borsh.array(borsh.u8(), 8, \"depositsAssetTiers\"),\n  borsh.array(borsh.u8(), 5, \"borrowsAssetTiers\"),\n  borsh.u8(\"elevationGroup\"),\n  borsh.u8(\"numOfObsoleteDepositReserves\"),\n  borsh.u8(\"hasDebt\"),\n  borsh.publicKey(\"referrer\"),\n  borsh.u8(\"borrowingDisabled\"),\n  borsh.u8(\"autodeleverageTargetLtvPct\"),\n  borsh.u8(\"lowestReserveDepositMaxLtvPct\"),\n  borsh.u8(\"numOfObsoleteBorrowReserves\"),\n  borsh.array(borsh.u8(), 4, \"reserved\"),\n  borsh.u64(\"highestBorrowFactorPct\"),\n  borsh.u64(\"autodeleverageMarginCallStartedTimestamp\"),\n  borsh.array(\n    borsh.struct([\n      borsh.u128(\"conditionThresholdSf\"),\n      borsh.u128(\"opportunityParameterSf\"),\n      borsh.u16(\"minExecutionBonusBps\"),\n      borsh.u16(\"maxExecutionBonusBps\"),\n      borsh.u8(\"conditionType\"),\n      borsh.u8(\"opportunityType\"),\n      borsh.array(borsh.u8(), 10, \"padding1\"),\n      borsh.array(borsh.u128(), 5, \"padding2\"),\n    ]),\n    2,\n    \"orders\"\n  ),\n  borsh.array(borsh.u64(), 93, \"padding3\"),\n]);\n\nconst reserveLayout = borsh.struct<ReserveRaw>([\n  borsh.u64(\"version\"),\n  borsh.struct(\n    [\n      borsh.u64(\"slot\"),\n      borsh.u8(\"stale\"),\n      borsh.u8(\"priceStatus\"),\n      borsh.array(borsh.u8(), 6, \"placeholder\"),\n    ],\n    \"lastUpdate\"\n  ),\n  borsh.publicKey(\"lendingMarket\"),\n  borsh.publicKey(\"farmCollateral\"),\n  borsh.publicKey(\"farmDebt\"),\n  borsh.struct(\n    [\n      borsh.publicKey(\"mintPubkey\"),\n      borsh.publicKey(\"supplyVault\"),\n      borsh.publicKey(\"feeVault\"),\n      borsh.u64(\"availableAmount\"),\n      borsh.u128(\"borrowedAmountSf\"),\n      borsh.u128(\"marketPriceSf\"),\n      borsh.u64(\"marketPriceLastUpdatedTs\"),\n      borsh.u64(\"mintDecimals\"),\n      borsh.u64(\"depositLimitCrossedTimestamp\"),\n      borsh.u64(\"borrowLimitCrossedTimestamp\"),\n      borsh.struct(\n        [borsh.array(borsh.u64(), 4, \"value\"), borsh.array(borsh.u64(), 2, \"padding\")],\n        \"cumulativeBorrowRateBsf\"\n      ),\n      borsh.u128(\"accumulatedProtocolFeesSf\"),\n      borsh.u128(\"accumulatedReferrerFeesSf\"),\n      borsh.u128(\"pendingReferrerFeesSf\"),\n      borsh.u128(\"absoluteReferralRateSf\"),\n      borsh.publicKey(\"tokenProgram\"),\n      borsh.array(borsh.u64(), 51, \"padding2\"),\n      borsh.array(borsh.u128(), 32, \"padding3\"),\n    ],\n    \"liquidity\"\n  ),\n  borsh.array(borsh.u64(), 150, \"reserveLiquidityPadding\"),\n  borsh.struct(\n    [\n      borsh.publicKey(\"mintPubkey\"),\n      borsh.u64(\"mintTotalSupply\"),\n      borsh.publicKey(\"supplyVault\"),\n      borsh.array(borsh.u128(), 32, \"padding1\"),\n      borsh.array(borsh.u128(), 32, \"padding2\"),\n    ],\n    \"collateral\"\n  ),\n  borsh.array(borsh.u64(), 150, \"reserveCollateralPadding\"),\n  borsh.struct(\n    [\n      borsh.u8(\"status\"),\n      borsh.u8(\"assetTier\"),\n      borsh.u16(\"hostFixedInterestRateBps\"),\n      borsh.u16(\"minDeleveragingBonusBps\"),\n      borsh.u8(\"blockCtokenUsage\"),\n      borsh.u8(\"earlyRepayRemainingInterestPct\"),\n      borsh.u8(\"emergencyMode\"),\n      borsh.u8(\"interestRateBasis\"),\n      borsh.array(borsh.u8(), 3, \"reserved2\"),\n      borsh.u8(\"protocolOrderExecutionFeePct\"),\n      borsh.u8(\"protocolTakeRatePct\"),\n      borsh.u8(\"protocolLiquidationFeePct\"),\n      borsh.u8(\"loanToValuePct\"),\n      borsh.u8(\"liquidationThresholdPct\"),\n      borsh.u16(\"minLiquidationBonusBps\"),\n      borsh.u16(\"maxLiquidationBonusBps\"),\n      borsh.u16(\"badDebtLiquidationBonusBps\"),\n      borsh.u64(\"deleveragingMarginCallPeriodSecs\"),\n      borsh.u64(\"deleveragingThresholdDecreaseBpsPerDay\"),\n      borsh.struct(\n        [\n          borsh.u64(\"borrowFeeSf\"),\n          borsh.u64(\"flashLoanFeeSf\"),\n          borsh.array(borsh.u8(), 8, \"padding\"),\n        ],\n        \"fees\"\n      ),\n      borsh.struct(\n        [\n          borsh.array(\n            borsh.struct([borsh.u32(\"utilizationRateBps\"), borsh.u32(\"borrowRateBps\")]),\n            11,\n            \"points\"\n          ),\n        ],\n        \"borrowRateCurve\"\n      ),\n      borsh.u64(\"borrowFactorPct\"),\n      borsh.u64(\"depositLimit\"),\n      borsh.u64(\"borrowLimit\"),\n      borsh.struct(\n        [\n          borsh.array(borsh.u8(), 32, \"name\"),\n          borsh.struct([borsh.u64(\"lower\"), borsh.u64(\"upper\"), borsh.u64(\"exp\")], \"heuristic\"),\n          borsh.u64(\"maxTwapDivergenceBps\"),\n          borsh.u64(\"maxAgePriceSeconds\"),\n          borsh.u64(\"maxAgeTwapSeconds\"),\n          borsh.struct(\n            [\n              borsh.publicKey(\"priceFeed\"),\n              borsh.array(borsh.u16(), 4, \"priceChain\"),\n              borsh.array(borsh.u16(), 4, \"twapChain\"),\n            ],\n            \"scopeConfiguration\"\n          ),\n          borsh.struct(\n            [borsh.publicKey(\"priceAggregator\"), borsh.publicKey(\"twapAggregator\")],\n            \"switchboardConfiguration\"\n          ),\n          borsh.struct([borsh.publicKey(\"price\")], \"pythConfiguration\"),\n          borsh.u8(\"blockPriceUsage\"),\n          borsh.array(borsh.u8(), 7, \"reserved\"),\n          borsh.array(borsh.u64(), 19, \"padding\"),\n        ],\n        \"tokenInfo\"\n      ),\n      borsh.struct(\n        [\n          borsh.i64(\"configCapacity\"),\n          borsh.i64(\"currentTotal\"),\n          borsh.u64(\"lastIntervalStartTimestamp\"),\n          borsh.u64(\"configIntervalLengthSeconds\"),\n        ],\n        \"depositWithdrawalCap\"\n      ),\n      borsh.struct(\n        [\n          borsh.i64(\"configCapacity\"),\n          borsh.i64(\"currentTotal\"),\n          borsh.u64(\"lastIntervalStartTimestamp\"),\n          borsh.u64(\"configIntervalLengthSeconds\"),\n        ],\n        \"debtWithdrawalCap\"\n      ),\n      borsh.array(borsh.u8(), 20, \"elevationGroups\"),\n      borsh.u8(\"disableUsageAsCollOutsideEmode\"),\n      borsh.u8(\"utilizationLimitBlockBorrowingAbovePct\"),\n      borsh.u8(\"autodeleverageEnabled\"),\n      borsh.array(borsh.u8(), 1, \"reserved1\"),\n      borsh.u64(\"borrowLimitOutsideElevationGroup\"),\n      borsh.array(borsh.u64(), 32, \"borrowLimitAgainstThisCollateralInElevationGroup\"),\n      borsh.u64(\"deleveragingBonusIncreaseBpsPerDay\"),\n    ],\n    \"config\"\n  ),\n  borsh.array(borsh.u64(), 116, \"configPadding\"),\n  borsh.u64(\"borrowedAmountOutsideElevationGroup\"),\n  borsh.array(borsh.u64(), 32, \"borrowedAmountsAgainstThisReserveInElevationGroups\"),\n  borsh.array(borsh.u64(), 207, \"padding\"),\n]);\n\nexport function decodeKlendReserveData(data: Buffer): ReserveRaw {\n  if (!data.slice(0, 8).equals(reserveDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const dec = reserveLayout.decode(data.slice(8));\n  return dec;\n}\n\nexport function decodeKlendObligationData(data: Buffer): ObligationRaw {\n  if (!data.slice(0, 8).equals(obligationDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const dec = obligationLayout.decode(data.slice(8));\n  return dec;\n}\n\nexport function dtoToKaminoObligation(obligationDto: KaminoObligationJSON): KaminoObligation {\n  return {\n    lendingMarket: new PublicKey(obligationDto.lendingMarket),\n    owner: new PublicKey(obligationDto.owner),\n    // Hosted endpoints may prune empty position arrays from the payload\n    deposits: (obligationDto.deposits ?? []).map((item) => ({\n      depositReserve: new PublicKey(item.depositReserve),\n      depositedAmount: new BN(item.depositedAmount),\n      marketValueSf: new BN(item.marketValueSf),\n    })),\n    borrows: (obligationDto.borrows ?? []).map((item) => ({\n      borrowReserve: new PublicKey(item.borrowReserve),\n      borrowedAmountSf: new BN(item.borrowedAmountSf),\n      marketValueSf: new BN(item.marketValueSf),\n    })),\n  };\n}\n\nexport function dtoToKaminoReserve(reserveDto: KaminoReserveJSON): KaminoReserve {\n  return {\n    lendingMarket: new PublicKey(reserveDto.lendingMarket),\n    farmCollateral: new PublicKey(reserveDto.farmCollateral),\n    liquidity: {\n      mintPubkey: new PublicKey(reserveDto.liquidity.mintPubkey),\n      supplyVault: new PublicKey(reserveDto.liquidity.supplyVault),\n      mintDecimals: new BN(reserveDto.liquidity.mintDecimals),\n      availableAmount: new BN(reserveDto.liquidity.availableAmount),\n      borrowedAmountSf: new BN(reserveDto.liquidity.borrowedAmountSf),\n      accumulatedProtocolFeesSf: new BN(reserveDto.liquidity.accumulatedProtocolFeesSf),\n      accumulatedReferrerFeesSf: new BN(reserveDto.liquidity.accumulatedReferrerFeesSf),\n      pendingReferrerFeesSf: new BN(reserveDto.liquidity.pendingReferrerFeesSf),\n    },\n    collateral: {\n      mintPubkey: new PublicKey(reserveDto.collateral.mintPubkey),\n      mintTotalSupply: new BN(reserveDto.collateral.mintTotalSupply),\n      supplyVault: new PublicKey(reserveDto.collateral.supplyVault),\n    },\n    config: {\n      protocolTakeRatePct: reserveDto.config.protocolTakeRatePct,\n      hostFixedInterestRateBps: reserveDto.config.hostFixedInterestRateBps,\n      interestRateBasis: reserveDto.config.interestRateBasis ?? KaminoInterestRateBasis.Legacy,\n      depositLimit: new BN(reserveDto.config.depositLimit),\n      borrowLimit: new BN(reserveDto.config.borrowLimit),\n      borrowRateCurve: {\n        points: reserveDto.config.borrowRateCurve.points.map((item) => ({\n          utilizationRateBps: item.utilizationRateBps,\n          borrowRateBps: item.borrowRateBps,\n        })),\n      },\n      tokenInfo: {\n        scopeConfiguration: {\n          priceFeed: new PublicKey(reserveDto.config.tokenInfo.scopeConfiguration.priceFeed),\n        },\n        switchboardConfiguration: {\n          priceAggregator: new PublicKey(\n            reserveDto.config.tokenInfo.switchboardConfiguration.priceAggregator\n          ),\n          twapAggregator: new PublicKey(\n            reserveDto.config.tokenInfo.switchboardConfiguration.twapAggregator\n          ),\n        },\n        pythConfiguration: {\n          price: new PublicKey(reserveDto.config.tokenInfo.pythConfiguration.price),\n        },\n      },\n    },\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { KLEND_PROGRAM_ID } from \"../../constants\";\n\nexport const SEED_LENDING_MARKET_AUTH = \"lma\";\nexport const SEED_RESERVE_LIQ_SUPPLY = \"reserve_liq_supply\";\nexport const SEED_FEE_RECEIVER = \"fee_receiver\";\nexport const SEED_RESERVE_COLL_MINT = \"reserve_coll_mint\";\nexport const SEED_RESERVE_COLL_SUPPLY = \"reserve_coll_supply\";\nexport const SEED_BASE_REFERRER_TOKEN_STATE = \"referrer_acc\";\nexport const SEED_BASE_USER_METADATA = \"user_meta\";\nexport const SEED_BASE_REFERRER_STATE = \"ref_state\";\nexport const SEED_BASE_SHORT_URL = \"short_url\";\nexport const SEED_USER_STATE = \"user\";\n\n/** @deprecated Kamino changed derivation logic. Do not use. */\nexport function getAllDerivedKaminoAccounts(\n  lendingMarket: PublicKey,\n  reserveLiquidityMint: PublicKey\n) {\n  return {\n    lendingMarketAuthority: deriveLendingMarketAuthority(lendingMarket)[0],\n    reserveLiquiditySupply: deriveReserveLiquiditySupply(lendingMarket, reserveLiquidityMint)[0],\n    reserveCollateralMint: deriveReserveCollateralMint(lendingMarket, reserveLiquidityMint)[0],\n    reserveDestinationDepositCollateral: deriveReserveCollateralSupply(\n      lendingMarket,\n      reserveLiquidityMint\n    )[0],\n  };\n}\n\nexport function deriveLendingMarketAuthority(lendingMarket: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_LENDING_MARKET_AUTH), lendingMarket.toBuffer()],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveReserveLiquiditySupply(\n  lendingMarket: PublicKey,\n  reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEED_RESERVE_LIQ_SUPPLY),\n      lendingMarket.toBuffer(),\n      reserveLiquidityMint.toBuffer(),\n    ],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveFeeReceiver(\n  lendingMarket: PublicKey,\n  reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_FEE_RECEIVER), lendingMarket.toBuffer(), reserveLiquidityMint.toBuffer()],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveReserveCollateralMint(\n  lendingMarket: PublicKey,\n  reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEED_RESERVE_COLL_MINT),\n      lendingMarket.toBuffer(),\n      reserveLiquidityMint.toBuffer(),\n    ],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveReserveCollateralSupply(\n  lendingMarket: PublicKey,\n  reserveLiquidityMint: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEED_RESERVE_COLL_SUPPLY),\n      lendingMarket.toBuffer(),\n      reserveLiquidityMint.toBuffer(),\n    ],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveReferrerTokenState(referrer: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_BASE_REFERRER_TOKEN_STATE), referrer.toBuffer()],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveUserMetadata(user: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_BASE_USER_METADATA), user.toBuffer()],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveReferrerState(user: PublicKey): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_BASE_REFERRER_STATE), user.toBuffer()],\n    KLEND_PROGRAM_ID\n  );\n}\n\nexport function deriveShortUrl(identifier: Buffer): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_BASE_SHORT_URL), identifier],\n    KLEND_PROGRAM_ID\n  );\n}\n\n/**\n * Typically the obligation for each bank will have tag and id = 0\n * @param ownerPublicKey\n * @param marketPublicKey\n * @param programId - Default KLEND_PROGRAM_ID\n * @param seed1AccountKey - Default PublicKey.default\n * @param seed2AccountKey - Default PublicKey.default\n * @param tag - Default 0\n * @param id - Default 0\n * @returns\n */\nexport const deriveBaseObligation = (\n  ownerPublicKey: PublicKey,\n  marketPublicKey: PublicKey,\n  programId: PublicKey = KLEND_PROGRAM_ID,\n  seed1AccountKey: PublicKey = PublicKey.default,\n  seed2AccountKey: PublicKey = PublicKey.default,\n  tag: number = 0,\n  id: number = 0\n) => {\n  return deriveObligation(\n    programId,\n    tag,\n    id,\n    ownerPublicKey,\n    marketPublicKey,\n    seed1AccountKey,\n    seed2AccountKey\n  );\n};\n\nexport const deriveObligation = (\n  programId: PublicKey,\n  tag: number,\n  id: number,\n  ownerPublicKey: PublicKey,\n  marketPublicKey: PublicKey,\n  seed1AccountKey: PublicKey,\n  seed2AccountKey: PublicKey\n) => {\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from([tag]),\n      Buffer.from([id]),\n      ownerPublicKey.toBuffer(),\n      marketPublicKey.toBuffer(),\n      seed1AccountKey.toBuffer(),\n      seed2AccountKey.toBuffer(),\n    ],\n    programId\n  );\n};\n\n/**\n * Somewhat contrary to the name, this is the rewards state of the farms program for an obligation\n * (like one owned by a bank), and has nothing to do with \"users\" in a margin context.\n * @param programId\n * @param farmState\n * @param obligation\n * @returns\n */\nexport function deriveUserState(\n  programId: PublicKey,\n  farmState: PublicKey,\n  obligation: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_USER_STATE), farmState.toBuffer(), obligation.toBuffer()],\n    programId\n  );\n}\n","import BN from \"bn.js\";\nimport Decimal from \"decimal.js\";\n/**\n * The higher-precision {@link Decimal} counterpart that *must* be used by all operations within {@link Fraction}.\n *\n * ## How to use it?\n * Simply do `new FractionDecimal(x)` instead of `new Decimal(x)`.\n *\n * ## Why is this needed?\n * The default {@link Decimal.precision} is 20.\n * Some fractions on which we operate (most notably: the {@link Fraction.MAX_F_BN}) have more than 20 significant\n * digits, and at the same time they must encode to exact representation (e.g. because the smart contract expects an\n * exact `0xffff...ff` which has a speciyaal meaning, like \"withdraw *all*\").\n *\n * ## Why was this *not* needed before?\n * Some vibe-coded libraries that we use (e.g. `@orca-so/whirlpool-sdk`) statically initialize the global\n * `Decimal.set({ precision: ... })` when loaded. A previous, fortunate import order allowed our {@link Fraction}'s\n * constants to be computed using a sufficiently-high precision. This of course was broken by a random, unrelated\n * refactor, and from that point on we decided to not rely on the thoughtful Orca developers.\n */\nconst FractionDecimal = Decimal.clone({ precision: 40 });\n\nexport class Fraction {\n  static MAX_SIZE_F = 128;\n  static MAX_SIZE_BF = 256;\n  static FRACTIONS = 60;\n  static MULTIPLIER = new FractionDecimal(2).pow(Fraction.FRACTIONS);\n\n  static MAX_F_BN = new BN(2).pow(new BN(Fraction.MAX_SIZE_F)).sub(new BN(1));\n  static MAX_BF_BN = new BN(2).pow(new BN(Fraction.MAX_SIZE_BF)).sub(new BN(1));\n  static MIN_BN = new BN(0);\n\n  valueSf: BN;\n\n  constructor(valueSf: BN) {\n    if (valueSf.lt(Fraction.MIN_BN) || valueSf.gt(Fraction.MAX_BF_BN)) {\n      throw new Error(\"Number out of range\");\n    }\n\n    this.valueSf = valueSf;\n  }\n\n  toDecimal(): Decimal {\n    return new FractionDecimal(this.valueSf.toString()).div(Fraction.MULTIPLIER);\n  }\n\n  static fromDecimal(n: Decimal | number): Fraction {\n    const scaledDecimal = new FractionDecimal(n).mul(Fraction.MULTIPLIER);\n    const roundedScaledDecimal = roundNearest(scaledDecimal);\n    // Note: the `Decimal.toString()` can return exponential notation (e.g. \"1e9\") for large numbers. This notation is\n    // not accepted by `BN` constructor (i.e. invalid character \"e\"). Hence, we use `Decimal.toFixed()` (which is\n    // different than `number.toFixed()` - it will not do any rounding, just render a normal notation).\n    const scaledValue = new BN(roundedScaledDecimal.toFixed());\n    return new Fraction(scaledValue);\n  }\n\n  static fromBps(n: Decimal | number): Fraction {\n    const decimal = new FractionDecimal(n).div(10000);\n    return Fraction.fromDecimal(decimal);\n  }\n\n  static fromPercent(n: Decimal | number): Fraction {\n    const decimal = new FractionDecimal(n).div(100);\n    return Fraction.fromDecimal(decimal);\n  }\n\n  getValue(): BN {\n    return this.valueSf;\n  }\n\n  gt(x: Fraction): boolean {\n    return this.valueSf.gt(x.getValue());\n  }\n\n  lt(x: Fraction): boolean {\n    return this.valueSf.lt(x.getValue());\n  }\n\n  gte(x: Fraction): boolean {\n    return this.valueSf.gte(x.getValue());\n  }\n\n  lte(x: Fraction): boolean {\n    return this.valueSf.lte(x.getValue());\n  }\n\n  eq(x: Fraction): boolean {\n    return this.valueSf.eq(x.getValue());\n  }\n}\n\n/**\n * Returns an integer {@link Decimal} nearest to the given one.\n *\n * NOTE: the `Decimal.round()` should actually be called `.trunc()` (by default, it uses floor rounding). In most cases,\n * we prefer the traditional behavior (as `Math.round()`).\n */\nfunction roundNearest(decimal: Decimal): Decimal {\n  return decimal.toDecimalPlaces(0, Decimal.ROUND_HALF_CEIL);\n}\n","/**\n * Kamino Lending Protocol - Interest Rate Utilities\n *\n * Provides utilities for calculating interest rates, reserve metrics, and curve generation\n * for the Kamino lending protocol.\n *\n * Extracted all needed functions & constants out of their SDK\n */\n\nimport Decimal from \"decimal.js\";\n\nimport { Fraction } from \"../../classes\";\nimport {\n  ONE_HUNDRED_PCT_IN_BPS,\n  SLOTS_PER_YEAR,\n  SLOTS_PER_SECOND,\n  SECONDS_PER_YEAR,\n  DEFAULT_RECENT_SLOT_DURATION_MS,\n} from \"../../constants\";\nimport { KaminoBorrowRateCurvePoint, KaminoInterestRateBasis, KaminoReserve } from \"../../types\";\n\n// =============================================================================\n// INTERFACES\n// =============================================================================\n\nexport interface KlendInterestRateCurvePoint {\n  utilization: number; // 0-100 percentage\n  borrowAPY: number; // percentage\n  supplyAPY: number; // percentage\n}\n\nexport interface KaminoReserveCurveData {\n  reserveAddress: string;\n  curvePoints: KlendInterestRateCurvePoint[];\n}\n\n/**\n * How a reserve's configured (curve) rate is turned into a realized annual rate.\n * `multiplier` scales the curve rate; `periodsPerYear` is the compounding\n * granularity used to convert APR to APY.\n */\nexport interface KaminoRateBasis {\n  multiplier: number;\n  periodsPerYear: number;\n}\n\n// =============================================================================\n// CORE MATH UTILITIES\n// =============================================================================\n\n/**\n * Linear interpolation between two points\n */\nexport const interpolateLinear = (\n  x: number,\n  x0: number,\n  y0: number,\n  x1: number,\n  y1: number\n): number => {\n  return y0 + ((x - x0) * (y1 - y0)) / (x1 - x0);\n};\n\n/**\n * Calculate borrow rate from utilization using interest rate curve\n * @param currentUtilization - Current utilization ratio (0-1)\n * @param curve - Array of [utilization, rate] points\n * @returns Borrow rate for the given utilization\n */\nexport const getKaminoBorrowRate = (\n  currentUtilization: number,\n  curve: [number, number][]\n): number => {\n  let [x0, y0, x1, y1] = [0, 0, 0, 0];\n\n  if (currentUtilization > 1) {\n    currentUtilization = 1;\n  }\n\n  for (let i = 1; i < curve.length; i++) {\n    const currentPoint = curve[i];\n    const previousPoint = curve[i - 1];\n\n    if (!currentPoint || !previousPoint) {\n      continue;\n    }\n\n    const [pointUtilization, pointRate] = currentPoint;\n    if (pointUtilization === currentUtilization) {\n      return pointRate;\n    }\n\n    if (currentUtilization <= pointUtilization) {\n      x0 = previousPoint[0];\n      y0 = previousPoint[1];\n      x1 = currentPoint[0];\n      y1 = currentPoint[1];\n      break;\n    }\n  }\n\n  if (x0 === 0 && y0 === 0 && x1 === 0 && y1 === 0) {\n    const lastPoint = curve[curve.length - 1];\n    return lastPoint ? lastPoint[1] : 0;\n  }\n\n  return interpolateLinear(currentUtilization, x0, y0, x1, y1);\n};\n\n// =============================================================================\n// APR/APY CONVERSIONS\n// =============================================================================\n\n/**\n * Convert APR to APY using compound interest formula\n * APY = (1 + APR/n)^n - 1\n * @param apr - Annual Percentage Rate as decimal (e.g., 0.05 for 5%)\n * @param periodsPerYear - Compounding periods per year (defaults to SLOTS_PER_YEAR;\n *   use `getKaminoRateBasis(reserve).periodsPerYear` for basis-aware compounding)\n * @returns Annual Percentage Yield as decimal\n */\nexport function calculateAPYFromAPR(apr: number, periodsPerYear: number = SLOTS_PER_YEAR): number {\n  return Math.pow(1 + apr / periodsPerYear, periodsPerYear) - 1;\n}\n\n// =============================================================================\n// RESERVE SUPPLY & UTILIZATION\n// =============================================================================\n\n/**\n * Calculate total supply of a reserve\n * Formula: available liquidity + borrowed - protocol fees - referrer fees\n * @param reserve - The Kamino reserve\n * @returns Total supply in lamports\n */\nexport function getKaminoTotalSupply(reserve: KaminoReserve): Decimal {\n  const liquidityAvailableAmount = new Decimal(reserve.liquidity.availableAmount.toString());\n  const borrowedAmount = new Fraction(reserve.liquidity.borrowedAmountSf).toDecimal();\n  const accumulatedProtocolFee = new Fraction(\n    reserve.liquidity.accumulatedProtocolFeesSf\n  ).toDecimal();\n  const accumulatedReferrerFees = new Fraction(\n    reserve.liquidity.accumulatedReferrerFeesSf\n  ).toDecimal();\n  const pendingReferrerFees = new Fraction(reserve.liquidity.pendingReferrerFeesSf).toDecimal();\n\n  return liquidityAvailableAmount\n    .add(borrowedAmount)\n    .sub(accumulatedProtocolFee)\n    .sub(accumulatedReferrerFees)\n    .sub(pendingReferrerFees);\n}\n\n/**\n * Calculate utilization ratio of a reserve\n * Formula: total borrowed / total supply\n * @param reserve - The Kamino reserve\n * @returns Utilization ratio (0-1, e.g., 0.75 = 75% utilized)\n */\nexport function calculateUtilizationRatio(reserve: KaminoReserve): number {\n  const totalBorrows = new Fraction(reserve.liquidity.borrowedAmountSf).toDecimal();\n  const totalSupply = getKaminoTotalSupply(reserve);\n  if (totalSupply.eq(0)) {\n    return 0;\n  }\n  return totalBorrows.dividedBy(totalSupply).toNumber();\n}\n\n// =============================================================================\n// INTEREST RATE BASIS & SLOT ADJUSTMENT\n// =============================================================================\n\n/**\n * Resolve a reserve's interest rate basis, defaulting to `Legacy` when the\n * field is absent (reserves serialized before it existed).\n * @throws if the on-chain value is not a known basis\n */\nexport function getKaminoInterestRateBasis(reserve: KaminoReserve): KaminoInterestRateBasis {\n  const basis = reserve.config.interestRateBasis ?? KaminoInterestRateBasis.Legacy;\n  switch (basis) {\n    case KaminoInterestRateBasis.Legacy:\n    case KaminoInterestRateBasis.TrueApr:\n      return basis;\n    default:\n      throw new Error(`Unsupported Kamino interest rate basis: ${basis}`);\n  }\n}\n\n/**\n * Calculate slot adjustment factor based on recent slot duration\n * Used to adjust Legacy-basis rates based on actual blockchain performance\n * @param recentSlotDurationMs - Recent slot duration in milliseconds\n * @returns Slot adjustment factor\n */\nexport function slotAdjustmentFactor(\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): number {\n  return 1000 / SLOTS_PER_SECOND / recentSlotDurationMs;\n}\n\n/**\n * Rate multiplier and compounding granularity for a reserve, per its\n * interest rate basis (1:1 with klend-sdk `KaminoReserve.rateAdjustmentFactor()`\n * and `accrualUnitsPerYear()`).\n *\n * - `Legacy`: curve rates are slot-year APRs, so they are scaled by the observed\n *   slot duration and compounded per slot.\n * - `TrueApr`: curve rates are wall-clock APRs; `recentSlotDurationMs` is ignored\n *   and rates compound per second.\n *\n * @param reserve - The Kamino reserve\n * @param recentSlotDurationMs - Observed slot duration; only read for `Legacy`\n * @throws for an unsupported basis, or a non-positive slot duration on `Legacy`\n */\nexport function getKaminoRateBasis(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): KaminoRateBasis {\n  switch (getKaminoInterestRateBasis(reserve)) {\n    case KaminoInterestRateBasis.Legacy:\n      if (!Number.isFinite(recentSlotDurationMs) || recentSlotDurationMs <= 0) {\n        throw new Error(\n          `Kamino recent slot duration must be positive, got ${recentSlotDurationMs}`\n        );\n      }\n      return {\n        multiplier: slotAdjustmentFactor(recentSlotDurationMs),\n        periodsPerYear: SLOTS_PER_YEAR,\n      };\n    case KaminoInterestRateBasis.TrueApr:\n      return { multiplier: 1, periodsPerYear: SECONDS_PER_YEAR };\n  }\n}\n\n/**\n * Calculate the rate multiplier for a reserve (1:1 with klend-sdk\n * `KaminoReserve.rateAdjustmentFactor()`): the slot adjustment factor for a\n * `Legacy` reserve, `1` for a `TrueApr` one.\n */\nexport function calculateSlotAdjustmentFactor(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): number {\n  return getKaminoRateBasis(reserve, recentSlotDurationMs).multiplier;\n}\n\n// =============================================================================\n// RATE CALCULATIONS\n// =============================================================================\n\n/**\n * Calculate estimated borrow rate for a reserve\n * @param reserve - The reserve\n * @param recentSlotDurationMs - Recent slot duration (optional; ignored for TrueApr reserves)\n * @returns Borrow rate as decimal (e.g., 0.05 = 5%)\n */\nexport function calculateKaminoEstimatedBorrowRate(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): number {\n  const { multiplier } = getKaminoRateBasis(reserve, recentSlotDurationMs);\n  const currentUtilization = calculateUtilizationRatio(reserve);\n  const curve = truncateBorrowCurve(reserve.config.borrowRateCurve.points);\n  return getKaminoBorrowRate(currentUtilization, curve) * multiplier;\n}\n\n/**\n * Calculate estimated supply rate for a reserve\n * Formula: borrow rate × utilization × (1 - protocol take rate)\n * @param reserve - The reserve\n * @param recentSlotDurationMs - Recent slot duration (optional; ignored for TrueApr reserves)\n * @returns Supply rate as decimal (e.g., 0.03 = 3%)\n */\nexport function calculateKaminoEstimatedSupplyRate(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): number {\n  const borrowRate = calculateKaminoEstimatedBorrowRate(reserve, recentSlotDurationMs);\n  const currentUtilization = calculateUtilizationRatio(reserve);\n  const protocolTakeRatePct = 1 - reserve.config.protocolTakeRatePct / 100;\n\n  return borrowRate * currentUtilization * protocolTakeRatePct;\n}\n\n/**\n * Calculate supply APY for a reserve\n * APY includes compounding, making it higher than APR\n * Matches Kamino SDK's reserve.totalSupplyAPY()\n * @param reserve - The Kamino reserve\n * @param recentSlotDurationMs - Recent slot duration (defaults to\n *   DEFAULT_RECENT_SLOT_DURATION_MS; ignored for TrueApr reserves)\n * @returns Supply APY as decimal (e.g., 0.0512 = 5.12% APY)\n */\nexport function calculateKaminoSupplyAPY(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): number {\n  const { periodsPerYear } = getKaminoRateBasis(reserve, recentSlotDurationMs);\n  const supplyApr = calculateKaminoEstimatedSupplyRate(reserve, recentSlotDurationMs);\n  return calculateAPYFromAPR(supplyApr, periodsPerYear);\n}\n\nexport function scaledSupplies(state: KaminoReserve): [Decimal, Decimal] {\n  const liqMintDecimals = new Decimal(state.liquidity.mintDecimals.toString());\n  const totalSupplyLamports = getKaminoTotalSupply(state);\n  const mintTotalSupplyLam = new Decimal(state.collateral.mintTotalSupply.toString());\n\n  const liqScale = new Decimal(10).pow(liqMintDecimals);\n  const collScale = new Decimal(10).pow(liqMintDecimals);\n\n  const totalSupply = totalSupplyLamports.div(liqScale);\n  const totalCollateral = mintTotalSupplyLam.div(collScale);\n\n  return [totalSupply, totalCollateral];\n}\n\n// =============================================================================\n// CURVE PROCESSING\n// =============================================================================\n\n/**\n * Convert raw curve points to normalized [utilization, rate] pairs\n * Truncates curve at 100% utilization\n */\nexport const truncateBorrowCurve = (points: KaminoBorrowRateCurvePoint[]): [number, number][] => {\n  const curve: [number, number][] = [];\n  for (const { utilizationRateBps, borrowRateBps } of points) {\n    curve.push([\n      utilizationRateBps / ONE_HUNDRED_PCT_IN_BPS,\n      borrowRateBps / ONE_HUNDRED_PCT_IN_BPS,\n    ]);\n\n    if (utilizationRateBps === ONE_HUNDRED_PCT_IN_BPS) {\n      break;\n    }\n  }\n  return curve;\n};\n\n/**\n * Get fixed host interest rate from reserve config (1:1 with Kamino SDK)\n * Source: klend-sdk/src/classes/reserve.ts line 209\n */\nexport function getFixedHostInterestRate(reserve: KaminoReserve): number {\n  return reserve.config.hostFixedInterestRateBps / 10_000;\n}\n\n/**\n * Get protocol take rate percentage from reserve config\n */\nexport function getProtocolTakeRatePct(reserve: KaminoReserve): number {\n  return 1 - reserve.config.protocolTakeRatePct / 100;\n}\n\n// =============================================================================\n// CURVE GENERATION\n// =============================================================================\n\n/**\n * Generate complete interest rate curve for a reserve\n * Creates 101 data points from 0% to 100% utilization\n * @param curvePoints - Raw curve configuration from reserve\n * @param slotAdjustmentFactor - Rate multiplier (`calculateSlotAdjustmentFactor`;\n *   the slot adjustment for Legacy reserves, 1 for TrueApr)\n * @param fixedHostInterestRate - Fixed rate added to all borrow rates\n * @param protocolTakeRatePct - Percentage kept by depositors (1 - protocol fee)\n * @param periodsPerYear - APY compounding periods (`getKaminoRateBasis(reserve).periodsPerYear`;\n *   defaults to SLOTS_PER_YEAR)\n * @returns Array of curve points with utilization, borrow APY, and supply APY\n */\nexport function generateKaminoReserveCurve(\n  curvePoints: KaminoBorrowRateCurvePoint[],\n  slotAdjustmentFactor: number,\n  fixedHostInterestRate: number,\n  protocolTakeRatePct: number,\n  periodsPerYear: number = SLOTS_PER_YEAR\n): KlendInterestRateCurvePoint[] {\n  if (curvePoints.length === 0) {\n    return [];\n  }\n\n  const curve = truncateBorrowCurve(curvePoints);\n\n  return Array.from({ length: 101 }, (_, i) => {\n    const utilization = i / 100;\n\n    // Calculate base borrow rate and add fixed host interest\n    const baseBorrowRate = getKaminoBorrowRate(utilization, curve) * slotAdjustmentFactor;\n    const borrowAPR = baseBorrowRate + fixedHostInterestRate;\n\n    // Calculate supply APR (utilization × borrowAPR × protocolTakeRate)\n    const supplyAPR = utilization * borrowAPR * protocolTakeRatePct;\n\n    // Convert to APY with compounding\n    const borrowAPY = calculateAPYFromAPR(borrowAPR, periodsPerYear);\n    const supplyAPY = calculateAPYFromAPR(supplyAPR, periodsPerYear);\n\n    return {\n      utilization: utilization * 100,\n      borrowAPY: borrowAPY * 100,\n      supplyAPY: supplyAPY * 100,\n    };\n  });\n}\n\n/**\n * Generate the interest rate curve for a reserve, deriving the rate multiplier\n * and compounding granularity from its interest rate basis.\n * @param reserve - The Kamino reserve\n * @param recentSlotDurationMs - Recent slot duration (optional; ignored for TrueApr reserves)\n */\nexport function generateKaminoReserveCurveFromReserve(\n  reserve: KaminoReserve,\n  recentSlotDurationMs: number = DEFAULT_RECENT_SLOT_DURATION_MS\n): KlendInterestRateCurvePoint[] {\n  const { multiplier, periodsPerYear } = getKaminoRateBasis(reserve, recentSlotDurationMs);\n  return generateKaminoReserveCurve(\n    reserve.config.borrowRateCurve.points,\n    multiplier,\n    getFixedHostInterestRate(reserve),\n    getProtocolTakeRatePct(reserve),\n    periodsPerYear\n  );\n}\n","import { KaminoFarmState, KaminoFarmStateJSON } from \"../../types\";\n\n/**\n * Serialize a Kamino FarmState to its JSON DTO.\n *\n * The parameter is typed as the curated {@link KaminoFarmState}, so a\n * freshly decoded `FarmStateRaw` is accepted structurally and trimmed\n * down to the curated shape here.\n */\nexport function kaminoFarmStateToDto(\n  farmState: KaminoFarmState\n): KaminoFarmStateJSON {\n  return {\n    token: {\n      mint: farmState.token.mint.toBase58(),\n      decimals: farmState.token.decimals.toString(),\n    },\n    rewardInfos: farmState.rewardInfos.map((item) => ({\n      token: {\n        mint: item.token.mint.toBase58(),\n        decimals: item.token.decimals.toString(),\n      },\n      rewardsAvailable: item.rewardsAvailable.toString(),\n      rewardsPerSecondDecimals: item.rewardsPerSecondDecimals,\n      rewardScheduleCurve: {\n        points: item.rewardScheduleCurve.points.map((p) => ({\n          tsStart: p.tsStart.toString(),\n          rewardPerTimeUnit: p.rewardPerTimeUnit.toString(),\n        })),\n      },\n    })),\n  };\n}\n","import { struct, publicKey, u64, array, u8, u128, u32 } from \"@coral-xyz/borsh\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { KaminoFarmStateJSON } from \"../../types/farm/dto-farm.types\";\nimport { KaminoFarmState } from \"../../types/farm/farm.types\";\nimport { FarmStateRaw } from \"../../types/farm/raw-farm.types\";\n\nconst farmDiscriminator = Buffer.from([198, 102, 216, 74, 63, 66, 163, 190]);\n\nconst farmLayout = struct<FarmStateRaw>([\n  publicKey(\"farmAdmin\"),\n  publicKey(\"globalConfig\"),\n  struct(\n    [publicKey(\"mint\"), u64(\"decimals\"), publicKey(\"tokenProgram\"), array(u64(), 6, \"padding\")],\n    \"token\"\n  ),\n  array(\n    struct([\n      struct(\n        [publicKey(\"mint\"), u64(\"decimals\"), publicKey(\"tokenProgram\"), array(u64(), 6, \"padding\")],\n        \"token\"\n      ),\n      publicKey(\"rewardsVault\"),\n      u64(\"rewardsAvailable\"),\n      struct(\n        [array(struct([u64(\"tsStart\"), u64(\"rewardPerTimeUnit\")]), 20, \"points\")],\n        \"rewardScheduleCurve\"\n      ),\n      u64(\"minClaimDurationSeconds\"),\n      u64(\"lastIssuanceTs\"),\n      u64(\"rewardsIssuedUnclaimed\"),\n      u64(\"rewardsIssuedCumulative\"),\n      u128(\"rewardPerShareScaled\"),\n      u64(\"placeholder0\"),\n      u8(\"rewardType\"),\n      u8(\"rewardsPerSecondDecimals\"),\n      array(u8(), 6, \"padding0\"),\n      array(u64(), 20, \"padding1\"),\n    ]),\n    10,\n    \"rewardInfos\"\n  ),\n  u64(\"numRewardTokens\"),\n  u64(\"numUsers\"),\n  u64(\"totalStakedAmount\"),\n  publicKey(\"farmVault\"),\n  publicKey(\"farmVaultsAuthority\"),\n  u64(\"farmVaultsAuthorityBump\"),\n  publicKey(\"delegateAuthority\"),\n  u8(\"timeUnit\"),\n  u8(\"isFarmFrozen\"),\n  u8(\"isFarmDelegated\"),\n  array(u8(), 5, \"padding0\"),\n  publicKey(\"withdrawAuthority\"),\n  u32(\"depositWarmupPeriod\"),\n  u32(\"withdrawalCooldownPeriod\"),\n  u128(\"totalActiveStakeScaled\"),\n  u128(\"totalPendingStakeScaled\"),\n  u64(\"totalPendingAmount\"),\n  u64(\"slashedAmountCurrent\"),\n  u64(\"slashedAmountCumulative\"),\n  publicKey(\"slashedAmountSpillAddress\"),\n  u64(\"lockingMode\"),\n  u64(\"lockingStartTimestamp\"),\n  u64(\"lockingDuration\"),\n  u64(\"lockingEarlyWithdrawalPenaltyBps\"),\n  u64(\"depositCapAmount\"),\n  publicKey(\"scopePrices\"),\n  u64(\"scopeOraclePriceId\"),\n  u64(\"scopeOracleMaxAge\"),\n  publicKey(\"pendingFarmAdmin\"),\n  publicKey(\"strategyId\"),\n  publicKey(\"delegatedRpsAdmin\"),\n  publicKey(\"vaultId\"),\n  publicKey(\"secondDelegatedAuthority\"),\n  array(u64(), 74, \"padding\"),\n]);\n\nexport function decodeFarmDataRaw(data: Buffer): FarmStateRaw {\n  if (!data.slice(0, 8).equals(farmDiscriminator)) {\n    throw new Error(\"invalid account discriminator\");\n  }\n\n  const dec = farmLayout.decode(data.slice(8));\n  return dec;\n}\n\nexport function dtoToKaminoFarmState(dto: KaminoFarmStateJSON): KaminoFarmState {\n  return {\n    token: {\n      mint: new PublicKey(dto.token.mint),\n      decimals: new BN(dto.token.decimals),\n    },\n    rewardInfos: dto.rewardInfos.map((item) => ({\n      token: {\n        mint: new PublicKey(item.token.mint),\n        decimals: new BN(item.token.decimals),\n      },\n      rewardsAvailable: new BN(item.rewardsAvailable),\n      rewardsPerSecondDecimals: item.rewardsPerSecondDecimals,\n      rewardScheduleCurve: {\n        points: item.rewardScheduleCurve.points.map((p) => ({\n          tsStart: new BN(p.tsStart),\n          rewardPerTimeUnit: new BN(p.rewardPerTimeUnit),\n        })),\n      },\n    })),\n  };\n}\n","import { AnchorProvider, Program } from \"@coral-xyz/anchor\";\nimport {\n  PublicKey,\n  Transaction,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  MakeDepositIxParams,\n  MakeDepositTxParams,\n  MakeDriftDepositIxParams,\n  MakeDriftDepositTxParams,\n  MakeKaminoDepositIxParams,\n  MakeKaminoDepositTxParams,\n  MakeJuplendDepositIxParams,\n  MakeJuplendDepositTxParams,\n} from \"../types\";\n\nimport { SYSTEM_PROGRAM_ID } from \"~/constants\";\nimport instructions from \"~/instructions\";\nimport {\n  addTransactionMetadata,\n  ExtendedTransaction,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeWrapSolIxs,\n  selectLutsForBanks,\n  TransactionType,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { uiToNative } from \"~/utils\";\nimport { deriveDriftSpotMarketVault, deriveDriftState, DRIFT_PROGRAM_ID } from \"~/vendor/drift\";\nimport { getAllDerivedJupLendAccounts, JUP_LIQUIDITY_PROGRAM_ID } from \"~/vendor/jup-lend\";\nimport {\n  deriveUserState,\n  FARMS_PROGRAM_ID,\n  getAllDerivedKaminoAccounts,\n  KLEND_IDL,\n  KlendIdlType,\n  makeRefreshingIxs,\n} from \"~/vendor/klend\";\nimport { getAssociatedTokenAddressSync, NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"~/vendor/spl\";\n\n/**\n * Creates a Drift deposit instruction for depositing assets into a Drift spot market.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if needed (for native SOL deposits)\n * - Deriving necessary Drift protocol accounts (state, spot market vault)\n * - Creating the deposit instruction to the Drift spot market\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have Drift integration configured)\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.driftMarketIndex - The Drift spot market index for the asset\n * @param params.driftOracle - The Drift oracle account for the asset (optional for USDC/market 0)\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeDriftDepositIx({\n  program,\n  bank,\n  tokenProgram,\n  amount,\n  accountAddress,\n  authority,\n  group,\n  driftMarketIndex,\n  driftOracle,\n  isSync,\n  opts = {\n    // If false, the deposit will not wrap SOL; should not be false in most usecases\n    wrapAndUnwrapSol: true,\n    // wSOL balance can be provided if the user wants to combine native and wrapped SOL\n    wSolBalanceUi: 0,\n  },\n}: MakeDriftDepositIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n  const depositIxs: TransactionInstruction[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n  }\n\n  const driftState = deriveDriftState()[0];\n  const driftSpotMarketVault = deriveDriftSpotMarketVault(driftMarketIndex)[0];\n\n  if (!bank.driftIntegrationAccounts) {\n    throw new Error(\"Bank has no drift integration accounts\");\n  }\n\n  const depositIx = isSync\n    ? syncInstructions.makeDriftDepositIx(\n        program.programId,\n        {\n          group: group,\n          marginfiAccount: accountAddress,\n          authority,\n          bank: bank.address,\n          driftOracle,\n          liquidityVault: bank.liquidityVault,\n          signerTokenAccount: userTokenAtaPk,\n          driftState,\n          integrationAcc2: bank.driftIntegrationAccounts.driftUser,\n          integrationAcc3: bank.driftIntegrationAccounts.driftUserStats,\n          integrationAcc1: bank.driftIntegrationAccounts.driftSpotMarket,\n          driftSpotMarketVault,\n          mint: bank.mint,\n          driftProgram: DRIFT_PROGRAM_ID,\n          tokenProgram,\n          systemProgram: SYSTEM_PROGRAM_ID,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) }\n      )\n    : await instructions.makeDriftDepositIx(\n        program,\n        {\n          marginfiAccount: accountAddress,\n          bank: bank.address,\n          signerTokenAccount: userTokenAtaPk,\n          driftState,\n          driftSpotMarketVault,\n          driftOracle,\n          tokenProgram,\n\n          authority: opts.overrideInferAccounts?.authority ?? authority,\n          group: opts.overrideInferAccounts?.group ?? group,\n          liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) }\n      );\n\n  depositIxs.push(depositIx);\n\n  return {\n    instructions: depositIxs,\n    keys: [],\n  };\n}\n\n/**\n * Creates a complete Drift deposit transaction ready to be signed and sent.\n *\n * This function builds a full versioned transaction that includes:\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction to the Drift spot market\n *\n * The transaction is constructed with proper metadata, address lookup tables,\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.connection - Solana connection for fetching blockhash\n * @param params.amount - The amount to deposit in UI units\n * @param params.blockhash - Optional recent blockhash (fetched if not provided)\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have driftUser and driftUserStats configured)\n * @param params.tokenProgram - The token program ID\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.driftMarketIndex - The Drift spot market index for the asset\n * @param params.driftOracle - The Drift oracle account for the asset\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to a versioned transaction with metadata\n * @throws Error if the bank doesn't have Drift user or user stats configured\n */\nexport async function makeDriftDepositTx(\n  params: MakeDriftDepositTxParams\n): Promise<ExtendedV0Transaction> {\n  const { luts, connection, amount, ...depositIxParams } = params;\n\n  const selectedLuts = selectLutsForBanks(luts, [depositIxParams.bank]);\n\n  if (!depositIxParams.bank.driftIntegrationAccounts) {\n    throw new Error(\"Bank has no drift integration accounts\");\n  }\n\n  const depositIxs = await makeDriftDepositIx({\n    amount,\n    ...depositIxParams,\n  });\n\n  const blockhash =\n    params.blockhash ??\n    (await connection.getLatestBlockhashAndContext(\"confirmed\")).value.blockhash;\n\n  const depositTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...depositIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: depositIxs.keys,\n      addressLookupTables: selectedLuts,\n      type: TransactionType.DEPOSIT,\n    }\n  );\n\n  const solanaTx = addTransactionMetadata(depositTx, {\n    type: TransactionType.DEPOSIT,\n    signers: depositIxs.keys,\n    addressLookupTables: selectedLuts,\n  });\n  return solanaTx;\n}\n\n/**\n * Creates a Kamino deposit instruction for depositing assets into a Kamino reserve.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if needed (for native SOL deposits)\n * - Deriving all necessary Kamino protocol accounts\n * - Creating the deposit instruction with proper farm state integration\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.reserve - The Kamino reserve configuration\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeKaminoDepositIx({\n  program,\n  bank,\n  tokenProgram,\n  amount,\n  accountAddress,\n  authority,\n  group,\n  reserve,\n  isSync,\n  opts = {\n    // If false, the deposit will not wrap SOL; should not be false in most usecases\n    wrapAndUnwrapSol: true,\n    // wSOL balance can be provided if the user wants to combine native and wrapped SOL\n    wSolBalanceUi: 0,\n  },\n}: MakeKaminoDepositIxParams): Promise<InstructionsWrapper> {\n  if (!bank.kaminoIntegrationAccounts) {\n    throw new Error(\"Bank has no kamino integration accounts\");\n  }\n\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n  const depositIxs: TransactionInstruction[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  const reserveLiquiditySupply = reserve.liquidity.supplyVault;\n  const reserveCollateralMint = reserve.collateral.mintPubkey;\n  const reserveDestinationDepositCollateral = reserve.collateral.supplyVault;\n\n  const { lendingMarketAuthority } = getAllDerivedKaminoAccounts(reserve.lendingMarket, bank.mint);\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n  }\n\n  const reserveFarm = !reserve.farmCollateral.equals(\n    new PublicKey(\"11111111111111111111111111111111\")\n  )\n    ? reserve.farmCollateral\n    : null;\n\n  const [userFarmState] = reserveFarm\n    ? deriveUserState(\n        FARMS_PROGRAM_ID,\n        reserveFarm,\n        bank.kaminoIntegrationAccounts.kaminoObligation\n      )\n    : [null];\n\n  const depositIx = isSync\n    ? syncInstructions.makeKaminoDepositIx(\n        program.programId,\n        {\n          marginfiAccount: accountAddress,\n          bank: bank.address,\n          signerTokenAccount: userTokenAtaPk,\n          lendingMarket: reserve.lendingMarket,\n\n          integrationAcc2: bank.kaminoIntegrationAccounts.kaminoObligation,\n          integrationAcc1: bank.kaminoIntegrationAccounts.kaminoReserve,\n          mint: bank.mint,\n\n          lendingMarketAuthority,\n          reserveLiquiditySupply,\n          reserveCollateralMint,\n          reserveDestinationDepositCollateral,\n          liquidityTokenProgram: tokenProgram,\n\n          obligationFarmUserState: userFarmState,\n          reserveFarmState: reserveFarm,\n\n          authority: opts.overrideInferAccounts?.authority ?? authority,\n          group: opts.overrideInferAccounts?.group ?? group,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) }\n      )\n    : await instructions.makeKaminoDepositIx(\n        program,\n        {\n          marginfiAccount: accountAddress,\n          bank: bank.address,\n          signerTokenAccount: userTokenAtaPk,\n          lendingMarket: reserve.lendingMarket,\n\n          lendingMarketAuthority,\n          reserveLiquiditySupply,\n          reserveCollateralMint,\n          reserveDestinationDepositCollateral,\n          liquidityTokenProgram: tokenProgram,\n\n          obligationFarmUserState: userFarmState,\n          reserveFarmState: reserveFarm,\n\n          authority: opts.overrideInferAccounts?.authority ?? authority,\n          group: opts.overrideInferAccounts?.group ?? group,\n          liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) }\n      );\n\n  depositIxs.push(depositIx);\n\n  return {\n    instructions: depositIxs,\n    keys: [],\n  };\n}\n\n/**\n * Creates a complete Kamino deposit transaction ready to be signed and sent.\n *\n * This function builds a full versioned transaction that includes:\n * - Kamino reserve refresh instructions (to update oracle prices and interest rates)\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction\n *\n * The transaction is constructed with proper metadata, address lookup tables,\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.connection - Solana connection for fetching blockhash and reserve data\n * @param params.amount - The amount to deposit in UI units\n * @param params.blockhash - Optional recent blockhash (fetched if not provided)\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have kaminoReserve and kaminoObligation)\n * @param params.tokenProgram - The token program ID\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.reserve - The Kamino reserve configuration\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to a versioned transaction with metadata\n * @throws Error if the bank doesn't have a Kamino reserve or obligation configured\n */\nexport async function makeKaminoDepositTx(\n  params: MakeKaminoDepositTxParams\n): Promise<ExtendedV0Transaction> {\n  const { luts, connection, amount, ...depositIxParams } = params;\n\n  const selectedLuts = selectLutsForBanks(luts, [depositIxParams.bank]);\n\n  if (!depositIxParams.bank.kaminoIntegrationAccounts) {\n    throw new Error(\"Bank has no kamino integration accounts\");\n  }\n\n  // TODO: create dummy provider util in common\n  const provider = new AnchorProvider(\n    connection,\n    {\n      publicKey: params.authority,\n      signTransaction: async (tx) => tx,\n      signAllTransactions: async (txs) => txs,\n    },\n    {\n      commitment: \"confirmed\",\n    }\n  );\n\n  const klendProgram = new Program<KlendIdlType>(KLEND_IDL, provider);\n\n  const refreshIxs = await makeRefreshingIxs({\n    klendProgram,\n    reserve: depositIxParams.reserve,\n    reserveKey: depositIxParams.bank.kaminoIntegrationAccounts.kaminoReserve,\n    obligationKey: depositIxParams.bank.kaminoIntegrationAccounts.kaminoObligation,\n    program: klendProgram,\n  });\n\n  const depositIxs = await makeKaminoDepositIx({\n    amount,\n    ...depositIxParams,\n  });\n\n  const blockhash =\n    params.blockhash ??\n    (await connection.getLatestBlockhashAndContext(\"confirmed\")).value.blockhash;\n\n  const depositTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIxs, ...depositIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: depositIxs.keys,\n      addressLookupTables: selectedLuts,\n      type: TransactionType.DEPOSIT,\n    }\n  );\n\n  const solanaTx = addTransactionMetadata(depositTx, {\n    type: TransactionType.DEPOSIT,\n    signers: depositIxs.keys,\n    addressLookupTables: selectedLuts,\n  });\n  return solanaTx;\n}\n\n/**\n * Creates a deposit instruction for depositing assets into a Marginfi bank.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if depositing native SOL\n * - Token-2022 program support with proper remaining accounts\n * - Creating the deposit instruction to the bank's liquidity vault\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeDepositIx({\n  program,\n  bank,\n  tokenProgram,\n  amount,\n  accountAddress,\n  authority,\n  group,\n  isSync,\n  opts = {\n    // If false, the deposit will not wrap SOL; should not be false in most usecases\n    wrapAndUnwrapSol: true,\n    // wSOL balance can be provided if the user wants to combine native and wrapped SOL\n    wSolBalanceUi: 0,\n  },\n}: MakeDepositIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  const remainingAccounts = tokenProgram.equals(TOKEN_2022_PROGRAM_ID)\n    ? [{ pubkey: bank.mint, isSigner: false, isWritable: false }]\n    : [];\n\n  const depositIxs = [];\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n  }\n\n  const depositIx = isSync\n    ? syncInstructions.makeDepositIx(\n        program.programId,\n        {\n          marginfiAccount: accountAddress,\n          signerTokenAccount: userTokenAtaPk,\n          bank: bank.address,\n          tokenProgram: tokenProgram,\n          authority: opts.overrideInferAccounts?.authority ?? authority,\n          group: opts.overrideInferAccounts?.group ?? group,\n          liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) },\n        remainingAccounts\n      )\n    : await instructions.makeDepositIx(\n        program,\n        {\n          marginfiAccount: accountAddress,\n          signerTokenAccount: userTokenAtaPk,\n          bank: bank.address,\n          tokenProgram: tokenProgram,\n          authority: opts.overrideInferAccounts?.authority ?? authority,\n          group: opts.overrideInferAccounts?.group ?? group,\n          liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals) },\n        remainingAccounts\n      );\n  depositIxs.push(depositIx);\n\n  return {\n    instructions: depositIxs,\n    keys: [],\n  };\n}\n\n/**\n * Creates a complete deposit transaction ready to be signed and sent.\n *\n * This function builds a full transaction that includes:\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction to the Marginfi bank\n * - Proper support for Token-2022 tokens\n *\n * The transaction is constructed as a legacy Transaction with proper metadata\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to an ExtendedTransaction with metadata\n */\nexport async function makeDepositTx(params: MakeDepositTxParams): Promise<ExtendedTransaction> {\n  const { luts, ...depositIxParams } = params;\n\n  const ixs = await makeDepositIx(depositIxParams);\n  const tx = new Transaction().add(...ixs.instructions);\n  tx.feePayer = params.authority;\n\n  // Deposits don't add health remaining-accounts, so only the target bank matters.\n  const selectedLuts = selectLutsForBanks(luts, [depositIxParams.bank]);\n\n  const solanaTx = addTransactionMetadata(tx, {\n    type: TransactionType.DEPOSIT,\n    signers: ixs.keys,\n    addressLookupTables: selectedLuts,\n  });\n  return solanaTx;\n}\n\n/**\n * Creates a JupLend deposit instruction for depositing assets into a JupLend lending pool.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if needed (for native SOL deposits)\n * - Deriving all necessary JupLend protocol accounts via `getAllDerivedJupLendAccounts`\n * - Creating the deposit instruction to the JupLend lending pool\n *\n * @param params - The parameters for creating the deposit instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have JupLend integration configured)\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to deposit in UI units\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n */\nexport async function makeJuplendDepositIx({\n  program,\n  bank,\n  tokenProgram,\n  amount,\n  accountAddress,\n  authority,\n  group,\n  opts = {\n    wrapAndUnwrapSol: true,\n    wSolBalanceUi: 0,\n  },\n}: MakeJuplendDepositIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n  const depositIxs: TransactionInstruction[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram);\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    depositIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n  }\n\n  if (!bank.jupLendIntegrationAccounts) {\n    throw new Error(\"Bank has no JupLend integration accounts\");\n  }\n\n  const derivedAccounts = getAllDerivedJupLendAccounts(bank.mint, tokenProgram);\n  const {\n    fTokenMint,\n    lendingAdmin,\n    supplyTokenReservesLiquidity,\n    lendingSupplyPositionOnLiquidity,\n    rateModel,\n    vault,\n    liquidity,\n    rewardsRateModel,\n  } = derivedAccounts;\n\n  const depositIx = await instructions.makeJuplendDepositIx(\n    program,\n    {\n      marginfiAccount: accountAddress,\n      bank: bank.address,\n      signerTokenAccount: userTokenAtaPk,\n\n      lendingAdmin,\n      supplyTokenReservesLiquidity,\n      lendingSupplyPositionOnLiquidity,\n      rateModel,\n      vault,\n      liquidity,\n      liquidityProgram: JUP_LIQUIDITY_PROGRAM_ID,\n      rewardsRateModel,\n      tokenProgram,\n\n      authority: opts.overrideInferAccounts?.authority ?? authority,\n      group: opts.overrideInferAccounts?.group ?? group,\n      liquidityVault: opts.overrideInferAccounts?.liquidityVault ?? bank.liquidityVault,\n      fTokenMint,\n      integrationAcc1: bank.jupLendIntegrationAccounts.jupLendingState,\n      integrationAcc2: bank.jupLendIntegrationAccounts.jupFTokenVault,\n      mint: bank.mint,\n    },\n    { amount: uiToNative(amount, bank.mintDecimals) }\n  );\n\n  depositIxs.push(depositIx);\n\n  return {\n    instructions: depositIxs,\n    keys: [],\n  };\n}\n\n/**\n * Creates a complete JupLend deposit transaction ready to be signed and sent.\n *\n * This function builds a full versioned transaction that includes:\n * - SOL wrapping instructions if depositing native SOL\n * - The actual deposit instruction to the JupLend lending pool\n *\n * The transaction is constructed with proper metadata, address lookup tables,\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the deposit transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.connection - Solana connection for fetching blockhash\n * @param params.amount - The amount to deposit in UI units\n * @param params.blockhash - Optional recent blockhash (fetched if not provided)\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to deposit into (must have JupLend integration configured)\n * @param params.tokenProgram - The token program ID\n * @param params.accountAddress - The Marginfi account address\n * @param params.authority - The authority/signer public key\n * @param params.group - The Marginfi group address\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to a versioned transaction with metadata\n * @throws Error if the bank doesn't have JupLend integration accounts configured\n */\nexport async function makeJuplendDepositTx(\n  params: MakeJuplendDepositTxParams\n): Promise<ExtendedV0Transaction> {\n  const { luts, connection, amount, ...depositIxParams } = params;\n\n  const selectedLuts = selectLutsForBanks(luts, [depositIxParams.bank]);\n\n  if (!depositIxParams.bank.jupLendIntegrationAccounts) {\n    throw new Error(\"Bank has no JupLend integration accounts\");\n  }\n\n  const depositIxs = await makeJuplendDepositIx({\n    amount,\n    ...depositIxParams,\n  });\n\n  const blockhash =\n    params.blockhash ??\n    (await connection.getLatestBlockhashAndContext(\"confirmed\")).value.blockhash;\n\n  const depositTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...depositIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: depositIxs.keys,\n      addressLookupTables: selectedLuts,\n      type: TransactionType.DEPOSIT,\n    }\n  );\n\n  const solanaTx = addTransactionMetadata(depositTx, {\n    type: TransactionType.DEPOSIT,\n    signers: depositIxs.keys,\n    addressLookupTables: selectedLuts,\n  });\n  return solanaTx;\n}\n","import {\n  AddressLookupTableAccount,\n  Connection,\n  PublicKey,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { SwapEngineRequest, SwapEngineResult, TxFootprint } from \"../types\";\n\nimport { SwapApiConfig, SwapProvider } from \"~/services/account/types\";\n\n/**\n * Wire serialization for the swap engine, so the provider fan-out can run behind\n * an HTTP endpoint (Design B). The request intentionally omits `connection` and\n * per-provider `apiConfig` — the server supplies RPC + API keys from its env.\n */\n\nexport interface SerializedInstruction {\n  programId: string;\n  keys: { pubkey: string; isSigner: boolean; isWritable: boolean }[];\n  data: string; // base64\n}\n\nexport interface SerializedLut {\n  key: string;\n  addresses: string[];\n}\n\nexport interface SerializedTxFootprint {\n  instructions: SerializedInstruction[];\n  luts: SerializedLut[];\n  wrapperInstructions?: SerializedInstruction[];\n  payer: string;\n  sizeConstraint: number;\n  maxSwapTotalAccounts: number;\n}\n\nexport interface SerializedSwapEngineRequest {\n  inputMint: string;\n  outputMint: string;\n  amountNative: number;\n  inputDecimals: number;\n  outputDecimals: number;\n  slippageBps?: number;\n  slippageMode?: \"DYNAMIC\" | \"FIXED\";\n  platformFeeBps?: number;\n  directRoutesOnly?: boolean;\n  taker: string;\n  destinationTokenAccount: string;\n  footprint?: SerializedTxFootprint;\n  /** Provider names only; the server attaches each provider's apiConfig. */\n  providers: SwapProvider[];\n  jupiterMaxAccountsLadder?: number[];\n}\n\nexport interface SerializedSwapEngineResult {\n  swapInstructions: SerializedInstruction[];\n  setupInstructions: SerializedInstruction[];\n  swapLuts: SerializedLut[];\n  quoteResponse: SwapEngineResult[\"quoteResponse\"];\n  outputAmountNative: string;\n  provider: SwapProvider;\n}\n\n// --- instruction / lut ---\n\nexport function serializeInstruction(ix: TransactionInstruction): SerializedInstruction {\n  return {\n    programId: ix.programId.toBase58(),\n    keys: ix.keys.map((k) => ({\n      pubkey: k.pubkey.toBase58(),\n      isSigner: k.isSigner,\n      isWritable: k.isWritable,\n    })),\n    data: Buffer.from(ix.data).toString(\"base64\"),\n  };\n}\n\nexport function deserializeInstruction(s: SerializedInstruction): TransactionInstruction {\n  return new TransactionInstruction({\n    programId: new PublicKey(s.programId),\n    keys: s.keys.map((k) => ({\n      pubkey: new PublicKey(k.pubkey),\n      isSigner: k.isSigner,\n      isWritable: k.isWritable,\n    })),\n    data: Buffer.from(s.data, \"base64\"),\n  });\n}\n\nexport function serializeLut(lut: AddressLookupTableAccount): SerializedLut {\n  return {\n    key: lut.key.toBase58(),\n    addresses: lut.state.addresses.map((a) => a.toBase58()),\n  };\n}\n\nexport function deserializeLut(s: SerializedLut): AddressLookupTableAccount {\n  return new AddressLookupTableAccount({\n    key: new PublicKey(s.key),\n    state: {\n      deactivationSlot: BigInt(\"18446744073709551615\"), // u64 max = active\n      lastExtendedSlot: 0,\n      lastExtendedSlotStartIndex: 0,\n      addresses: s.addresses.map((a) => new PublicKey(a)),\n    },\n  });\n}\n\n// --- request ---\n\nexport function serializeSwapEngineRequest(req: SwapEngineRequest): SerializedSwapEngineRequest {\n  return {\n    inputMint: req.inputMint,\n    outputMint: req.outputMint,\n    amountNative: req.amountNative,\n    inputDecimals: req.inputDecimals,\n    outputDecimals: req.outputDecimals,\n    slippageBps: req.slippageBps,\n    slippageMode: req.slippageMode,\n    platformFeeBps: req.platformFeeBps,\n    directRoutesOnly: req.directRoutesOnly,\n    taker: req.taker.toBase58(),\n    destinationTokenAccount: req.destinationTokenAccount.toBase58(),\n    footprint: req.footprint ? serializeFootprint(req.footprint) : undefined,\n    providers: req.providers.map((p) => p.provider),\n    jupiterMaxAccountsLadder: req.jupiterMaxAccountsLadder,\n  };\n}\n\nfunction serializeFootprint(f: TxFootprint): SerializedTxFootprint {\n  return {\n    instructions: f.instructions.map(serializeInstruction),\n    luts: f.luts.map(serializeLut),\n    wrapperInstructions: f.wrapperInstructions?.map(serializeInstruction),\n    payer: f.payer.toBase58(),\n    sizeConstraint: f.sizeConstraint,\n    maxSwapTotalAccounts: f.maxSwapTotalAccounts,\n  };\n}\n\n/**\n * Rebuild a `SwapEngineRequest` server-side. The caller supplies the RPC\n * `connection` and the per-provider `apiConfig` (gateway URLs + API keys) so\n * those never travel over the wire.\n */\nexport function deserializeSwapEngineRequest(\n  s: SerializedSwapEngineRequest,\n  ctx: {\n    connection: Connection;\n    providerApiConfigs?: Partial<Record<SwapProvider, SwapApiConfig>>;\n  }\n): SwapEngineRequest {\n  return {\n    inputMint: s.inputMint,\n    outputMint: s.outputMint,\n    amountNative: s.amountNative,\n    inputDecimals: s.inputDecimals,\n    outputDecimals: s.outputDecimals,\n    slippageBps: s.slippageBps,\n    slippageMode: s.slippageMode,\n    platformFeeBps: s.platformFeeBps,\n    directRoutesOnly: s.directRoutesOnly,\n    taker: new PublicKey(s.taker),\n    destinationTokenAccount: new PublicKey(s.destinationTokenAccount),\n    connection: ctx.connection,\n    footprint: s.footprint ? deserializeFootprint(s.footprint) : undefined,\n    providers: s.providers.map((provider) => ({\n      provider,\n      apiConfig: ctx.providerApiConfigs?.[provider],\n    })),\n    jupiterMaxAccountsLadder: s.jupiterMaxAccountsLadder,\n  };\n}\n\nfunction deserializeFootprint(s: SerializedTxFootprint): TxFootprint {\n  return {\n    instructions: s.instructions.map(deserializeInstruction),\n    luts: s.luts.map(deserializeLut),\n    wrapperInstructions: s.wrapperInstructions?.map(deserializeInstruction),\n    payer: new PublicKey(s.payer),\n    sizeConstraint: s.sizeConstraint,\n    maxSwapTotalAccounts: s.maxSwapTotalAccounts,\n  };\n}\n\n// --- result ---\n\nexport function serializeSwapEngineResult(res: SwapEngineResult): SerializedSwapEngineResult {\n  return {\n    swapInstructions: res.swapInstructions.map(serializeInstruction),\n    setupInstructions: res.setupInstructions.map(serializeInstruction),\n    swapLuts: res.swapLuts.map(serializeLut),\n    quoteResponse: res.quoteResponse,\n    outputAmountNative: res.outputAmountNative.toString(),\n    provider: res.provider,\n  };\n}\n\nexport function deserializeSwapEngineResult(s: SerializedSwapEngineResult): SwapEngineResult {\n  return {\n    swapInstructions: s.swapInstructions.map(deserializeInstruction),\n    setupInstructions: s.setupInstructions.map(deserializeInstruction),\n    swapLuts: s.swapLuts.map(deserializeLut),\n    quoteResponse: s.quoteResponse,\n    outputAmountNative: new BN(s.outputAmountNative),\n    provider: s.provider,\n  };\n}\n","import { SwapOpts, SwapProvider, SwapProviderEntry } from \"~/services/account/types\";\n\n/**\n * Map a `SwapOpts` (primary provider + fallbacks) to the engine's provider list.\n * The engine queries ALL of them in parallel and picks the best fitting route,\n * so \"fallback\" providers become co-equal candidates here.\n */\nexport function swapEngineProvidersFromOpts(swapOpts: SwapOpts): SwapProviderEntry[] {\n  const cfg = swapOpts.swapConfig;\n  if (!cfg) return [{ provider: SwapProvider.JUPITER }];\n  const entries: SwapProviderEntry[] = [{ provider: cfg.provider, apiConfig: cfg.apiConfig }];\n  for (const fb of cfg.fallbackProviders ?? []) {\n    if (!entries.some((e) => e.provider === fb.provider)) entries.push(fb);\n  }\n  return entries;\n}\n\n/** Slippage / fee fields pulled from a `SwapOpts` for an engine request. */\nexport function swapEngineQuoteFieldsFromOpts(swapOpts: SwapOpts): {\n  slippageBps?: number;\n  slippageMode?: \"DYNAMIC\" | \"FIXED\";\n  platformFeeBps?: number;\n  directRoutesOnly?: boolean;\n} {\n  const cfg = swapOpts.swapConfig;\n  return {\n    slippageBps: cfg?.slippageBps,\n    slippageMode: cfg?.slippageMode,\n    platformFeeBps: cfg?.platformFeeBps,\n    directRoutesOnly: cfg?.directRoutesOnly,\n  };\n}\n","/**\n * Size the borrow amount for a debt swap from a market-price calculation.\n *\n * Provider ExactOut quotes are unreliable and Jupiter Router `/build` is\n * ExactIn-only, so instead of asking a provider \"how much input for this output\",\n * we borrow the no-slippage market equivalent of the repay target plus a slippage\n * buffer, then route ExactIn. For a full repay we add a little extra so a slight\n * shortfall doesn't fail the repayAll; for a partial repay we keep the buffer\n * tight to avoid minting more new debt than necessary.\n */\nexport const DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS = 50;\nconst DEFAULT_SLIPPAGE_BPS = 50;\n\nexport function computeBorrowEstimateForRepay(params: {\n  /** Target repay amount in UI units of the repay token. */\n  repayTargetUi: number;\n  /** Market price (USD/UI) of the repay token. */\n  repayMarketPrice: number;\n  /** Market price (USD/UI) of the borrow token. */\n  borrowMarketPrice: number;\n  slippageBps?: number;\n  /** Whether this repays the whole position (adds the extra buffer). */\n  isRepayAll: boolean;\n  repayAllExtraBufferBps?: number;\n}): number {\n  const {\n    repayTargetUi,\n    repayMarketPrice,\n    borrowMarketPrice,\n    slippageBps = DEFAULT_SLIPPAGE_BPS,\n    isRepayAll,\n    repayAllExtraBufferBps = DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS,\n  } = params;\n\n  if (borrowMarketPrice <= 0) {\n    throw new Error(\"computeBorrowEstimateForRepay: borrowMarketPrice must be positive\");\n  }\n\n  const bufferBps = slippageBps + (isRepayAll ? repayAllExtraBufferBps : 0);\n  return ((repayTargetUi * repayMarketPrice) / borrowMarketPrice) * (1 + bufferBps / 10000);\n}\n","import { AddressLookupTableAccount, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { ProviderSwapRoute, SwapAdapter, SwapEngineRequest } from \"../types\";\n\nimport { ADDRESS_LOOKUP_TABLE_FOR_SWAP, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { SwapApiConfig, SwapProvider, SwapQuoteResult } from \"~/services/account/types\";\nimport { checkJupiterFeeAccount, toJupiterConfig } from \"~/services/account/utils/jupiter.utils\";\nimport { createJupiterClient, type BuildResponse, type Instruction } from \"~/vendor/jupiter\";\n\n// Even when an account count fits MAX_ACCOUNT_LOCKS, Jupiter routes that use all\n// remaining slots tend to produce swap IXs large enough to blow the byte limit.\n// Titan constrains bytes directly via its template, so this margin is Jupiter-only.\nconst JUPITER_MAX_ACCOUNTS_MARGIN = 4;\nconst JUPITER_MIN_MAX_ACCOUNTS = 16;\n\n// Jupiter's `forJitoBundle` exclusion list currently misses GoonFi V2, whose\n// pool accounts include a validator vote account (J1to1yuf...) — Jito rejects\n// any bundle locking one (\"bundles cannot lock any vote accounts\"). Exclude it\n// explicitly until Jupiter adds it to the flag's list.\nconst BUNDLE_INCOMPATIBLE_DEXES = [\"GoonFi V2\"];\n\nfunction deserializeJupiterInstruction(ix: Instruction): TransactionInstruction {\n  return new TransactionInstruction({\n    programId: new PublicKey(ix.programId),\n    keys: ix.accounts.map((a) => ({\n      pubkey: new PublicKey(a.pubkey),\n      isSigner: a.isSigner,\n      isWritable: a.isWritable,\n    })),\n    data: Buffer.from(ix.data, \"base64\"),\n  });\n}\n\n/** Build ALT accounts from the Router's inline `addressesByLookupTableAddress`. */\nfunction lutsFromAddressMap(\n  map: Record<string, string[]> | null | undefined\n): AddressLookupTableAccount[] {\n  if (!map) return [];\n  return Object.entries(map).map(\n    ([key, addresses]) =>\n      new AddressLookupTableAccount({\n        key: new PublicKey(key),\n        state: {\n          deactivationSlot: BigInt(\"18446744073709551615\"), // u64 max = active\n          lastExtendedSlot: 0,\n          lastExtendedSlotStartIndex: 0,\n          addresses: addresses.map((a) => new PublicKey(a)),\n        },\n      })\n  );\n}\n\nfunction mapBuildToQuoteResult(build: BuildResponse): SwapQuoteResult {\n  return {\n    inAmount: build.inAmount,\n    outAmount: build.outAmount,\n    otherAmountThreshold: build.otherAmountThreshold,\n    slippageBps: build.slippageBps,\n    // /build does not return priceImpactPct; leave undefined.\n    provider: SwapProvider.JUPITER,\n  };\n}\n\n/** Default maxAccounts ladder derived from the remaining account budget. */\nfunction defaultLadder(maxSwapTotalAccounts: number): number[] {\n  const top = maxSwapTotalAccounts - JUPITER_MAX_ACCOUNTS_MARGIN;\n  const rungs = [top, top - 6, top - 12]\n    .map((n) => Math.max(JUPITER_MIN_MAX_ACCOUNTS, n))\n    .filter((n) => n > 0);\n  return [...new Set(rungs)];\n}\n\nasync function buildCandidates(\n  req: SwapEngineRequest,\n  apiConfig?: SwapApiConfig\n): Promise<ProviderSwapRoute[]> {\n  const client = createJupiterClient(toJupiterConfig(apiConfig));\n\n  // ExactIn: fee taken on the output mint.\n  const { feeAccount, hasFeeAccount } = await checkJupiterFeeAccount(\n    req.connection,\n    new PublicKey(req.outputMint)\n  );\n  const useFee = hasFeeAccount && !!req.platformFeeBps;\n\n  const project0Lut = (await req.connection.getAddressLookupTable(ADDRESS_LOOKUP_TABLE_FOR_SWAP))\n    ?.value;\n\n  const ladder =\n    req.jupiterMaxAccountsLadder ??\n    defaultLadder(req.footprint?.maxSwapTotalAccounts ?? MAX_ACCOUNT_LOCKS);\n\n  const settled = await Promise.allSettled(\n    ladder.map(async (maxAccounts): Promise<ProviderSwapRoute> => {\n      const build = await client.buildGet({\n        inputMint: req.inputMint,\n        outputMint: req.outputMint,\n        amount: req.amountNative,\n        taker: req.taker.toBase58(),\n        slippageBps: req.slippageBps,\n        mode: \"fast\",\n        maxAccounts,\n        wrapAndUnwrapSol: false,\n        // The swap engine always executes inside a Jito bundle; without this\n        // the Router may route through DEXes whose swaps lock vote accounts,\n        // which Jito rejects (\"bundles cannot lock any vote accounts\").\n        forJitoBundle: true,\n        excludeDexes: BUNDLE_INCOMPATIBLE_DEXES,\n        destinationTokenAccount: req.destinationTokenAccount.toBase58(),\n        platformFeeBps: useFee ? req.platformFeeBps : undefined,\n        feeAccount: useFee ? feeAccount : undefined,\n      });\n\n      const luts = lutsFromAddressMap(build.addressesByLookupTableAddress);\n      if (project0Lut) luts.push(project0Lut);\n\n      return {\n        provider: SwapProvider.JUPITER,\n        swapInstructions: [deserializeJupiterInstruction(build.swapInstruction)],\n        setupInstructions: (build.setupInstructions ?? []).map(deserializeJupiterInstruction),\n        luts,\n        outAmountNative: new BN(build.outAmount),\n        otherAmountThresholdNative: new BN(build.otherAmountThreshold),\n        quoteResult: mapBuildToQuoteResult(build),\n        label: `jupiter:maxAccounts=${maxAccounts}`,\n      };\n    })\n  );\n\n  const routes = settled\n    .filter((r): r is PromiseFulfilledResult<ProviderSwapRoute> => r.status === \"fulfilled\")\n    .map((r) => r.value);\n\n  if (routes.length === 0) {\n    const firstError = settled.find((r) => r.status === \"rejected\");\n    throw firstError?.reason instanceof Error\n      ? firstError.reason\n      : new Error(\"Jupiter Router returned no routes\");\n  }\n\n  return routes;\n}\n\nexport const jupiterAdapter: SwapAdapter = {\n  name: SwapProvider.JUPITER,\n  supportsBuild: true,\n  buildCandidates,\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { ProviderSwapRoute, SwapAdapter, SwapEngineRequest } from \"../types\";\n\nimport { SwapApiConfig, SwapProvider } from \"~/services/account/types\";\nimport { checkTitanFeeAccount } from \"~/services/account/utils/titan.utils\";\nimport {\n  V1Client,\n  SwapMode,\n  SwapVersion,\n  buildTitanTemplate,\n  buildSwapQuoteResult,\n  deserializeTitanWireInstruction,\n  resolveLookupTables,\n  selectGatewayRoute,\n  type SwapQuotes,\n} from \"~/vendor/titan\";\n\n/**\n * Quote providers we let Titan route through. We intentionally exclude the\n * `Titan-DART` (RFQ / private-swap) provider — it settles via a separate\n * auction/signature and isn't composable inside our flashloan transaction.\n * The router has no exclude-list, only a `providers` allowlist, so we list the\n * composable aggregators by id.\n *\n * TODO: switch to an exclude mechanism once Titan exposes one (allowlisting by\n * id silently drops any provider Titan adds in the future).\n */\nconst TITAN_COMPOSABLE_PROVIDERS = [\"Titan\", \"Metis\", \"Okx\"];\n\n/**\n * Budget for both the WS connect and the first-quote read. The stream pushes the\n * full provider `quotes` map in every update, so a single read is enough.\n */\nconst TITAN_WS_TIMEOUT_MS = 5_000;\n\n/**\n * Titan Swap V3 adapter. Quotes over the Titan Direct **WebSocket** so the full\n * flashloan footprint `transactionTemplate` (the non-swap inner ixs + loop ALTs)\n * can be sent inline as a native msgpack object. The equivalent gateway GET\n * sends the template as a query-string value, which overflows the URI limit\n * (HTTP 414) once the loop's large lookup tables are included.\n *\n * The template is sizing-only: the surrounding instructions already exist in the\n * assembled flashloan tx (the engine splices the returned route into the swap\n * slot), so we do not re-emit the template's instructions.\n */\nasync function buildCandidates(\n  req: SwapEngineRequest,\n  apiConfig?: SwapApiConfig\n): Promise<ProviderSwapRoute[]> {\n  const wsUrl = apiConfig?.wsUrl;\n  if (!wsUrl) throw new Error(\"Titan WebSocket URL is required (apiConfig.wsUrl)\");\n  const footprint = req.footprint;\n  if (!footprint) throw new Error(\"Titan buildCandidates requires a footprint\");\n\n  const { fee, feeAccount } = await resolveFee(req);\n\n  // Full-footprint template: the non-swap inner ixs + (optional) FL wrapper + loop LUTs.\n  const template = buildTitanTemplate({\n    instructions: [...(footprint.wrapperInstructions ?? []), ...footprint.instructions],\n    luts: footprint.luts,\n  });\n\n  const client = await withTimeout(\n    V1Client.connect(authedWsUrl(wsUrl, apiConfig?.apiKey)),\n    TITAN_WS_TIMEOUT_MS,\n    \"Titan WebSocket connect timed out\"\n  );\n\n  let streamId: number | undefined;\n  try {\n    const { stream, streamId: id } = await client.newSwapQuoteStream({\n      swap: {\n        inputMint: new PublicKey(req.inputMint).toBytes(),\n        outputMint: new PublicKey(req.outputMint).toBytes(),\n        amount: req.amountNative,\n        swapMode: SwapMode.ExactIn,\n        slippageBps: req.slippageBps,\n        onlyDirectRoutes: req.directRoutesOnly,\n        // Exclude vote-account venues — they touch validator vote accounts that Jito won't bundle, so a\n        // route through them would make the swap unlandable inside our flashloan / double-hop bundles\n        // (same reason we strip `jito*` markers in vendor/titan/helpers).\n        noVoteAccounts: true,\n        providers: TITAN_COMPOSABLE_PROVIDERS,\n        transactionTemplate: template,\n      },\n      transaction: {\n        userPublicKey: req.taker.toBytes(),\n        outputAccount: req.destinationTokenAccount.toBytes(),\n        // Keep a wSOL output wrapped in the destination ATA (the analog of\n        // Jupiter's `wrapAndUnwrapSol: false`). Our flashloan flows consume the\n        // output with a subsequent marginfi ix built with `wrapAndUnwrapSol:\n        // false`, so the wSOL must NOT be unwrapped to native lamports. Ignored\n        // by Titan when the output mint isn't wSOL.\n        outputWsol: true,\n        titanSwapVersion: SwapVersion.V3,\n        ...(fee !== undefined && feeAccount\n          ? { feeBps: fee, feeAccount: new PublicKey(feeAccount).toBytes() }\n          : {}),\n      },\n      update: { num_quotes: 3 },\n    });\n    streamId = id;\n\n    const reader = stream.getReader();\n    let swapQuotes: SwapQuotes;\n    try {\n      const { value, done } = await withTimeout(\n        reader.read(),\n        TITAN_WS_TIMEOUT_MS,\n        \"Titan WebSocket quote timed out\"\n      );\n      if (done || !value) throw new Error(\"Titan swap quote stream ended without data\");\n      swapQuotes = value;\n    } finally {\n      reader.releaseLock();\n    }\n\n    const route = selectGatewayRoute(\n      { quotes: swapQuotes.quotes, metadata: swapQuotes.metadata },\n      \"ExactIn\"\n    );\n    if (!route) {\n      throw new Error(`No Titan V3 route found for ${req.inputMint} -> ${req.outputMint}`);\n    }\n\n    const swapInstructions = route.instructions.map(deserializeTitanWireInstruction);\n    const lutPubkeys = route.addressLookupTables.map((bytes) => new PublicKey(bytes));\n    const luts = await resolveLookupTables(req.connection, lutPubkeys);\n\n    const quote = buildSwapQuoteResult(route, \"ExactIn\");\n\n    return [\n      {\n        provider: SwapProvider.TITAN,\n        swapInstructions,\n        setupInstructions: [],\n        luts,\n        outAmountNative: new BN(quote.outAmount),\n        otherAmountThresholdNative: new BN(quote.otherAmountThreshold),\n        quoteResult: { ...quote, provider: SwapProvider.TITAN },\n        label: \"titan:v3\",\n      },\n    ];\n  } finally {\n    if (streamId !== undefined && !client.closed) {\n      await client.stopStream(streamId).catch(() => {});\n    }\n    if (!client.closed) await client.close();\n  }\n}\n\n/** Only attach a platform fee when the referral ATA exists and a fee is requested. */\nasync function resolveFee(req: SwapEngineRequest): Promise<{ fee?: number; feeAccount?: string }> {\n  if (!req.platformFeeBps) return {};\n  // ExactIn: fee taken on the output mint.\n  const feeMint = new PublicKey(req.outputMint);\n  const { feeAccount, hasFeeAccount } = await checkTitanFeeAccount(req.connection, feeMint);\n  if (!hasFeeAccount) {\n    console.warn(\"[titan] fee account ATA missing, disabling platform fee\");\n    return {};\n  }\n  return { fee: req.platformFeeBps, feeAccount: feeAccount.toBase58() };\n}\n\n/** Append the JWT as an `auth` query param (works with the bare `connect(url)`). */\nfunction authedWsUrl(wsUrl: string, apiKey?: string): string {\n  if (!apiKey) return wsUrl;\n  const sep = wsUrl.includes(\"?\") ? \"&\" : \"?\";\n  return `${wsUrl}${sep}auth=${encodeURIComponent(apiKey)}`;\n}\n\n/** Reject if `promise` doesn't settle within `ms`. */\nfunction withTimeout<T>(promise: Promise<T>, ms: number, message: string): Promise<T> {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const timeout = new Promise<never>((_, reject) => {\n    timer = setTimeout(() => reject(new Error(message)), ms);\n  });\n  return Promise.race([promise, timeout]).finally(() => clearTimeout(timer));\n}\n\nexport const titanAdapter: SwapAdapter = {\n  name: SwapProvider.TITAN,\n  supportsBuild: true,\n  buildCandidates,\n};\n","import { SwapAdapter } from \"../types\";\n\nimport { jupiterAdapter } from \"./jupiter.adapter\";\nimport { titanAdapter } from \"./titan.adapter\";\n\nimport { SwapProvider } from \"~/services/account/types\";\n\n/**\n * Registry of swap providers. To add a provider: implement a `SwapAdapter` and\n * add one entry here — the engine picks it up automatically for any request that\n * lists the provider in `providers`.\n */\nexport const SWAP_ADAPTERS: Partial<Record<SwapProvider, SwapAdapter>> = {\n  [SwapProvider.TITAN]: titanAdapter,\n  [SwapProvider.JUPITER]: jupiterAdapter,\n};\n\nexport function getSwapAdapter(provider: SwapProvider): SwapAdapter | undefined {\n  return SWAP_ADAPTERS[provider];\n}\n","import { SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { getSwapAdapter } from \"./adapters\";\nimport {\n  ProviderSwapRoute,\n  SwapAdapter,\n  SwapCandidate,\n  SwapEngineRequest,\n  SwapEngineResult,\n} from \"./types\";\n\nimport { MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { SwapApiConfig } from \"~/services/account/types\";\nimport { compileFlashloanPrecheck } from \"~/services/account/utils/flashloan-size.utils\";\nimport {\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n  TOKEN_PROGRAM_ID,\n  TokenInstruction,\n} from \"~/vendor/spl\";\n\ninterface ResolvedAdapter {\n  adapter: SwapAdapter;\n  apiConfig?: SwapApiConfig;\n}\n\n/** Resolve configured providers to adapters that satisfy `predicate`. */\nfunction resolveAdapters(\n  req: SwapEngineRequest,\n  predicate: (adapter: SwapAdapter) => boolean\n): ResolvedAdapter[] {\n  const resolved: ResolvedAdapter[] = [];\n  for (const entry of req.providers) {\n    const adapter = getSwapAdapter(entry.provider);\n    if (adapter && predicate(adapter)) {\n      resolved.push({ adapter, apiConfig: entry.apiConfig });\n    }\n  }\n  return resolved;\n}\n\n/**\n * Multi-provider swap engine. Fans out to every configured provider in parallel,\n * keeps only routes that fit the remaining flashloan budget, and returns the one\n * with the highest expected output (ExactIn). The returned shape matches the\n * flashloan finalize seam so callers splice + patch + wrap unchanged.\n */\nexport async function runSwapEngine(req: SwapEngineRequest): Promise<SwapEngineResult> {\n  const adapters = resolveAdapters(req, (a) => a.supportsBuild);\n\n  if (adapters.length === 0) {\n    throw TransactionBuildingError.swapQuoteFailed(\n      req.providers[0]?.provider ?? \"Swap\",\n      req.inputMint,\n      req.outputMint,\n      \"No build-capable swap provider configured\"\n    );\n  }\n\n  const settled = await Promise.allSettled(\n    adapters.map(({ adapter, apiConfig }) => adapter.buildCandidates(req, apiConfig))\n  );\n\n  const routes: ProviderSwapRoute[] = [];\n  const failures: string[] = [];\n  for (const [i, result] of settled.entries()) {\n    if (result.status === \"fulfilled\") {\n      routes.push(...result.value);\n    } else {\n      const provider = adapters[i].adapter.name;\n      const message =\n        result.reason instanceof Error ? result.reason.message : String(result.reason);\n      failures.push(`${provider}: ${message}`);\n      console.warn(`[swap-engine] ${provider} failed:`, message);\n    }\n  }\n\n  if (routes.length === 0) {\n    throw TransactionBuildingError.swapQuoteFailed(\n      req.providers[0]?.provider ?? \"Swap\",\n      req.inputMint,\n      req.outputMint,\n      failures.join(\"; \") || \"No swap route available\"\n    );\n  }\n\n  // Our flows own SOL wrapping: the wSOL ATA is funded in-tx (borrow / withdraw / explicit wrap)\n  // and its output is consumed by a following ix. A provider that wraps the input from the\n  // taker's lamports (transfer + SyncNative) or unwraps the output (CloseAccount) — Titan's raw\n  // routes do the former, Titan has no input-side `outputWsol` analog — would double-wrap or\n  // break the consumer, so those ixs are dropped from every route.\n  const wsolAta = getAssociatedTokenAddressSync(NATIVE_MINT, req.taker, true);\n  const isProviderSolWrapIx = (ix: TransactionInstruction) =>\n    (ix.programId.equals(SystemProgram.programId) &&\n      ix.data.length >= 12 &&\n      ix.data.readUInt32LE(0) === 2 &&\n      ix.keys[0]?.pubkey.equals(req.taker) &&\n      ix.keys[1]?.pubkey.equals(wsolAta)) ||\n    (ix.programId.equals(TOKEN_PROGRAM_ID) &&\n      (ix.data[0] === TokenInstruction.SyncNative ||\n        ix.data[0] === TokenInstruction.CloseAccount) &&\n      ix.keys[0]?.pubkey.equals(wsolAta));\n\n  const candidates = routes.map((route) =>\n    annotateFit(\n      {\n        ...route,\n        swapInstructions: route.swapInstructions.filter((ix) => !isProviderSolWrapIx(ix)),\n        setupInstructions: route.setupInstructions.filter((ix) => !isProviderSolWrapIx(ix)),\n      },\n      req\n    )\n  );\n  // A route must both fit the budget AND actually yield output — providers can\n  // occasionally return a degenerate route (instructions present, outAmount 0);\n  // selecting one would patch the deposit to ~0 and produce a broken tx.\n  const fitting = candidates.filter((c) => c.fits && c.outAmountNative.gtn(0));\n\n  if (fitting.length === 0) {\n    // Report the closest-to-fitting candidate for diagnostics.\n    const closest = candidates.reduce((best, c) => (c.fullTxSize < best.fullTxSize ? c : best));\n    throw TransactionBuildingError.swapSizeExceededLoop(\n      closest.fullTxSize,\n      closest.totalAccounts,\n      closest.provider\n    );\n  }\n\n  // Highest expected output wins (ExactIn, same output token across providers).\n  const winner = fitting.reduce((best, c) =>\n    c.outAmountNative.gt(best.outAmountNative) ? c : best\n  );\n\n  console.log(\"[swap-engine] selected\", {\n    provider: winner.provider,\n    label: winner.label,\n    outAmount: winner.outAmountNative.toString(),\n    fullTxSize: winner.fullTxSize,\n    totalAccounts: winner.totalAccounts,\n    candidates: candidates.map((c) => ({\n      provider: c.provider,\n      label: c.label,\n      out: c.outAmountNative.toString(),\n      fits: c.fits,\n      size: c.fullTxSize,\n    })),\n  });\n\n  return {\n    swapInstructions: winner.swapInstructions,\n    setupInstructions: winner.setupInstructions,\n    swapLuts: winner.luts,\n    quoteResponse: winner.quoteResult,\n    // Patch the deposit to the minimum guaranteed output so the tx can't fail\n    // on a deposit larger than the swap actually yields.\n    outputAmountNative: winner.otherAmountThresholdNative,\n    provider: winner.provider,\n  };\n}\n\n/** Compile the full inner tx (footprint + this route's swap) to verify it fits. */\nfunction annotateFit(route: ProviderSwapRoute, req: SwapEngineRequest): SwapCandidate {\n  const { footprint } = req;\n  if (!footprint) throw new Error(\"runSwapEngine requires a footprint\");\n  const allIxs = [...footprint.instructions, ...route.swapInstructions];\n  const luts = [...footprint.luts, ...route.luts];\n\n  const precheck = compileFlashloanPrecheck({\n    allIxs,\n    payer: footprint.payer,\n    luts,\n    sizeConstraint: footprint.sizeConstraint,\n    swapIxCount: route.swapInstructions.length,\n    swapLutCount: route.luts.length,\n  });\n\n  const fits = precheck.overshoot <= 0 && precheck.totalAccounts <= MAX_ACCOUNT_LOCKS;\n\n  return {\n    ...route,\n    fullTxSize: precheck.fullTxSize,\n    totalAccounts: precheck.totalAccounts,\n    fits,\n  };\n}\n","import { PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { MakeFlashLoanTxParams } from \"../types\";\nimport { computeHealthAccountMetas, computeProjectedActiveBanksNoCpi } from \"../utils\";\n\nimport instructions from \"~/instructions\";\nimport { BankType } from \"~/services/bank\";\nimport {\n  addTransactionMetadata,\n  InstructionsWrapper,\n  TransactionType,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { MarginfiProgram } from \"~/types\";\n\nexport async function makeBeginFlashLoanIx(\n  program: MarginfiProgram,\n  marginfiAccountPk: PublicKey,\n  endIndex: number,\n  authority?: PublicKey,\n  isSync?: boolean\n): Promise<InstructionsWrapper> {\n  const ix =\n    isSync && authority\n      ? syncInstructions.makeBeginFlashLoanIx(\n          program.programId,\n          {\n            marginfiAccount: marginfiAccountPk,\n            authority,\n          },\n          { endIndex: new BN(endIndex) }\n        )\n      : await instructions.makeBeginFlashLoanIx(\n          program,\n          {\n            marginfiAccount: marginfiAccountPk,\n            authority,\n          },\n          { endIndex: new BN(endIndex) }\n        );\n  return { instructions: [ix], keys: [] };\n}\n\nexport async function makeEndFlashLoanIx(\n  program: MarginfiProgram,\n  marginfiAccountPk: PublicKey,\n  group: PublicKey,\n  projectedActiveBanks: BankType[],\n  authority?: PublicKey,\n  isSync?: boolean\n): Promise<InstructionsWrapper> {\n  const remainingAccounts = computeHealthAccountMetas({ banksToInclude: projectedActiveBanks });\n  const ix =\n    isSync && authority\n      ? syncInstructions.makeEndFlashLoanIx(\n          program.programId,\n          {\n            marginfiAccount: marginfiAccountPk,\n            group,\n            authority,\n          },\n          remainingAccounts.map((account) => ({\n            pubkey: account,\n            isSigner: false,\n            isWritable: false,\n          }))\n        )\n      : await instructions.makeEndFlashLoanIx(\n          program,\n          {\n            marginfiAccount: marginfiAccountPk,\n            group,\n            authority,\n          },\n          remainingAccounts.map((account) => ({\n            pubkey: account,\n            isSigner: false,\n            isWritable: false,\n          }))\n        );\n  return { instructions: [ix], keys: [] };\n}\n\nexport async function makeFlashLoanTx({\n  program,\n  marginfiAccount,\n  ixs,\n  bankMap,\n  blockhash,\n  addressLookupTableAccounts,\n  signers,\n  isSync,\n}: MakeFlashLoanTxParams) {\n  const endIndex = ixs.length + 1;\n\n  const projectedActiveBanksKeys: PublicKey[] = computeProjectedActiveBanksNoCpi({\n    account: marginfiAccount,\n    instructions: ixs,\n    program,\n  });\n\n  const projectedActiveBanks = projectedActiveBanksKeys.map((account) => {\n    const b = bankMap.get(account.toBase58());\n    if (!b) throw Error(`Bank ${account.toBase58()} not found, in makeFlashLoanTx function`);\n    return b;\n  });\n\n  const beginFlashLoanIx = await makeBeginFlashLoanIx(\n    program,\n    marginfiAccount.address,\n    endIndex,\n    marginfiAccount.authority,\n    isSync\n  );\n  const endFlashLoanIx = await makeEndFlashLoanIx(\n    program,\n    marginfiAccount.address,\n    marginfiAccount.group,\n    projectedActiveBanks,\n    marginfiAccount.authority,\n    isSync\n  );\n\n  const message = new TransactionMessage({\n    payerKey: marginfiAccount.authority,\n    recentBlockhash: blockhash,\n    instructions: [...beginFlashLoanIx.instructions, ...ixs, ...endFlashLoanIx.instructions],\n  }).compileToV0Message(addressLookupTableAccounts);\n\n  const tx = addTransactionMetadata(new VersionedTransaction(message), {\n    addressLookupTables: addressLookupTableAccounts,\n    type: TransactionType.FLASHLOAN,\n    signers: signers,\n  });\n\n  if (signers) {\n    tx.sign(signers);\n  }\n\n  return tx;\n}\n","import {\n  PublicKey,\n  TransactionInstruction,\n  AddressLookupTableAccount,\n  VersionedTransaction,\n  TransactionMessage,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport {\n  MakeKaminoWithdrawIxParams,\n  MakeWithdrawIxParams,\n  MakeWithdrawTxParams,\n  TransactionBuilderResult,\n  MakeKaminoWithdrawTxParams,\n  MakeDriftWithdrawTxParams,\n  MakeDriftWithdrawIxParams,\n  MakeJuplendWithdrawIxParams,\n  MakeJuplendWithdrawTxParams,\n} from \"../types\";\nimport { computeHealthCheckAccounts, computeHealthAccountMetas } from \"../utils\";\n\nimport instructions from \"~/instructions\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeUnwrapSolIx,\n  selectLutsForAccountAction,\n  TransactionType,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { resolveAmount } from \"~/types\";\nimport { uiToNative } from \"~/utils\";\nimport { getAllDerivedDriftAccounts } from \"~/vendor/drift\";\nimport { JUP_LIQUIDITY_PROGRAM_ID, getAllDerivedJupLendAccounts } from \"~/vendor/jup-lend\";\nimport { deriveUserState, FARMS_PROGRAM_ID, getAllDerivedKaminoAccounts } from \"~/vendor/klend\";\nimport {\n  createAssociatedTokenAccountIdempotentInstruction,\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n  TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\nexport async function makeDriftWithdrawIx({\n  program,\n  bank,\n  bankMap,\n  tokenProgram,\n  amount,\n  marginfiAccount,\n  driftSpotMarket,\n  userRewards,\n  authority,\n  withdrawAll = false,\n  isSync = false,\n  opts = {},\n}: MakeDriftWithdrawIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const createAtas = opts.createAtas ?? true;\n  const withdrawIxs: TransactionInstruction[] = [];\n  const remainingAccounts: PublicKey[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  if (createAtas) {\n    const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n      authority,\n      userTokenAtaPk,\n      authority,\n      bank.mint,\n      tokenProgram\n    );\n    withdrawIxs.push(createAtaIdempotentIx);\n  }\n\n  const healthAccounts = withdrawAll\n    ? computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        excludedBanks: [bank.address],\n      })\n    : computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        mandatoryBanks: [bank.address],\n      });\n\n  const marketIndex = driftSpotMarket.marketIndex;\n  const driftOracle = driftSpotMarket.oracle;\n\n  const { driftState, driftSigner, driftSpotMarketVault } = getAllDerivedDriftAccounts(marketIndex);\n\n  if (!bank.driftIntegrationAccounts) {\n    throw new Error(\"Bank has no drift integration accounts\");\n  }\n\n  if (opts.observationBanksOverride) {\n    remainingAccounts.push(...opts.observationBanksOverride);\n  } else {\n    // On withdraw-all the bank is excluded from the health pack (its balance closes), but\n    // its accounts are appended at the end: the 1.9 program searches the slice for the\n    // withdrawn bank's oracle when the group rate limiter is enabled (extra trailing\n    // accounts are ignored by 1.8).\n    const accountMetas = computeHealthAccountMetas({\n      banksToInclude: healthAccounts,\n      trailingBanks: withdrawAll ? [bank] : [],\n    });\n    remainingAccounts.push(...accountMetas);\n  }\n\n  // Extract reward values from userRewards array\n  // Handles 0, 1, 2, or 2+ rewards with proper error handling\n\n  // Validate array length\n  if (userRewards.length > 2) {\n    console.error(\n      `Warning: User has ${userRewards.length} Drift rewards, but only 2 are supported. Using first 2 only.`\n    );\n  }\n\n  // Extract first reward (or null if empty)\n  const driftRewardOracle = userRewards[0]?.oracle ?? null;\n  const driftRewardSpotMarket = userRewards[0]?.spotMarket ?? null;\n  const driftRewardMint = userRewards[0]?.mint ?? null;\n\n  // Extract second reward (or null if not present)\n  const driftRewardOracle2 = userRewards[1]?.oracle ?? null;\n  const driftRewardSpotMarket2 = userRewards[1]?.spotMarket ?? null;\n  const driftRewardMint2 = userRewards[1]?.mint ?? null;\n\n  const withdrawIx = isSync\n    ? syncInstructions.makeDriftWithdrawIx(\n        program.programId,\n        {\n          group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n          marginfiAccount: marginfiAccount.address,\n          authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          bank: bank.address,\n          destinationTokenAccount: userTokenAtaPk,\n\n          driftState,\n          integrationAcc2: bank.driftIntegrationAccounts.driftUser,\n          integrationAcc3: bank.driftIntegrationAccounts.driftUserStats,\n          integrationAcc1: bank.driftIntegrationAccounts.driftSpotMarket,\n          driftSpotMarketVault,\n          driftSigner,\n          liquidityVault: bank.liquidityVault,\n          mint: bank.mint,\n          tokenProgram,\n\n          driftOracle,\n          driftRewardOracle,\n          driftRewardSpotMarket,\n          driftRewardMint,\n          driftRewardOracle2,\n          driftRewardSpotMarket2,\n          driftRewardMint2,\n        },\n        {\n          amount: uiToNative(amount, bank.mintDecimals),\n          withdrawAll,\n        },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      )\n    : await instructions.makeDriftWithdrawIx(\n        program,\n        {\n          marginfiAccount: marginfiAccount.address,\n          bank: bank.address,\n          destinationTokenAccount: userTokenAtaPk,\n\n          driftState,\n          driftSigner,\n          driftSpotMarketVault,\n          tokenProgram,\n\n          driftOracle,\n          driftRewardOracle,\n          driftRewardSpotMarket,\n          driftRewardMint,\n          driftRewardOracle2,\n          driftRewardSpotMarket2,\n          driftRewardMint2,\n\n          authority: opts.overrideInferAccounts?.authority,\n          group: opts.overrideInferAccounts?.group,\n        },\n        {\n          amount: uiToNative(amount, bank.mintDecimals),\n          withdrawAll,\n        },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      );\n\n  withdrawIxs.push(withdrawIx);\n\n  if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n    withdrawIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  return {\n    instructions: withdrawIxs,\n    keys: [],\n  };\n}\n\nexport async function makeDriftWithdrawTx(\n  params: MakeDriftWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n  const { luts, connection, ...withdrawIxParams } = params;\n\n  const selectedLuts = selectLutsForAccountAction(\n    luts,\n    withdrawIxParams.bank,\n    params.marginfiAccount.balances,\n    params.bankMap\n  );\n\n  const hasLiabilities = params.marginfiAccount.balances.some((balance) => {\n    return balance.liabilityShares.gt(0);\n  });\n\n  let updateFeedIxs: TransactionInstruction[] = [];\n  let feedLuts: AddressLookupTableAccount[] = [];\n\n  const withdrawIxs = await makeDriftWithdrawIx(withdrawIxParams);\n\n  if (hasLiabilities) {\n    const { instructions: _updateFeedIxs, luts: _feedLuts } = await makeSmartCrankSwbFeedIx({\n      marginfiAccount: params.marginfiAccount,\n      bankMap: params.bankMap,\n      oraclePrices: params.oraclePrices,\n      assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n      instructions: withdrawIxs.instructions,\n      program: params.program,\n      connection: params.connection,\n      crossbarUrl: params.crossbarUrl,\n    });\n    updateFeedIxs = _updateFeedIxs;\n    feedLuts = _feedLuts;\n  }\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [withdrawIxParams.bank.address],\n    params.bankMetadataMap\n  );\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const feedCrankTxs: ExtendedV0Transaction[] = [];\n\n  if (updateFeedIxs.length > 0) {\n    feedCrankTxs.push(\n      addTransactionMetadata(\n        new VersionedTransaction(\n          new TransactionMessage({\n            instructions: [...updateFeedIxs],\n            payerKey: params.authority,\n            recentBlockhash: blockhash,\n          }).compileToV0Message(feedLuts)\n        ),\n        {\n          addressLookupTables: feedLuts,\n          type: TransactionType.CRANK,\n        }\n      )\n    );\n  }\n\n  const withdrawTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIntegrationIxs.instructions, ...withdrawIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: [...refreshIntegrationIxs.keys, ...withdrawIxs.keys],\n      addressLookupTables: selectedLuts,\n      type: TransactionType.WITHDRAW,\n    }\n  );\n\n  const transactions = [...feedCrankTxs, withdrawTx];\n\n  return { transactions, actionTxIndex: transactions.length - 1 };\n}\n\nexport async function makeKaminoWithdrawIx({\n  program,\n  bank,\n  bankMap,\n  tokenProgram,\n  cTokenAmount,\n  marginfiAccount,\n  reserve,\n  authority,\n  withdrawAll = false,\n  isSync = false,\n  opts = {},\n}: MakeKaminoWithdrawIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const createAtas = opts.createAtas ?? true;\n  const withdrawIxs: TransactionInstruction[] = [];\n  const remainingAccounts: PublicKey[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  if (createAtas) {\n    const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n      authority,\n      userTokenAtaPk,\n      authority,\n      bank.mint,\n      tokenProgram\n    );\n    withdrawIxs.push(createAtaIdempotentIx);\n  }\n\n  const healthAccounts = withdrawAll\n    ? computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        excludedBanks: [bank.address],\n      })\n    : computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        mandatoryBanks: [bank.address],\n      });\n\n  const lendingMarket = reserve.lendingMarket;\n\n  const reserveLiquiditySupply = reserve.liquidity.supplyVault;\n  const reserveCollateralMint = reserve.collateral.mintPubkey;\n  const reserveDestinationDepositCollateral = reserve.collateral.supplyVault;\n\n  const { lendingMarketAuthority } = getAllDerivedKaminoAccounts(reserve.lendingMarket, bank.mint);\n\n  if (!bank.kaminoIntegrationAccounts) {\n    throw new Error(\"Bank has no kamino integration accounts\");\n  }\n\n  const reserveFarm = !reserve.farmCollateral.equals(\n    new PublicKey(\"11111111111111111111111111111111\")\n  )\n    ? reserve.farmCollateral\n    : null;\n\n  const [userFarmState] = reserveFarm\n    ? deriveUserState(\n        FARMS_PROGRAM_ID,\n        reserveFarm,\n        bank.kaminoIntegrationAccounts.kaminoObligation\n      )\n    : [null];\n\n  if (opts.observationBanksOverride) {\n    remainingAccounts.push(...opts.observationBanksOverride);\n  } else {\n    // On withdraw-all the bank is excluded from the health pack (its balance closes), but\n    // its accounts are appended at the end: the 1.9 program searches the slice for the\n    // withdrawn bank's oracle when the group rate limiter is enabled (extra trailing\n    // accounts are ignored by 1.8).\n    const accountMetas = computeHealthAccountMetas({\n      banksToInclude: healthAccounts,\n      trailingBanks: withdrawAll ? [bank] : [],\n    });\n    remainingAccounts.push(...accountMetas);\n  }\n\n  const withdrawIx = isSync\n    ? syncInstructions.makeKaminoWithdrawIx(\n        program.programId,\n        {\n          group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n          marginfiAccount: marginfiAccount.address,\n          authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          bank: bank.address,\n          destinationTokenAccount: userTokenAtaPk,\n\n          integrationAcc2: bank.kaminoIntegrationAccounts.kaminoObligation,\n          lendingMarket,\n          lendingMarketAuthority,\n          integrationAcc1: bank.kaminoIntegrationAccounts.kaminoReserve,\n          mint: bank.mint,\n          reserveLiquiditySupply,\n          reserveCollateralMint,\n\n          reserveSourceCollateral: reserveDestinationDepositCollateral,\n          liquidityTokenProgram: tokenProgram,\n\n          obligationFarmUserState: userFarmState,\n          reserveFarmState: reserveFarm,\n        },\n        {\n          amount: uiToNative(cTokenAmount, bank.mintDecimals),\n          isFinalWithdrawal: withdrawAll,\n        },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      )\n    : await instructions.makeKaminoWithdrawIx(\n        program,\n        {\n          marginfiAccount: marginfiAccount.address,\n          bank: bank.address,\n          destinationTokenAccount: userTokenAtaPk,\n          lendingMarket,\n          mint: bank.mint,\n\n          lendingMarketAuthority,\n          reserveLiquiditySupply,\n          reserveCollateralMint,\n\n          reserveSourceCollateral: reserveDestinationDepositCollateral,\n          liquidityTokenProgram: tokenProgram,\n\n          obligationFarmUserState: userFarmState,\n          reserveFarmState: reserveFarm,\n\n          authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n        },\n        {\n          amount: uiToNative(cTokenAmount, bank.mintDecimals),\n          isFinalWithdrawal: withdrawAll,\n        },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      );\n\n  withdrawIxs.push(withdrawIx);\n\n  if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n    withdrawIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  return {\n    instructions: withdrawIxs,\n    keys: [],\n  };\n}\n\nexport async function makeWithdrawIx({\n  program,\n  bank,\n  bankMap,\n  tokenProgram,\n  amount,\n  marginfiAccount,\n  authority,\n  withdrawAll = false,\n  isSync = false,\n  opts = {},\n}: MakeWithdrawIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const createAtas = opts.createAtas ?? true;\n\n  const withdrawIxs = [];\n\n  const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  if (createAtas) {\n    const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n      authority,\n      userAta,\n      authority,\n      bank.mint,\n      tokenProgram\n    );\n    withdrawIxs.push(createAtaIdempotentIx);\n  }\n\n  const healthAccounts = withdrawAll\n    ? computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        excludedBanks: [bank.address],\n      })\n    : computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        mandatoryBanks: [bank.address],\n      });\n\n  // Add withdraw-related instructions\n  const remainingAccounts: PublicKey[] = [];\n  if (tokenProgram.equals(TOKEN_2022_PROGRAM_ID)) {\n    remainingAccounts.push(bank.mint);\n  }\n  if (opts.observationBanksOverride) {\n    remainingAccounts.push(...opts.observationBanksOverride);\n  } else {\n    // On withdraw-all the bank is excluded from the health pack (its balance closes), but\n    // its accounts are appended at the end: the 1.9 program searches the slice for the\n    // withdrawn bank's oracle when the group rate limiter is enabled (extra trailing\n    // accounts are ignored by 1.8).\n    const accountMetas = computeHealthAccountMetas({\n      banksToInclude: healthAccounts,\n      trailingBanks: withdrawAll ? [bank] : [],\n    });\n    remainingAccounts.push(...accountMetas);\n  }\n\n  const withdrawIx = isSync\n    ? syncInstructions.makeWithdrawIx(\n        program.programId,\n        {\n          group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n          marginfiAccount: marginfiAccount.address,\n          authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          bank: bank.address,\n          destinationTokenAccount: userAta,\n          tokenProgram: tokenProgram,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals), withdrawAll },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      )\n    : await instructions.makeWithdrawIx(\n        program,\n        {\n          marginfiAccount: marginfiAccount.address,\n          bank: bank.address,\n          destinationTokenAccount: userAta,\n          tokenProgram: tokenProgram,\n          authority: opts.overrideInferAccounts?.authority ?? marginfiAccount.authority,\n          group: opts.overrideInferAccounts?.group ?? marginfiAccount.group,\n        },\n        { amount: uiToNative(amount, bank.mintDecimals), withdrawAll },\n        remainingAccounts.map((account) => ({\n          pubkey: account,\n          isSigner: false,\n          isWritable: false,\n        }))\n      );\n\n  withdrawIxs.push(withdrawIx);\n\n  if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n    withdrawIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  return {\n    instructions: withdrawIxs,\n    keys: [],\n  };\n}\n\nexport async function makeWithdrawTx(\n  params: MakeWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n  const { luts, connection, ...withdrawIxParams } = params;\n\n  // Pick the lean native-stake LUT subset when every involved bank (target + the\n  // account's active positions) is STAKED/SOL.\n  const selectedLuts = selectLutsForAccountAction(\n    luts,\n    withdrawIxParams.bank,\n    params.marginfiAccount.balances,\n    params.bankMap\n  );\n\n  const hasLiabilities = params.marginfiAccount.balances.some((balance) => {\n    return balance.liabilityShares.gt(0);\n  });\n\n  let updateFeedIxs: TransactionInstruction[] = [];\n  let feedLuts: AddressLookupTableAccount[] = [];\n\n  const withdrawIxs = await makeWithdrawIx(withdrawIxParams);\n\n  if (hasLiabilities) {\n    const { instructions: _updateFeedIxs, luts: _feedLuts } = await makeSmartCrankSwbFeedIx({\n      marginfiAccount: params.marginfiAccount,\n      bankMap: params.bankMap,\n      oraclePrices: params.oraclePrices,\n      assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n      instructions: withdrawIxs.instructions,\n      program: params.program,\n      connection: params.connection,\n      crossbarUrl: params.crossbarUrl,\n    });\n    updateFeedIxs = _updateFeedIxs;\n    feedLuts = _feedLuts;\n  }\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [withdrawIxParams.bank.address],\n    params.bankMetadataMap\n  );\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const feedCrankTxs: ExtendedV0Transaction[] = [];\n\n  if (updateFeedIxs.length > 0) {\n    feedCrankTxs.push(\n      addTransactionMetadata(\n        new VersionedTransaction(\n          new TransactionMessage({\n            instructions: [...updateFeedIxs],\n            payerKey: params.authority,\n            recentBlockhash: blockhash,\n          }).compileToV0Message(feedLuts)\n        ),\n        {\n          addressLookupTables: feedLuts,\n          type: TransactionType.CRANK,\n        }\n      )\n    );\n  }\n\n  const withdrawTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIntegrationIxs.instructions, ...withdrawIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: [...refreshIntegrationIxs.keys, ...withdrawIxs.keys],\n      addressLookupTables: selectedLuts,\n      type: TransactionType.WITHDRAW,\n    }\n  );\n\n  const transactions = [...feedCrankTxs, withdrawTx];\n\n  return { transactions, actionTxIndex: transactions.length - 1 };\n}\n\nexport async function makeKaminoWithdrawTx(\n  params: MakeKaminoWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n  const { luts, connection, amount, assetShareValueMultiplierByBank, ...withdrawIxParams } = params;\n\n  const selectedLuts = selectLutsForAccountAction(\n    luts,\n    withdrawIxParams.bank,\n    params.marginfiAccount.balances,\n    params.bankMap\n  );\n\n  if (!withdrawIxParams.bank.kaminoIntegrationAccounts) {\n    throw new Error(\"Bank has no kamino integration accounts\");\n  }\n\n  const { value: amountValue, type: amountType } = resolveAmount(amount);\n  const multiplier =\n    assetShareValueMultiplierByBank.get(withdrawIxParams.bank.address.toBase58()) ??\n    new BigNumber(1);\n  const adjustedAmount =\n    amountType === \"cToken\"\n      ? new BigNumber(amountValue).toNumber()\n      : new BigNumber(amountValue).div(multiplier).toNumber();\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [withdrawIxParams.bank.address],\n    params.bankMetadataMap\n  );\n\n  const withdrawIxs = await makeKaminoWithdrawIx({\n    cTokenAmount: adjustedAmount,\n    ...withdrawIxParams,\n  });\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount: params.marginfiAccount,\n    bankMap: params.bankMap,\n    oraclePrices: params.oraclePrices,\n    instructions: withdrawIxs.instructions,\n    assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n    program: params.program,\n    connection: params.connection,\n    crossbarUrl: params.crossbarUrl,\n  });\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const feedCrankTxs: ExtendedV0Transaction[] = [];\n\n  if (updateFeedIxs.length > 0) {\n    feedCrankTxs.push(\n      addTransactionMetadata(\n        new VersionedTransaction(\n          new TransactionMessage({\n            instructions: [...updateFeedIxs],\n            payerKey: params.authority,\n            recentBlockhash: blockhash,\n          }).compileToV0Message(feedLuts)\n        ),\n        {\n          addressLookupTables: feedLuts,\n          type: TransactionType.CRANK,\n        }\n      )\n    );\n  }\n\n  const withdrawTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIntegrationIxs.instructions, ...withdrawIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: [...refreshIntegrationIxs.keys, ...withdrawIxs.keys],\n      addressLookupTables: selectedLuts,\n      type: TransactionType.WITHDRAW,\n    }\n  );\n\n  const transactions = [...feedCrankTxs, withdrawTx];\n\n  return { transactions, actionTxIndex: transactions.length - 1 };\n}\n\n/**\n * Creates a JupLend withdraw instruction for withdrawing assets from a JupLend lending pool.\n *\n * This function handles:\n * - Creating the destination ATA if needed (idempotent)\n * - Computing health check accounts for the withdrawal\n * - Deriving JupLend protocol accounts via `getAllDerivedJupLendAccounts` (fTokenMint, rateModel, vault, liquidity, lendingAdmin)\n * - Using on-chain `jupLendingState` values for supplyTokenReservesLiquidity, lendingSupplyPositionOnLiquidity, and rewardsRateModel\n * - Unwrapping wSOL back to native SOL if needed\n *\n * @param params - The parameters for creating the withdraw instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to withdraw from (must have JupLend integration configured)\n * @param params.bankMap - Map of all banks for health check computation\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to withdraw in UI units\n * @param params.marginfiAccount - The Marginfi account to withdraw from\n * @param params.authority - The authority/signer public key\n * @param params.jupLendingState - The on-chain JupLend lending state (provides token reserve and rewards accounts)\n * @param params.withdrawAll - Whether to withdraw the full balance (default: false)\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to unwrap wSOL to native SOL (default: true)\n * @param params.opts.createAtas - Whether to create the destination ATA if missing (default: true)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n * @param params.opts.observationBanksOverride - Optional override for health check remaining accounts\n *\n * @returns Promise resolving to InstructionsWrapper containing the withdraw instructions\n */\nexport async function makeJuplendWithdrawIx({\n  program,\n  bank,\n  bankMap,\n  tokenProgram,\n  amount,\n  marginfiAccount,\n  jupLendingState,\n  authority,\n  withdrawAll = false,\n  opts = {},\n}: MakeJuplendWithdrawIxParams): Promise<InstructionsWrapper> {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const createAtas = opts.createAtas ?? true;\n  const withdrawIxs: TransactionInstruction[] = [];\n  const remainingAccounts: PublicKey[] = [];\n\n  const userTokenAtaPk = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram);\n\n  if (createAtas) {\n    const createAtaIdempotentIx = createAssociatedTokenAccountIdempotentInstruction(\n      authority,\n      userTokenAtaPk,\n      authority,\n      bank.mint,\n      tokenProgram\n    );\n    withdrawIxs.push(createAtaIdempotentIx);\n  }\n\n  const healthAccounts = withdrawAll\n    ? computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        excludedBanks: [bank.address],\n      })\n    : computeHealthCheckAccounts({\n        account: marginfiAccount,\n        banksMap: bankMap,\n        mandatoryBanks: [bank.address],\n      });\n\n  if (!bank.jupLendIntegrationAccounts) {\n    throw new Error(\"Bank has no JupLend integration accounts\");\n  }\n  const { fTokenMint, lendingAdmin, rateModel, vault, liquidity } = getAllDerivedJupLendAccounts(\n    bank.mint,\n    tokenProgram\n  );\n\n  if (opts.observationBanksOverride) {\n    remainingAccounts.push(...opts.observationBanksOverride);\n  } else {\n    // On withdraw-all the bank is excluded from the health pack (its balance closes), but\n    // its accounts are appended at the end: the 1.9 program searches the slice for the\n    // withdrawn bank's oracle when the group rate limiter is enabled (extra trailing\n    // accounts are ignored by 1.8).\n    const accountMetas = computeHealthAccountMetas({\n      banksToInclude: healthAccounts,\n      trailingBanks: withdrawAll ? [bank] : [],\n    });\n    remainingAccounts.push(...accountMetas);\n  }\n\n  const withdrawIx = await instructions.makeJuplendWithdrawIx(\n    program,\n    {\n      marginfiAccount: marginfiAccount.address,\n      bank: bank.address,\n      destinationTokenAccount: userTokenAtaPk,\n\n      lendingAdmin,\n      supplyTokenReservesLiquidity: jupLendingState.tokenReservesLiquidity,\n      lendingSupplyPositionOnLiquidity: jupLendingState.supplyPositionOnLiquidity,\n      rateModel,\n      vault: vault,\n      claimAccount: bank.jupLendIntegrationAccounts.jupFTokenAta,\n      liquidity,\n      liquidityProgram: JUP_LIQUIDITY_PROGRAM_ID,\n      rewardsRateModel: jupLendingState.rewardsRateModel,\n      tokenProgram,\n\n      authority: opts.overrideInferAccounts?.authority ?? authority,\n      group: opts.overrideInferAccounts?.group,\n      mint: bank.mint,\n      fTokenMint,\n      integrationAcc1: bank.jupLendIntegrationAccounts.jupLendingState,\n      integrationAcc2: bank.jupLendIntegrationAccounts.jupFTokenVault,\n      integrationAcc3: bank.jupLendIntegrationAccounts.jupFTokenAta,\n    },\n    {\n      amount: uiToNative(amount, bank.mintDecimals),\n      withdrawAll,\n    },\n    remainingAccounts.map((account) => ({\n      pubkey: account,\n      isSigner: false,\n      isWritable: false,\n    }))\n  );\n\n  withdrawIxs.push(withdrawIx);\n\n  if (wrapAndUnwrapSol && bank.mint.equals(NATIVE_MINT)) {\n    withdrawIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  return {\n    instructions: withdrawIxs,\n    keys: [],\n  };\n}\n\nexport async function makeJuplendWithdrawTx(\n  params: MakeJuplendWithdrawTxParams\n): Promise<TransactionBuilderResult> {\n  const { luts, connection, ...withdrawIxParams } = params;\n\n  const selectedLuts = selectLutsForAccountAction(\n    luts,\n    withdrawIxParams.bank,\n    params.marginfiAccount.balances,\n    params.bankMap\n  );\n\n  const hasLiabilities = params.marginfiAccount.balances.some((balance) => {\n    return balance.liabilityShares.gt(0);\n  });\n\n  let updateFeedIxs: TransactionInstruction[] = [];\n  let feedLuts: AddressLookupTableAccount[] = [];\n\n  const withdrawIxs = await makeJuplendWithdrawIx(withdrawIxParams);\n\n  if (hasLiabilities) {\n    const { instructions: _updateFeedIxs, luts: _feedLuts } = await makeSmartCrankSwbFeedIx({\n      marginfiAccount: params.marginfiAccount,\n      bankMap: params.bankMap,\n      oraclePrices: params.oraclePrices,\n      assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n      instructions: withdrawIxs.instructions,\n      program: params.program,\n      connection: params.connection,\n      crossbarUrl: params.crossbarUrl,\n    });\n    updateFeedIxs = _updateFeedIxs;\n    feedLuts = _feedLuts;\n  }\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [withdrawIxParams.bank.address],\n    params.bankMetadataMap\n  );\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const feedCrankTxs: ExtendedV0Transaction[] = [];\n\n  if (updateFeedIxs.length > 0) {\n    feedCrankTxs.push(\n      addTransactionMetadata(\n        new VersionedTransaction(\n          new TransactionMessage({\n            instructions: [...updateFeedIxs],\n            payerKey: params.authority,\n            recentBlockhash: blockhash,\n          }).compileToV0Message(feedLuts)\n        ),\n        {\n          addressLookupTables: feedLuts,\n          type: TransactionType.CRANK,\n        }\n      )\n    );\n  }\n\n  const withdrawTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...refreshIntegrationIxs.instructions, ...withdrawIxs.instructions],\n        payerKey: params.authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message(selectedLuts)\n    ),\n    {\n      signers: [...refreshIntegrationIxs.keys, ...withdrawIxs.keys],\n      addressLookupTables: selectedLuts,\n      type: TransactionType.WITHDRAW,\n    }\n  );\n\n  const transactions = [...feedCrankTxs, withdrawTx];\n\n  return { transactions, actionTxIndex: transactions.length - 1 };\n}\n","import {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  PublicKey,\n  Transaction,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport {\n  runSwapEngine,\n  swapEngineProvidersFromOpts,\n  swapEngineQuoteFieldsFromOpts,\n} from \"../services/swap-engine\";\nimport {\n  MakeRepayIxParams,\n  MakeRepayTxParams,\n  MakeRepayWithCollatTxParams,\n  SwapQuoteResult,\n} from \"../types\";\nimport {\n  isWholePosition,\n  computeFlashloanSwapConstraints,\n  compileFlashloanPrecheck,\n} from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport {\n  makeDriftWithdrawIx,\n  makeJuplendWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeWithdrawIx,\n} from \"./withdraw\";\n\nimport { MAX_TX_SIZE, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport instructions from \"~/instructions\";\nimport { AssetTag } from \"~/services/bank\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedTransaction,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeWrapSolIxs,\n  selectLutsForBanks,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n  getTxSize,\n  getTotalAccountKeys,\n} from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n  TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\n/**\n * Creates a repay instruction for repaying borrowed assets to a Marginfi bank.\n *\n * This function handles:\n * - Wrapping SOL to wSOL if repaying native SOL\n * - Token-2022 program support with proper remaining accounts\n * - Full or partial repayment of liabilities\n * - Creating the repay instruction to return assets to the bank's liquidity vault\n *\n * @param params - The parameters for creating the repay instruction\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to repay to\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to repay in UI units\n * @param params.authority - The authority/signer public key\n * @param params.accountAddress - The Marginfi account address\n * @param params.repayAll - Whether to repay the entire liability (default: false)\n * @param params.opts - Optional configuration\n * @param params.opts.wrapAndUnwrapSol - Whether to wrap SOL to wSOL (default: true)\n * @param params.opts.wSolBalanceUi - Existing wSOL balance to combine with native SOL (default: 0)\n * @param params.opts.overrideInferAccounts - Optional account overrides for testing/special cases\n *\n * @returns Promise resolving to InstructionsWrapper containing the repay instructions\n */\nexport async function makeRepayIx({\n  program,\n  bank,\n  tokenProgram,\n  amount,\n  authority,\n  accountAddress,\n  repayAll = false,\n  isSync = false,\n  opts = {},\n}: MakeRepayIxParams) {\n  const wrapAndUnwrapSol = opts.wrapAndUnwrapSol ?? true;\n  const wSolBalanceUi = opts.wSolBalanceUi ?? 0;\n\n  const repayIxs = [];\n\n  // Add repay-related instructions\n  const userAta = getAssociatedTokenAddressSync(bank.mint, authority, true, tokenProgram); // We allow off curve addresses here to support Fuse.\n\n  const remainingAccounts = tokenProgram.equals(TOKEN_2022_PROGRAM_ID)\n    ? [{ pubkey: bank.mint, isSigner: false, isWritable: false }]\n    : [];\n\n  if (bank.mint.equals(NATIVE_MINT) && wrapAndUnwrapSol) {\n    repayIxs.push(...makeWrapSolIxs(authority, new BigNumber(amount).minus(wSolBalanceUi)));\n  }\n\n  const repayIx =\n    !isSync || !opts.overrideInferAccounts?.group\n      ? await instructions.makeRepayIx(\n          program,\n          {\n            marginfiAccount: accountAddress,\n            signerTokenAccount: userAta,\n            bank: bank.address,\n            tokenProgram: tokenProgram,\n            authority: opts.overrideInferAccounts?.authority ?? authority,\n            group: opts.overrideInferAccounts?.group,\n            liquidityVault: opts.overrideInferAccounts?.liquidityVault,\n          },\n          { amount: uiToNative(amount, bank.mintDecimals), repayAll },\n          remainingAccounts\n        )\n      : syncInstructions.makeRepayIx(\n          program.programId,\n          {\n            marginfiAccount: accountAddress,\n            signerTokenAccount: userAta,\n            bank: bank.address,\n            tokenProgram: tokenProgram,\n            authority: opts.overrideInferAccounts?.authority ?? authority,\n            group: opts.overrideInferAccounts?.group,\n          },\n          { amount: uiToNative(amount, bank.mintDecimals), repayAll },\n          remainingAccounts\n        );\n  repayIxs.push(repayIx);\n\n  return {\n    instructions: repayIxs,\n    keys: [],\n  };\n}\n\n/**\n * Creates a complete repay transaction ready to be signed and sent.\n *\n * This function builds a full transaction that includes:\n * - SOL wrapping instructions if repaying native SOL\n * - The actual repay instruction to return assets to the Marginfi bank\n * - Proper support for Token-2022 tokens\n * - Support for full or partial repayment\n *\n * The transaction is constructed as a legacy Transaction with proper metadata\n * and is ready to be signed by the authority and submitted to the network.\n *\n * @param params - The parameters for creating the repay transaction\n * @param params.luts - Address lookup tables for transaction compression\n * @param params.program - The Marginfi program instance\n * @param params.bank - The bank to repay to\n * @param params.tokenProgram - The token program ID (TOKEN_PROGRAM or TOKEN_2022_PROGRAM)\n * @param params.amount - The amount to repay in UI units\n * @param params.authority - The authority/signer public key\n * @param params.accountAddress - The Marginfi account address\n * @param params.repayAll - Whether to repay the entire liability (default: false)\n * @param params.opts - Optional configuration (wrapping, overrides, etc.)\n *\n * @returns Promise resolving to an ExtendedTransaction with metadata\n */\nexport async function makeRepayTx(params: MakeRepayTxParams): Promise<ExtendedTransaction> {\n  const { luts, ...depositIxParams } = params;\n\n  const ixs = await makeRepayIx(depositIxParams);\n  const tx = new Transaction().add(...ixs.instructions);\n  tx.feePayer = params.authority;\n\n  // Repays don't add health remaining-accounts, so only the target bank matters.\n  const selectedLuts = selectLutsForBanks(luts, [depositIxParams.bank]);\n\n  const solanaTx = addTransactionMetadata(tx, {\n    type: TransactionType.REPAY,\n    signers: ixs.keys,\n    addressLookupTables: selectedLuts,\n  });\n  return solanaTx;\n}\n\nexport async function makeRepayWithCollatTx(params: MakeRepayWithCollatTxParams) {\n  const {\n    program,\n    marginfiAccount,\n    bankMap,\n    withdrawOpts,\n    repayOpts,\n    bankMetadataMap,\n    addressLookupTableAccounts,\n    connection,\n    oraclePrices,\n    crossbarUrl,\n  } = params;\n\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  // Create atas if needed\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: marginfiAccount.authority,\n    tokens: [\n      {\n        mint: repayOpts.repayBank.mint,\n        tokenProgram: repayOpts.tokenProgram,\n      },\n      {\n        mint: withdrawOpts.withdrawBank.mint,\n        tokenProgram: withdrawOpts.tokenProgram,\n      },\n    ],\n  });\n\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    marginfiAccount,\n    bankMap,\n    [withdrawOpts.withdrawBank.address],\n    bankMetadataMap,\n    [withdrawOpts.withdrawBank.address, repayOpts.repayBank.address]\n  );\n\n  const { flashloanTx, setupInstructions, swapQuote, amountToRepay, withdrawIxs, repayIxs } =\n    await buildRepayWithCollatFlashloanTx({\n      ...params,\n      blockhash,\n    });\n\n  const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n    // filter out compute budget instructions\n    if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n      return false;\n    }\n\n    if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n      // key 3 is always mint in create ata\n      const mintKey = ix.keys[3]?.pubkey;\n\n      if (\n        mintKey?.equals(withdrawOpts.withdrawBank.mint) ||\n        mintKey?.equals(repayOpts.repayBank.mint)\n      ) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n\n  setupIxs.push(...jupiterSetupInstructions);\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n    instructions: [...withdrawIxs.instructions, ...repayIxs.instructions],\n    program,\n    connection,\n    crossbarUrl,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  // if atas are needed, add them\n  if (setupIxs.length > 0 || refreshIntegrationIxs.instructions.length > 0) {\n    const ixs = [...setupIxs, ...refreshIntegrationIxs.instructions];\n    const txs = splitInstructionsToFitTransactions([], ixs, {\n      blockhash,\n      payerKey: marginfiAccount.authority,\n      luts: addressLookupTableAccounts ?? [],\n    });\n\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: addressLookupTableAccounts,\n        })\n      )\n    );\n  }\n\n  // if crank is needed, add it\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n  return {\n    transactions,\n    swapQuote,\n    amountToRepay,\n    mustBeAtomicBundle: refreshIntegrationIxs.instructions.length > 0,\n  };\n}\n\nasync function buildRepayWithCollatFlashloanTx({\n  program,\n  marginfiAccount,\n  bankMap,\n  withdrawOpts,\n  repayOpts,\n  bankMetadataMap,\n  assetShareValueMultiplierByBank,\n  addressLookupTableAccounts,\n  connection,\n  swapOpts,\n  overrideInferAccounts,\n  blockhash,\n  swapEngineRunner,\n}: MakeRepayWithCollatTxParams & { blockhash: string }) {\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  // Deferred-swap: when a swap is needed, withdraw token A is swapped (ExactIn) into\n  // the repay token; the repay amount comes from the swap output. The input here is\n  // the known withdraw amount, so no ExactOut estimate is needed. The engine call is\n  // deferred until after the withdraw ixs exist (they form part of the footprint).\n  const swapNeeded = !repayOpts.repayBank.mint.equals(withdrawOpts.withdrawBank.mint);\n  let amountToRepay = swapNeeded ? 0 : withdrawOpts.withdrawAmount;\n  let swapInstructions: TransactionInstruction[] = [];\n  let setupInstructions: TransactionInstruction[] = [];\n  let swapLookupTables: AddressLookupTableAccount[] = [];\n  let swapQuote: SwapQuoteResult | undefined;\n  let sizeConstraintUsed = 0;\n\n  let withdrawIxs: InstructionsWrapper;\n\n  switch (withdrawOpts.withdrawBank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve =\n        bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      // Sometimes the ctoken conversion can be off by a few basis points, this accounts for that\n      const multiplier =\n        assetShareValueMultiplierByBank.get(withdrawOpts.withdrawBank.address.toBase58()) ??\n        new BigNumber(1);\n      const adjustedAmount = new BigNumber(withdrawOpts.withdrawAmount)\n        .div(multiplier)\n        .times(1.0001)\n        .toNumber();\n\n      withdrawIxs = await makeKaminoWithdrawIx({\n        program,\n        bank: withdrawOpts.withdrawBank,\n        bankMap,\n        tokenProgram: withdrawOpts.tokenProgram,\n        cTokenAmount: adjustedAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        reserve,\n        bankMetadataMap,\n        withdrawAll: isWholePosition(\n          {\n            amount: withdrawOpts.totalPositionAmount,\n            isLending: true,\n          },\n          withdrawOpts.withdrawAmount,\n          withdrawOpts.withdrawBank.mintDecimals\n        ),\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.driftStates;\n\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      withdrawIxs = await makeDriftWithdrawIx({\n        program,\n        bank: withdrawOpts.withdrawBank,\n        bankMap,\n        tokenProgram: withdrawOpts.tokenProgram,\n        amount: withdrawOpts.withdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        driftSpotMarket: driftState.spotMarketState,\n        userRewards: driftState.userRewards,\n        withdrawAll: isWholePosition(\n          {\n            amount: withdrawOpts.totalPositionAmount,\n            isLending: true,\n          },\n          withdrawOpts.withdrawAmount,\n          withdrawOpts.withdrawBank.mintDecimals\n        ),\n        bankMetadataMap,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n\n    case AssetTag.JUPLEND: {\n      const jupLendState =\n        bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.jupLendStates;\n\n      if (!jupLendState) {\n        throw TransactionBuildingError.jupLendStateNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      withdrawIxs = await makeJuplendWithdrawIx({\n        program,\n        bank: withdrawOpts.withdrawBank,\n        bankMap,\n        tokenProgram: withdrawOpts.tokenProgram,\n        amount: withdrawOpts.withdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        jupLendingState: jupLendState.jupLendingState,\n        bankMetadataMap,\n        withdrawAll: isWholePosition(\n          {\n            amount: withdrawOpts.totalPositionAmount,\n            isLending: true,\n          },\n          withdrawOpts.withdrawAmount,\n          withdrawOpts.withdrawBank.mintDecimals\n        ),\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n\n    default: {\n      withdrawIxs = await makeWithdrawIx({\n        program,\n        bank: withdrawOpts.withdrawBank,\n        bankMap,\n        tokenProgram: withdrawOpts.tokenProgram,\n        amount: withdrawOpts.withdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        withdrawAll: isWholePosition(\n          {\n            amount: withdrawOpts.totalPositionAmount,\n            isLending: true,\n          },\n          withdrawOpts.withdrawAmount,\n          withdrawOpts.withdrawBank.mintDecimals\n        ),\n        bankMetadataMap,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n  }\n\n  if (swapNeeded) {\n    const destinationTokenAccount = getAssociatedTokenAddressSync(\n      new PublicKey(repayOpts.repayBank.mint),\n      marginfiAccount.authority,\n      true,\n      repayOpts.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n    );\n\n    const swapConstraints = await computeFlashloanSwapConstraints({\n      program,\n      marginfiAccount,\n      bankMap,\n      bankMetadataMap,\n      addressLookupTableAccounts: addressLookupTableAccounts ?? [],\n      primaryIx: {\n        type: \"withdraw\",\n        bank: withdrawOpts.withdrawBank,\n        tokenProgram: withdrawOpts.tokenProgram,\n      },\n      secondaryIx: {\n        type: \"repay\",\n        bank: repayOpts.repayBank,\n        tokenProgram: repayOpts.tokenProgram,\n      },\n      overrideInferAccounts,\n    });\n    sizeConstraintUsed = swapConstraints.sizeConstraint;\n\n    // Placeholder repay ix for the engine footprint (its size is amount-independent);\n    // the real repay ix below uses the swap-derived amountToRepay.\n    const footprintRepayIxs = await makeRepayIx({\n      program,\n      bank: repayOpts.repayBank,\n      tokenProgram: repayOpts.tokenProgram,\n      amount: withdrawOpts.withdrawAmount,\n      accountAddress: marginfiAccount.address,\n      authority: marginfiAccount.authority,\n      isSync: false,\n      opts: { wrapAndUnwrapSol: false, overrideInferAccounts },\n    });\n\n    const runEngine = swapEngineRunner ?? runSwapEngine;\n    const engineResult = await runEngine({\n      inputMint: withdrawOpts.withdrawBank.mint.toBase58(),\n      outputMint: repayOpts.repayBank.mint.toBase58(),\n      amountNative: uiToNative(\n        withdrawOpts.withdrawAmount,\n        withdrawOpts.withdrawBank.mintDecimals\n      ).toNumber(),\n      inputDecimals: withdrawOpts.withdrawBank.mintDecimals,\n      outputDecimals: repayOpts.repayBank.mintDecimals,\n      ...swapEngineQuoteFieldsFromOpts(swapOpts),\n      taker: marginfiAccount.authority,\n      destinationTokenAccount,\n      connection,\n      footprint: {\n        instructions: [\n          ...cuRequestIxs,\n          ...withdrawIxs.instructions,\n          ...footprintRepayIxs.instructions,\n        ],\n        luts: addressLookupTableAccounts ?? [],\n        payer: marginfiAccount.authority,\n        sizeConstraint: swapConstraints.sizeConstraint,\n        maxSwapTotalAccounts: swapConstraints.maxSwapTotalAccounts,\n      },\n      providers: swapEngineProvidersFromOpts(swapOpts),\n    });\n\n    const outAmount = nativeToUi(\n      engineResult.quoteResponse.outAmount,\n      repayOpts.repayBank.mintDecimals\n    );\n    const outAmountThreshold = nativeToUi(\n      engineResult.quoteResponse.otherAmountThreshold,\n      repayOpts.repayBank.mintDecimals\n    );\n    amountToRepay =\n      outAmount > repayOpts.totalPositionAmount\n        ? repayOpts.totalPositionAmount\n        : outAmountThreshold;\n    swapInstructions = engineResult.swapInstructions;\n    setupInstructions = engineResult.setupInstructions;\n    swapLookupTables = engineResult.swapLuts;\n    swapQuote = engineResult.quoteResponse;\n  }\n\n  const repayIxs = await makeRepayIx({\n    program,\n    bank: repayOpts.repayBank,\n    tokenProgram: repayOpts.tokenProgram,\n    amount: amountToRepay,\n    accountAddress: marginfiAccount.address,\n    authority: marginfiAccount.authority,\n    repayAll: isWholePosition(\n      {\n        amount: repayOpts.totalPositionAmount,\n        isLending: true,\n      },\n      amountToRepay,\n      repayOpts.repayBank.mintDecimals\n    ),\n    isSync: false,\n    opts: {\n      wrapAndUnwrapSol: false,\n      overrideInferAccounts,\n    },\n  });\n\n  const luts = [...(addressLookupTableAccounts ?? []), ...swapLookupTables];\n\n  const allNonFlIxs = [\n    ...cuRequestIxs,\n    ...withdrawIxs.instructions,\n    ...swapInstructions,\n    ...repayIxs.instructions,\n  ];\n\n  if (swapInstructions.length > 0) {\n    compileFlashloanPrecheck({\n      allIxs: allNonFlIxs,\n      payer: marginfiAccount.authority,\n      luts,\n      sizeConstraint: sizeConstraintUsed,\n      swapIxCount: swapInstructions.length,\n      swapLutCount: swapLookupTables.length,\n    });\n  }\n\n  // if cuRequestIxs are not present, priority fee ix is needed\n  // wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n  // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n  // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n  const flashloanTx = await makeFlashLoanTx({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    blockhash,\n    ixs: allNonFlIxs,\n    isSync: true,\n  });\n\n  const txSize = getTxSize(flashloanTx);\n  const totalKeys = getTotalAccountKeys(flashloanTx);\n\n  if (txSize > MAX_TX_SIZE || totalKeys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.swapSizeExceededRepay(\n      txSize,\n      totalKeys,\n      swapOpts.swapConfig?.provider\n    );\n  }\n\n  return {\n    flashloanTx,\n    setupInstructions,\n    swapQuote,\n    withdrawIxs,\n    repayIxs,\n    amountToRepay,\n  };\n}\n","/**\n * Synchronous flashloan TX size estimator.\n *\n * Estimates the serialized size of a V0 flashloan transaction without compiling\n * or serializing the message. This allows us to synchronously compute the byte\n * overhead of non-swap instructions and determine how much budget remains for\n * the swap IX (e.g. Titan).\n *\n * Thoroughly tested using R&D scripts (rnd-flashloan-size.ts) and cross-referenced\n * against actual serialized transaction sizes across all action types (Loop, Repay,\n * SwapCollateral, SwapDebt) and asset tag variants (Standard, Kamino, Drift).\n */\n\nimport {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { makeBorrowIx } from \"../actions/borrow\";\nimport {\n  makeDepositIx,\n  makeDriftDepositIx,\n  makeJuplendDepositIx,\n  makeKaminoDepositIx,\n} from \"../actions/deposit\";\nimport { makeRepayIx } from \"../actions/repay\";\nimport {\n  makeDriftWithdrawIx,\n  makeJuplendWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeWithdrawIx,\n} from \"../actions/withdraw\";\nimport { MarginfiAccountType } from \"../types\";\n\nimport { computeHealthAccountMetas, computeProjectedActiveBanksNoCpi } from \"./compute\";\n\nimport { MAX_ACCOUNT_LOCKS, MAX_TX_SIZE } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { AssetTag, BankType } from \"~/services/bank\";\nimport { InstructionsWrapper } from \"~/services/transaction\";\nimport syncInstructions from \"~/sync-instructions\";\nimport { BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\n\n// V0 message compilation is non-additive: merging swap LUTs with non-swap LUTs\n// causes the compiler to redistribute key resolution. Multi-hop routes add many\n// unique program IDs (always static) and new LUT addresses. Observed merge\n// overhead varies by route complexity: 25–191 bytes. 200 bytes covers worst\n// observed case and forces Titan to prefer simpler routes with lower overhead.\nconst SWAP_MERGE_OVERHEAD = 150;\n\n// BeginFL + EndFL instructions add ~52 bytes to the IX section. The precheck\n// compiles without FL IXs, so we add this constant to get an accurate estimate.\nconst FL_IX_OVERHEAD = 52;\n\n// Stand-in raw size for a tx too large for `serialize()` to even encode (it throws a RangeError).\n// Any value comfortably over MAX_TX_SIZE works — it only needs to make `overshoot` positive so the\n// route is scored as \"doesn't fit\" instead of crashing.\nconst OVERSIZED_TX_SENTINEL = MAX_TX_SIZE * 4;\n\n// ============================================================================\n// V0 TX size estimator (simulates V0 message compilation key resolution)\n// ============================================================================\n\nfunction compactU16Size(n: number): number {\n  return n < 0x80 ? 1 : n < 0x4000 ? 2 : 3;\n}\n\n/**\n * Estimate the serialized size of a V0 transaction from its instructions and LUTs.\n * Simulates the key resolution logic of TransactionMessage.compileToV0Message\n * without actually compiling or serializing the message.\n */\nexport function computeV0TxSize(\n  ixs: TransactionInstruction[],\n  payerKey: PublicKey,\n  luts: AddressLookupTableAccount[]\n): { size: number; accountCount: number; writableAccountCount: number } {\n  // --- Collect all unique keys with merged properties ---\n  const keyMap = new Map<string, { isSigner: boolean; isWritable: boolean }>();\n\n  const payerStr = payerKey.toBase58();\n  keyMap.set(payerStr, { isSigner: true, isWritable: true });\n\n  const programIds = new Set<string>();\n\n  for (const ix of ixs) {\n    const progStr = ix.programId.toBase58();\n    programIds.add(progStr);\n    if (!keyMap.has(progStr)) {\n      keyMap.set(progStr, { isSigner: false, isWritable: false });\n    }\n    for (const meta of ix.keys) {\n      const keyStr = meta.pubkey.toBase58();\n      const existing = keyMap.get(keyStr);\n      if (existing) {\n        existing.isSigner = existing.isSigner || meta.isSigner;\n        existing.isWritable = existing.isWritable || meta.isWritable;\n      } else {\n        keyMap.set(keyStr, { isSigner: meta.isSigner, isWritable: meta.isWritable });\n      }\n    }\n  }\n\n  // --- Build LUT lookup: pubkey base58 → { lutIndex, addressIndex } ---\n  const lutLookup = new Map<string, { lutIdx: number; addrIdx: number }>();\n  for (let li = 0; li < luts.length; li++) {\n    const addresses = luts[li].state.addresses;\n    for (let ai = 0; ai < addresses.length; ai++) {\n      const addrStr = addresses[ai].toBase58();\n      if (!lutLookup.has(addrStr)) {\n        lutLookup.set(addrStr, { lutIdx: li, addrIdx: ai });\n      }\n    }\n  }\n\n  // --- Partition keys into static vs LUT ---\n  let numStaticKeys = 0;\n  let numWritableStaticKeys = 0;\n  // Per-LUT: track writable and readonly index sets\n  const lutWritableIdxs: Set<number>[] = luts.map(() => new Set());\n  const lutReadonlyIdxs: Set<number>[] = luts.map(() => new Set());\n\n  for (const [keyStr, props] of keyMap) {\n    // Signers and invoked program IDs must be static\n    if (props.isSigner || programIds.has(keyStr)) {\n      numStaticKeys++;\n      if (props.isWritable) numWritableStaticKeys++;\n      continue;\n    }\n\n    const lutEntry = lutLookup.get(keyStr);\n    if (lutEntry) {\n      if (props.isWritable) {\n        lutWritableIdxs[lutEntry.lutIdx].add(lutEntry.addrIdx);\n      } else {\n        lutReadonlyIdxs[lutEntry.lutIdx].add(lutEntry.addrIdx);\n      }\n    } else {\n      numStaticKeys++;\n      if (props.isWritable) numWritableStaticKeys++;\n    }\n  }\n\n  // --- Fixed overhead: 1 (sigCount) + 64 (sig) + 1 (V0 prefix) + 3 (header) + 32 (blockhash) ---\n  const fixedOverhead = 101;\n\n  // --- Static keys section ---\n  const staticKeysSection = compactU16Size(numStaticKeys) + numStaticKeys * 32;\n\n  // --- IX section ---\n  let ixSection = compactU16Size(ixs.length);\n  for (const ix of ixs) {\n    const numAccounts = ix.keys.length;\n    ixSection +=\n      1 + // programId index\n      compactU16Size(numAccounts) +\n      numAccounts + // account key indexes\n      compactU16Size(ix.data.length) +\n      ix.data.length;\n  }\n\n  // --- LUT section ---\n  // Only include LUTs that actually have referenced keys\n  let numUsedLuts = 0;\n  let lutSection = 0;\n  for (let li = 0; li < luts.length; li++) {\n    const wCount = lutWritableIdxs[li].size;\n    const rCount = lutReadonlyIdxs[li].size;\n    if (wCount === 0 && rCount === 0) continue;\n    numUsedLuts++;\n    lutSection +=\n      32 + // LUT address\n      compactU16Size(wCount) +\n      wCount + // writable indexes\n      compactU16Size(rCount) +\n      rCount; // readonly indexes\n  }\n  lutSection += compactU16Size(numUsedLuts);\n\n  // Total unique account keys (static + LUT-resolved)\n  let totalLutKeys = 0;\n  for (let li = 0; li < luts.length; li++) {\n    totalLutKeys += lutWritableIdxs[li].size + lutReadonlyIdxs[li].size;\n  }\n  const accountCount = numStaticKeys + totalLutKeys;\n\n  // Writable accounts: writable static keys + LUT writable indexes\n  let totalLutWritableKeys = 0;\n  for (let li = 0; li < luts.length; li++) {\n    totalLutWritableKeys += lutWritableIdxs[li].size;\n  }\n  const writableAccountCount = numWritableStaticKeys + totalLutWritableKeys;\n\n  // Empirical +1: component-based calculation consistently underestimates by 1 byte\n  // vs actual VersionedTransaction.serialize(). Verified across all measurement variants.\n  const size = fixedOverhead + staticKeysSection + ixSection + lutSection + 1;\n\n  return { size, accountCount, writableAccountCount };\n}\n\n// ============================================================================\n// Flashloan swap budget estimator\n// ============================================================================\n\nexport interface FlashloanSwapConstraints {\n  /** Available bytes for swap instruction(s) */\n  sizeConstraint: number;\n  /** Available total account slots for swap instruction(s) */\n  maxSwapTotalAccounts: number;\n}\n\n/**\n * Compute the available byte budget and account budget for swap instructions\n * in a flashloan TX. Compiles a real V0 message and serializes it for an exact\n * non-swap byte count.\n *\n * @param ixs - The non-swap IXs (CU requests + primary + secondary).\n *              Must NOT include BeginFL/EndFL — those are synthesized internally.\n */\nexport function computeFlashLoanNonSwapBudget({\n  program,\n  marginfiAccount,\n  ixs,\n  bankMap,\n  addressLookupTableAccounts,\n}: {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  ixs: TransactionInstruction[];\n  bankMap: Map<string, BankType>;\n  addressLookupTableAccounts: AddressLookupTableAccount[];\n}): FlashloanSwapConstraints {\n  // 1. Project which banks will be active after the primary IXs execute\n  const projectedActiveBanksKeys = computeProjectedActiveBanksNoCpi({\n    account: marginfiAccount,\n    instructions: ixs,\n    program,\n  });\n  const projectedActiveBanks = projectedActiveBanksKeys.map((key) => {\n    const b = bankMap.get(key.toBase58());\n    if (!b) throw new Error(`Bank ${key.toBase58()} not found in computeFlashLoanNonSwapBudget`);\n    return b;\n  });\n\n  // 2. Build BeginFL and EndFL IXs synchronously\n  const endIndex = ixs.length + 1; // BeginFL is at index 0, EndFL at endIndex\n  const beginFlIx = syncInstructions.makeBeginFlashLoanIx(\n    program.programId,\n    { marginfiAccount: marginfiAccount.address, authority: marginfiAccount.authority },\n    { endIndex: new BN(endIndex) }\n  );\n\n  const endFlRemainingAccounts = computeHealthAccountMetas({\n    banksToInclude: projectedActiveBanks,\n  });\n  const endFlIx = syncInstructions.makeEndFlashLoanIx(\n    program.programId,\n    {\n      marginfiAccount: marginfiAccount.address,\n      group: marginfiAccount.group,\n      authority: marginfiAccount.authority,\n    },\n    endFlRemainingAccounts.map((pubkey) => ({ pubkey, isSigner: false, isWritable: false }))\n  );\n\n  // 3. Assemble all non-swap IXs in flashloan order\n  const allNonSwapIxs = [beginFlIx, ...ixs, endFlIx];\n\n  // 4. Compile a real V0 message and serialize for exact non-swap size\n  const nonSwapMsg = new TransactionMessage({\n    payerKey: marginfiAccount.authority,\n    recentBlockhash: PublicKey.default.toBase58(),\n    instructions: allNonSwapIxs,\n  }).compileToV0Message(addressLookupTableAccounts);\n  const nonSwapSize = new VersionedTransaction(nonSwapMsg).serialize().length;\n\n  const { staticAccountKeys, addressTableLookups } = nonSwapMsg;\n  const nonSwapTotal =\n    staticAccountKeys.length +\n    addressTableLookups.reduce(\n      (s, l) => s + l.writableIndexes.length + l.readonlyIndexes.length,\n      0\n    );\n\n  const sizeConstraint = MAX_TX_SIZE - nonSwapSize - SWAP_MERGE_OVERHEAD;\n  const maxSwapTotalAccounts = MAX_ACCOUNT_LOCKS - nonSwapTotal;\n\n  console.log(\"[flashloan-budget]\", {\n    method: \"compiled\",\n    nonSwapSize,\n    nonSwapTotal,\n    sizeConstraint,\n    maxSwapTotalAccounts,\n  });\n\n  return { sizeConstraint, maxSwapTotalAccounts };\n}\n\n// ============================================================================\n// Post-swap pre-check: compile full TX to verify it fits before makeFlashLoanTx\n// ============================================================================\n\nexport interface FlashloanPrecheckResult {\n  /** Exact serialized size of the full flashloan TX */\n  fullTxSize: number;\n  /** How many bytes over MAX_TX_SIZE (negative = under budget) */\n  overshoot: number;\n  /** Total writable accounts in the full TX */\n  writableAccounts: number;\n  /** Total accounts (static + LUT) in the full TX */\n  totalAccounts: number;\n}\n\n/**\n * Compile the full flashloan TX (all IXs + all LUTs) and return exact size info.\n * Call this AFTER receiving swap IXs but BEFORE makeFlashLoanTx to detect overflows\n * early with good diagnostics.\n *\n * Uses a dummy blockhash (same 32 bytes as a real one) so the size is exact.\n */\nexport function compileFlashloanPrecheck({\n  allIxs,\n  payer,\n  luts,\n  sizeConstraint,\n  swapIxCount,\n  swapLutCount,\n}: {\n  allIxs: TransactionInstruction[];\n  payer: PublicKey;\n  luts: AddressLookupTableAccount[];\n  sizeConstraint: number;\n  swapIxCount: number;\n  swapLutCount: number;\n}): FlashloanPrecheckResult {\n  const msg = new TransactionMessage({\n    payerKey: payer,\n    recentBlockhash: PublicKey.default.toBase58(),\n    instructions: allIxs,\n  }).compileToV0Message(luts);\n\n  // `serialize()` (via @solana/buffer-layout) throws `RangeError: encoding overruns Uint8Array`\n  // when the compiled message is too large to even fit its wire buffer. That just means the tx is\n  // grossly oversized, so treat it as a large positive overshoot (route \"doesn't fit\") rather than\n  // letting the RangeError escape — callers (e.g. the swap engine's annotateFit) score on\n  // `overshoot`, and an uncaught throw would short-circuit clean size classification.\n  let rawSize: number;\n  try {\n    rawSize = new VersionedTransaction(msg).serialize().length;\n  } catch (e) {\n    if (!(e instanceof RangeError)) throw e;\n    rawSize = OVERSIZED_TX_SENTINEL;\n  }\n  const fullTxSize = rawSize + FL_IX_OVERHEAD;\n  const overshoot = fullTxSize - MAX_TX_SIZE;\n\n  const { header, staticAccountKeys, addressTableLookups } = msg;\n  const writableStatic =\n    staticAccountKeys.length -\n    header.numReadonlySignedAccounts -\n    header.numReadonlyUnsignedAccounts;\n  const writableLut = addressTableLookups.reduce((s, l) => s + l.writableIndexes.length, 0);\n  const writableAccounts = writableStatic + writableLut;\n  const totalAccounts =\n    staticAccountKeys.length +\n    addressTableLookups.reduce(\n      (s, l) => s + l.writableIndexes.length + l.readonlyIndexes.length,\n      0\n    );\n\n  // Check account limits before returning\n  // if (totalAccounts > MAX_ACCOUNT_LOCKS) {\n  //   throw TransactionBuildingError.swapSizeExceededLoop(\n  //     fullTxSize,\n  //     writableAccounts,\n  //     undefined // provider unknown at this layer\n  //   );\n  // }\n\n  console.log(\"[flashloan-precheck]\", {\n    fullTxSize,\n    overshoot,\n    sizeConstraint,\n    writableAccounts,\n    totalAccounts,\n    staticKeys: staticAccountKeys.length,\n    numLuts: addressTableLookups.length,\n    swapIxCount,\n    swapLutCount,\n  });\n\n  return { fullTxSize, overshoot, writableAccounts, totalAccounts };\n}\n\n// ============================================================================\n// High-level helper: build budget IXs + compute constraints in one call\n// ============================================================================\n\nexport type FlashloanBudgetIx =\n  | { type: \"borrow\"; bank: BankType; tokenProgram: PublicKey }\n  | { type: \"repay\"; bank: BankType; tokenProgram: PublicKey }\n  | { type: \"deposit\"; bank: BankType; tokenProgram: PublicKey }\n  | { type: \"withdraw\"; bank: BankType; tokenProgram: PublicKey };\n\n/**\n * Build dummy IXs for a single budget entry using the existing async IX builders\n * with isSync: true. Switches on type + assetTag to pick the right variant.\n */\nasync function buildBudgetIx(\n  config: FlashloanBudgetIx,\n  program: MarginfiProgram,\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  bankMetadataMap: BankIntegrationMetadataMap,\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey }\n): Promise<InstructionsWrapper> {\n  const { bank, tokenProgram } = config;\n\n  switch (config.type) {\n    case \"borrow\":\n      return makeBorrowIx({\n        program,\n        bank,\n        bankMap,\n        tokenProgram,\n        amount: 1,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        isSync: true,\n        opts: { createAtas: false, wrapAndUnwrapSol: false, overrideInferAccounts },\n      });\n\n    case \"repay\":\n      return makeRepayIx({\n        program,\n        bank,\n        tokenProgram,\n        amount: 1,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        repayAll: false,\n        isSync: true,\n        opts: { wrapAndUnwrapSol: false, overrideInferAccounts },\n      });\n\n    case \"deposit\":\n      return buildDepositBudgetIx(\n        config,\n        program,\n        marginfiAccount,\n        bankMetadataMap,\n        overrideInferAccounts\n      );\n\n    case \"withdraw\":\n      return buildWithdrawBudgetIx(\n        config,\n        program,\n        marginfiAccount,\n        bankMap,\n        bankMetadataMap,\n        overrideInferAccounts\n      );\n  }\n}\n\nasync function buildDepositBudgetIx(\n  config: FlashloanBudgetIx & { type: \"deposit\" },\n  program: MarginfiProgram,\n  marginfiAccount: MarginfiAccountType,\n  bankMetadataMap: BankIntegrationMetadataMap,\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey }\n): Promise<InstructionsWrapper> {\n  const { bank, tokenProgram } = config;\n  const opts = { wrapAndUnwrapSol: false, overrideInferAccounts };\n\n  switch (bank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve = bankMetadataMap[bank.address.toBase58()]?.kaminoStates?.reserveState;\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          bank.address.toBase58(),\n          bank.mint.toBase58(),\n          bank.tokenSymbol\n        );\n      }\n      return makeKaminoDepositIx({\n        program,\n        bank,\n        tokenProgram,\n        amount: 1,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        reserve,\n        isSync: true,\n        opts,\n      });\n    }\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[bank.address.toBase58()]?.driftStates;\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          bank.address.toBase58(),\n          bank.mint.toBase58(),\n          bank.tokenSymbol\n        );\n      }\n      return makeDriftDepositIx({\n        program,\n        bank,\n        tokenProgram,\n        amount: 1,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        driftMarketIndex: driftState.spotMarketState.marketIndex,\n        driftOracle: driftState.spotMarketState.oracle,\n        isSync: true,\n        opts,\n      });\n    }\n    case AssetTag.JUPLEND: {\n      return makeJuplendDepositIx({\n        program,\n        bank,\n        tokenProgram,\n        amount: 1,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        isSync: true,\n        opts,\n      });\n    }\n    default: {\n      return makeDepositIx({\n        program,\n        bank,\n        tokenProgram,\n        amount: 1,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        isSync: true,\n        opts,\n      });\n    }\n  }\n}\n\nasync function buildWithdrawBudgetIx(\n  config: FlashloanBudgetIx & { type: \"withdraw\" },\n  program: MarginfiProgram,\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  bankMetadataMap: BankIntegrationMetadataMap,\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey }\n): Promise<InstructionsWrapper> {\n  const { bank, tokenProgram } = config;\n  const opts = { createAtas: false, wrapAndUnwrapSol: false, overrideInferAccounts };\n\n  switch (bank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve = bankMetadataMap[bank.address.toBase58()]?.kaminoStates?.reserveState;\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          bank.address.toBase58(),\n          bank.mint.toBase58(),\n          bank.tokenSymbol\n        );\n      }\n      return makeKaminoWithdrawIx({\n        program,\n        bank,\n        bankMap,\n        tokenProgram,\n        cTokenAmount: 1,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        reserve,\n        bankMetadataMap,\n        withdrawAll: false,\n        isSync: true,\n        opts,\n      });\n    }\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[bank.address.toBase58()]?.driftStates;\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          bank.address.toBase58(),\n          bank.mint.toBase58(),\n          bank.tokenSymbol\n        );\n      }\n      return makeDriftWithdrawIx({\n        program,\n        bank,\n        bankMap,\n        tokenProgram,\n        amount: 1,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        driftSpotMarket: driftState.spotMarketState,\n        userRewards: driftState.userRewards,\n        bankMetadataMap,\n        withdrawAll: false,\n        isSync: true,\n        opts,\n      });\n    }\n    case AssetTag.JUPLEND: {\n      const jupLendState = bankMetadataMap[bank.address.toBase58()]?.jupLendStates;\n      if (!jupLendState) {\n        throw TransactionBuildingError.jupLendStateNotFound(\n          bank.address.toBase58(),\n          bank.mint.toBase58(),\n          bank.tokenSymbol\n        );\n      }\n      return makeJuplendWithdrawIx({\n        program,\n        bank,\n        bankMap,\n        tokenProgram,\n        amount: 1,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        jupLendingState: jupLendState.jupLendingState,\n        bankMetadataMap,\n        withdrawAll: false,\n        isSync: true,\n        opts,\n      });\n    }\n    default: {\n      return makeWithdrawIx({\n        program,\n        bank,\n        bankMap,\n        tokenProgram,\n        amount: 1,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        withdrawAll: false,\n        bankMetadataMap,\n        isSync: true,\n        opts,\n      });\n    }\n  }\n}\n\n/**\n * Compute flashloan swap constraints by building dummy primary + secondary IXs\n * and measuring the remaining TX budget. Replaces the duplicated switch/case\n * blocks in each action file.\n */\nexport async function computeFlashloanSwapConstraints({\n  program,\n  marginfiAccount,\n  bankMap,\n  addressLookupTableAccounts,\n  bankMetadataMap,\n  primaryIx,\n  secondaryIx,\n  overrideInferAccounts,\n}: {\n  program: MarginfiProgram;\n  marginfiAccount: MarginfiAccountType;\n  bankMap: Map<string, BankType>;\n  addressLookupTableAccounts: AddressLookupTableAccount[];\n  bankMetadataMap: BankIntegrationMetadataMap;\n  primaryIx: FlashloanBudgetIx;\n  secondaryIx: FlashloanBudgetIx;\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey };\n}): Promise<FlashloanSwapConstraints> {\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  const [primaryResult, secondaryResult] = await Promise.all([\n    buildBudgetIx(\n      primaryIx,\n      program,\n      marginfiAccount,\n      bankMap,\n      bankMetadataMap,\n      overrideInferAccounts\n    ),\n    buildBudgetIx(\n      secondaryIx,\n      program,\n      marginfiAccount,\n      bankMap,\n      bankMetadataMap,\n      overrideInferAccounts\n    ),\n  ]);\n\n  return computeFlashLoanNonSwapBudget({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts,\n    ixs: [...cuRequestIxs, ...primaryResult.instructions, ...secondaryResult.instructions],\n  });\n}\n","import { TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\n/**\n * Byte offset of the u64 `amount` argument within a deposit instruction's data buffer.\n * Layout for every deposit variant is: 8-byte discriminator followed by an 8-byte\n * little-endian u64 amount (see `sync-instructions.ts` / the marginfi IDL).\n */\nconst DEPOSIT_AMOUNT_OFFSET = 8;\n\n/**\n * Discriminators (first 8 bytes) of the deposit instructions we are allowed to patch.\n * Used as a safety guard so we never rewrite the wrong instruction's bytes.\n */\nconst DEPOSIT_DISCRIMINATORS: ReadonlyArray<readonly number[]> = [\n  [171, 94, 235, 103, 82, 64, 212, 140], // lending_account_deposit\n  [237, 8, 188, 187, 115, 99, 49, 85], // kamino_deposit\n  [252, 63, 250, 201, 98, 55, 130, 12], // drift_deposit\n  [114, 11, 218, 81, 183, 165, 143, 255], // juplend_deposit\n];\n\nfunction isKnownDepositIx(data: Buffer): boolean {\n  return DEPOSIT_DISCRIMINATORS.some((disc) =>\n    disc.every((byte, i) => data[i] === byte)\n  );\n}\n\n/**\n * Returns true if the instruction is a marginfi deposit instruction (any integration).\n * Used to locate the amount-bearing deposit ix within a flashloan instruction array.\n */\nexport function isDepositIx(ix: TransactionInstruction): boolean {\n  return ix.data.length >= 8 && isKnownDepositIx(ix.data);\n}\n\n/**\n * Rewrites the `amount` field of an already-built deposit instruction in place.\n *\n * The deferred-swap loop flow builds the deposit instruction with a market-price\n * estimate before the swap output is known, then patches the real swap output amount\n * once the swap engine has run. Because the amount is a fixed-offset little-endian u64,\n * this is a pure byte patch — no account/key changes — so it is safe to apply to an\n * instruction that is about to be (re)compiled into a flashloan transaction.\n *\n * @param ix - The deposit instruction to mutate.\n * @param amountNative - The new amount in native (base) units.\n */\nexport function patchDepositAmount(ix: TransactionInstruction, amountNative: BN): void {\n  if (ix.data.length < DEPOSIT_AMOUNT_OFFSET + 8) {\n    throw new Error(\n      `patchDepositAmount: instruction data too short (${ix.data.length} bytes), expected at least ${\n        DEPOSIT_AMOUNT_OFFSET + 8\n      }`\n    );\n  }\n\n  if (!isKnownDepositIx(ix.data)) {\n    throw new Error(\n      \"patchDepositAmount: instruction discriminator does not match a known deposit instruction\"\n    );\n  }\n\n  if (amountNative.isNeg()) {\n    throw new Error(\"patchDepositAmount: amount must be non-negative\");\n  }\n\n  amountNative.toArrayLike(Buffer, \"le\", 8).copy(ix.data, DEPOSIT_AMOUNT_OFFSET);\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { MarginfiAccountType } from \"../types\";\n\nimport { BankType, isStandardBorrowable, isStandardDepositable } from \"~/services/bank\";\n\n/**\n * Bridge-token candidate filtering for bridged (double-hop) swaps.\n *\n * A **bridge token** is NOT a cross-chain bridge: it is the high-liquidity intermediate token\n * (e.g. USDC or wSOL) that a swap `A → C` is routed *through* — as `A → bridge` + `bridge → C` in\n * one atomic bundle — when the direct swap can't fit a single transaction or has no route. This\n * module owns the mechanical filtering of bridge-token candidates; ordering (product policy) and\n * the one-call builders live in `bridge-routing.utils.ts` and the `makeBridged*Tx` actions.\n */\n\n/**\n * The side of the marginfi account the bridge token sits on while the bridged bundle executes:\n * - `deposit` — the bridge token is held as *collateral* (a collateral-swap deposits it between\n *   the two legs: withdraw source → deposit bridge, then withdraw bridge → deposit destination).\n * - `borrow`  — the bridge token is held as *debt* (a debt-swap or loop borrows it in the first\n *   leg and repays it exactly in the second).\n */\nexport type BridgeTokenSide = \"deposit\" | \"borrow\";\n\n/**\n * Whether routing through `bridgeBankPk` as the bridge token would conflict with a position the\n * account already holds on that bank. marginfi forbids holding an asset and a liability on the\n * same bank, so the conflict is always *opposite-side*: a deposit-side bridge conflicts with an\n * existing liability there, a borrow-side bridge with an existing asset. Same-side positions are\n * fine (partial-withdraw / exact-repay handle them).\n */\nexport function accountConflictsWithBridgeBank(\n  marginfiAccount: MarginfiAccountType,\n  bridgeBankPk: PublicKey,\n  bridgeTokenSide: BridgeTokenSide\n): boolean {\n  const balance = marginfiAccount.balances.find((b) => b.active && b.bankPk.equals(bridgeBankPk));\n  if (!balance) return false;\n  return bridgeTokenSide === \"deposit\" ? balance.liabilityShares.gt(0) : balance.assetShares.gt(0);\n}\n\nexport interface ResolveBridgeCandidateBanksParams {\n  /** Candidate bridge-token mints, highest priority first (product policy — see\n   *  `bridge-routing.utils.ts` for the default ordering and the per-call override). */\n  prioritizedBridgeCandidateMints: PublicKey[];\n  /** Banks to resolve the candidate mints against — typically all banks in the marginfi group. */\n  groupBanks: BankType[];\n  /** The account the bridged legs run against (for the conflict check). */\n  marginfiAccount: MarginfiAccountType;\n  /** Which side the bridge token is held on — picks the standard-bank filter and the conflict\n   *  rule. */\n  bridgeTokenSide: BridgeTokenSide;\n}\n\n/**\n * Resolve prioritized bridge-token candidate *mints* into candidate *banks*, partitioned into\n * those safe to route through and those blocked by an existing account position.\n *\n * For each mint (deduped, in priority order) it picks the standard bank that fits the side\n * ({@link isStandardBorrowable} for `borrow`, {@link isStandardDepositable} for `deposit`) — this\n * skips integration wrappers (`6200`) and `ReduceOnly` banks (`6017`) — then splits by\n * {@link accountConflictsWithBridgeBank}. The caller supplies the prioritized mint list (product\n * policy); this owns only the mechanical filtering.\n *\n * @returns `usableBridgeBanks` (safe to route through, in priority order) and\n *   `conflictingBridgeBanks` (resolvable but blocked by an opposite-side position — useful for\n *   surfacing a \"close that position\" message).\n */\nexport function resolveBridgeCandidateBanks(params: ResolveBridgeCandidateBanksParams): {\n  usableBridgeBanks: BankType[];\n  conflictingBridgeBanks: BankType[];\n} {\n  const { prioritizedBridgeCandidateMints, groupBanks, marginfiAccount, bridgeTokenSide } = params;\n  const passesSideFilter =\n    bridgeTokenSide === \"borrow\" ? isStandardBorrowable : isStandardDepositable;\n\n  const usableBridgeBanks: BankType[] = [];\n  const conflictingBridgeBanks: BankType[] = [];\n  const seenMints = new Set<string>();\n\n  for (const mint of prioritizedBridgeCandidateMints) {\n    const mintKey = mint.toBase58();\n    if (seenMints.has(mintKey)) continue;\n    seenMints.add(mintKey);\n\n    const bank = groupBanks.find((b) => b.mint.equals(mint) && passesSideFilter(b));\n    if (!bank) continue; // no standard bank for this mint on the required side\n\n    if (accountConflictsWithBridgeBank(marginfiAccount, bank.address, bridgeTokenSide)) {\n      conflictingBridgeBanks.push(bank);\n    } else {\n      usableBridgeBanks.push(bank);\n    }\n  }\n\n  return { usableBridgeBanks, conflictingBridgeBanks };\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { MakeSwapDebtTxParams, MarginfiAccountType, SwapQuoteResult } from \"../types\";\n\nimport { BridgeTokenSide, resolveBridgeCandidateBanks } from \"./bridge.utils\";\n\nimport { USDC_MINT, USDT_MINT, WSOL_MINT } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { BankType } from \"~/services/bank\";\nimport { SolanaTransaction } from \"~/services/transaction\";\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n/**\n * Shared support for the bridged (double-hop) one-call builders.\n *\n * A **bridge token** is NOT a cross-chain bridge: it is the high-liquidity intermediate token\n * (e.g. USDC or wSOL) a swap is routed *through*. When a direct collateral-swap / debt-swap /\n * loop `A → C` can't be built — the swap doesn't fit one tx (size / account-locks) or has no\n * route — it can still succeed decomposed into `A → bridge` + `bridge → C`, submitted as ONE\n * atomic Jito bundle. The per-flow builders live next to their direct builders\n * (`makeBridgedLoopTx` in `../actions/loop.ts`, `makeBridgedSwapCollateralTx` in\n * `../actions/swap-collateral.ts`, `makeBridgedSwapDebtTx` in `../actions/swap-debt.ts`); this\n * module owns the flow-agnostic routing support: candidate ordering/selection, the\n * candidate-iteration loop (abort / skip-on-failure / conflict surfacing), token-program\n * resolution, and the shared leg context.\n *\n * Candidate *ordering* is product policy: it defaults to {@link DEFAULT_BRIDGE_MINTS} and can be\n * overridden per call via {@link BridgeOpts.bridgeCandidateMints} (e.g. a correlation-aware\n * ordering). Candidate *filtering* (standard-bank resolution, opposite-side conflicts) is\n * mechanical and lives in {@link resolveBridgeCandidateBanks}.\n */\n\n/** Default bridge-token candidates, most-liquid first. */\nexport const DEFAULT_BRIDGE_MINTS: PublicKey[] = [USDC_MINT, WSOL_MINT, USDT_MINT];\n\n/** Per-call knobs for the bridged fallback of the `makeBridged*Tx` builders. */\nexport interface BridgeOpts {\n  /**\n   * Candidate bridge-token mints, highest priority first. Defaults to\n   * {@link DEFAULT_BRIDGE_MINTS} (USDC, wSOL, USDT). Source/destination mints are always skipped.\n   */\n  bridgeCandidateMints?: PublicKey[];\n  /** Known token programs by mint (base58) — skips the per-mint RPC owner lookup. */\n  tokenProgramByMint?: Map<string, PublicKey>;\n  /** Override the bundle-size ceiling (see `composeBridgedSwap`). */\n  maxBundleTxs?: number;\n  abortSignal?: AbortSignal;\n}\n\n/** Result of a `makeBridged*Tx` builder — the direct build's result, or the bridged bundle. */\nexport interface BridgedTxResult {\n  transactions: SolanaTransaction[];\n  /** Index of the tx that completes the action (the direct action tx, or the bundle's last leg). */\n  actionTxIndex: number;\n  quoteResponse: SwapQuoteResult | undefined;\n  /** The bridge token's mint — set only when the bridged double-hop path was used. */\n  bridgeMint?: PublicKey;\n  /** true → send as ONE atomic Jito bundle (bridged legs are one operation / integration\n   *  refreshes go stale within a slot); false → sequential sends are safe (cranked oracles\n   *  allow ≥ ~1 min staleness). */\n  mustBeAtomicBundle: boolean;\n}\n\n/** A mint's token program: the cache (seedable by the caller), else the mint account's owner. */\nexport async function resolveTokenProgramForMint(\n  mint: PublicKey,\n  connection: Connection,\n  tokenProgramCacheByMint: Map<string, PublicKey>\n): Promise<PublicKey> {\n  const mintKey = mint.toBase58();\n  const cached = tokenProgramCacheByMint.get(mintKey);\n  if (cached) return cached;\n  const owner = (await connection.getAccountInfo(mint))?.owner ?? TOKEN_PROGRAM_ID;\n  tokenProgramCacheByMint.set(mintKey, owner);\n  return owner;\n}\n\n/**\n * Bridge-token candidate banks for routing `source → bridge → destination`, in priority order,\n * partitioned into usable and conflict-blocked. Source/destination mints are excluded from the\n * candidates (a token can't bridge itself).\n */\nexport function selectSwapBridges(args: {\n  sourceMint: PublicKey;\n  destinationMint: PublicKey;\n  bankMap: Map<string, BankType>;\n  marginfiAccount: MarginfiAccountType;\n  bridgeTokenSide: BridgeTokenSide;\n  bridgeCandidateMints?: PublicKey[];\n}): { usableBridgeBanks: BankType[]; conflictingBridgeBanks: BankType[] } {\n  const prioritizedCandidateMints = (args.bridgeCandidateMints ?? DEFAULT_BRIDGE_MINTS).filter(\n    (mint) => !mint.equals(args.sourceMint) && !mint.equals(args.destinationMint)\n  );\n  return resolveBridgeCandidateBanks({\n    prioritizedBridgeCandidateMints: prioritizedCandidateMints,\n    groupBanks: [...args.bankMap.values()],\n    marginfiAccount: args.marginfiAccount,\n    bridgeTokenSide: args.bridgeTokenSide,\n  });\n}\n\nfunction isAbortError(e: unknown): boolean {\n  return e instanceof DOMException && e.name === \"AbortError\";\n}\n\n/**\n * Try each usable bridge-token candidate in priority order until one composes a bundle. A\n * `buildBundleThroughBridge` that returns null or throws (build failure) moves on to the next\n * candidate; abort errors always propagate. When NO candidate is usable but some were dropped\n * solely for an existing opposite-side position, throws\n * `TransactionBuildingError.bridgeConflict` (the caller-facing \"close that position\" signal);\n * otherwise resolves null and the caller rethrows the direct build's error.\n */\nexport async function tryBridgeCandidates(args: {\n  usableBridgeBanks: BankType[];\n  conflictingBridgeBanks: BankType[];\n  bridgeTokenSide: BridgeTokenSide;\n  abortSignal?: AbortSignal;\n  /** Build the two-leg bundle through one candidate bank; null = didn't work, try the next. */\n  buildBundleThroughBridge: (bridgeBank: BankType) => Promise<BridgedTxResult | null>;\n}): Promise<BridgedTxResult | null> {\n  for (const bridgeBank of args.usableBridgeBanks) {\n    if (args.abortSignal?.aborted) {\n      throw new DOMException(\"Operation was aborted\", \"AbortError\");\n    }\n    try {\n      const result = await args.buildBundleThroughBridge(bridgeBank);\n      if (result) return result;\n    } catch (e) {\n      if (isAbortError(e)) throw e;\n      // this bridge candidate failed to build a leg — try the next one\n      console.warn(\n        `[bridge-routing] candidate ${bridgeBank.tokenSymbol ?? bridgeBank.mint.toBase58()} failed:`,\n        e instanceof Error ? e.message : e\n      );\n    }\n  }\n  if (args.usableBridgeBanks.length === 0 && args.conflictingBridgeBanks.length > 0) {\n    throw TransactionBuildingError.bridgeConflict(\n      args.conflictingBridgeBanks.map((bank) => ({\n        bankAddress: bank.address.toBase58(),\n        mint: bank.mint.toBase58(),\n        symbol: bank.tokenSymbol,\n      })),\n      args.bridgeTokenSide\n    );\n  }\n  return null;\n}\n\n/** The flow context shared verbatim by both legs of every bridged build. */\nexport type SharedBridgeLegContext = Pick<\n  MakeSwapDebtTxParams,\n  | \"program\"\n  | \"marginfiAccount\"\n  | \"connection\"\n  | \"bankMap\"\n  | \"oraclePrices\"\n  | \"bankMetadataMap\"\n  | \"assetShareValueMultiplierByBank\"\n  | \"swapOpts\"\n  | \"addressLookupTableAccounts\"\n  | \"overrideInferAccounts\"\n  | \"crossbarUrl\"\n  | \"swapEngineRunner\"\n>;\n\nexport function sharedBridgeLegContext(params: SharedBridgeLegContext): SharedBridgeLegContext {\n  return {\n    program: params.program,\n    marginfiAccount: params.marginfiAccount,\n    connection: params.connection,\n    bankMap: params.bankMap,\n    oraclePrices: params.oraclePrices,\n    bankMetadataMap: params.bankMetadataMap,\n    assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n    swapOpts: params.swapOpts,\n    addressLookupTableAccounts: params.addressLookupTableAccounts,\n    overrideInferAccounts: params.overrideInferAccounts,\n    crossbarUrl: params.crossbarUrl,\n    swapEngineRunner: params.swapEngineRunner,\n  };\n}\n","import {\n  AddressLookupTableAccount,\n  Keypair,\n  PublicKey,\n  Signer,\n  Transaction,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport {\n  BalanceRaw,\n  MakeAccountTransferToNewAccountTxParams,\n  MakeCloseAccountIxParams,\n  MakeCloseAccountTxParams,\n  MakeSetupIxParams,\n  MarginfiAccountRaw,\n  MarginfiAccountType,\n} from \"../types\";\nimport {\n  computeHealthAccountMetas,\n  computeHealthCheckAccounts,\n  parseMarginfiAccountRaw,\n} from \"../utils\";\n\nimport instructions from \"~/instructions\";\nimport { BankType } from \"~/services/bank\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  SolanaTransaction,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { MarginfiProgram } from \"~/types\";\nimport { bigNumberToWrappedI80F48, deriveMarginfiAccount } from \"~/utils\";\nimport {\n  createAssociatedTokenAccountIdempotentInstruction,\n  getAssociatedTokenAddressSync,\n  TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\n/**\n * Creates an instruction to close a Marginfi account.\n *\n * Generates the instruction needed to close an existing Marginfi account and reclaim rent.\n * The account must have no active balances before it can be closed.\n *\n * @param params - Configuration object\n * @param params.program - The Marginfi program instance\n * @param params.marginfiAccount - The Marginfi account to close\n * @param params.authority - The authority/owner of the account\n * @returns Instruction to close the account\n */\nexport async function makeCloseMarginfiAccountIx({\n  program,\n  marginfiAccount,\n  authority,\n}: MakeCloseAccountIxParams) {\n  const closeIx = await instructions.makeCloseAccountIx(program, {\n    marginfiAccount: marginfiAccount.address,\n    feePayer: authority,\n  });\n\n  return closeIx;\n}\n\n/**\n * Creates a transaction to close a Marginfi account.\n *\n * Generates a complete transaction to close an existing Marginfi account and reclaim rent.\n * The account must have no active balances before it can be closed.\n *\n * @param params - Configuration object\n * @param params.connection - Solana connection instance\n * @param params.program - The Marginfi program instance\n * @param params.marginfiAccount - The Marginfi account to close\n * @param params.authority - The authority/owner of the account\n * @returns Versioned transaction to close the account\n */\nexport async function makeCloseMarginfiAccountTx({\n  connection,\n  program,\n  marginfiAccount,\n  authority,\n}: MakeCloseAccountTxParams) {\n  const closeIx = await instructions.makeCloseAccountIx(program, {\n    marginfiAccount: marginfiAccount.address,\n    feePayer: authority,\n  });\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  const closeTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [closeIx],\n        payerKey: authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message([])\n    ),\n    {\n      signers: [],\n      addressLookupTables: [],\n      type: TransactionType.CLOSE_ACCOUNT,\n    }\n  );\n\n  return closeTx;\n}\n\n/**\n * Creates a transaction to transfer a Marginfi account to a new authority.\n *\n * Migrates the account's positions into a brand-new account (`newMarginfiAccount`)\n * owned by `newAuthority`; the old account is left disabled. The new-account\n * keypair signs to create itself, the current authority (the program's provider\n * wallet) signs to authorize, and `feePayer` pays. `globalFeeWallet` is resolved\n * from the program's fee state — matching the marginfi implementation.\n *\n * @param params - Configuration object\n * @param params.connection - Solana connection instance\n * @param params.program - The Marginfi program instance\n * @param params.marginfiAccount - The account being transferred\n * @param params.newMarginfiAccount - Freshly generated keypair for the destination account\n * @param params.newAuthority - The wallet that will own the new account\n * @param params.feePayer - Optional. Pays rent/fees. A `PublicKey` signs via the\n *   wallet adapter; a `Keypair` is a separate fee payer that signs directly.\n *   Defaults to the account's current authority.\n * @returns Versioned transaction to transfer the account\n */\nexport async function makeAccountTransferToNewAccountTx({\n  connection,\n  program,\n  marginfiAccount,\n  newMarginfiAccount,\n  newAuthority,\n  feePayer,\n}: MakeAccountTransferToNewAccountTxParams): Promise<ExtendedV0Transaction> {\n  const feePayerKey =\n    feePayer instanceof Keypair ? feePayer.publicKey : (feePayer ?? marginfiAccount.authority);\n\n  const [feeStateKey] = PublicKey.findProgramAddressSync(\n    [Buffer.from(\"feestate\", \"utf-8\")],\n    program.programId\n  );\n  const feeState = await program.account.feeState.fetch(feeStateKey);\n\n  const transferIx = await instructions.makeAccountTransferToNewAccountIx(program, {\n    oldMarginfiAccount: marginfiAccount.address,\n    newMarginfiAccount: newMarginfiAccount.publicKey,\n    newAuthority,\n    globalFeeWallet: feeState.globalFeeWallet,\n    feePayer: feePayerKey,\n  });\n\n  const {\n    value: { blockhash },\n  } = await connection.getLatestBlockhashAndContext(\"confirmed\");\n\n  // The new-account keypair always signs; a separate fee-payer Keypair signs too.\n  // A PublicKey fee payer (or the default authority) signs via the wallet adapter.\n  const signers: Signer[] = [newMarginfiAccount];\n  if (feePayer instanceof Keypair) signers.push(feePayer);\n\n  const transferTx = addTransactionMetadata(\n    new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [transferIx],\n        payerKey: feePayerKey,\n        recentBlockhash: blockhash,\n      }).compileToV0Message([])\n    ),\n    {\n      signers,\n      addressLookupTables: [],\n      type: TransactionType.TRANSFER_AUTH,\n    }\n  );\n\n  return transferTx;\n}\n\n/**\n * Creates a new Marginfi account transaction with a projected account instance.\n *\n * Generates a transaction to create a new Marginfi account and returns a projected account instance\n * that can be used for operations before the account actually exists on-chain.\n *\n * @param props - Configuration object\n * @param props.program - The Marginfi program instance\n * @param props.authority - The authority public key for the new account\n * @param props.group - The Marginfi group public key\n * @param props.addressLookupTables - Address lookup tables for the transaction\n * @returns Object containing the projected account and creation transaction\n */\nexport async function makeCreateAccountTxWithProjection(props: {\n  program: MarginfiProgram;\n  authority: PublicKey;\n  group: PublicKey;\n  addressLookupTables: AddressLookupTableAccount[];\n  accountIndex: number;\n  thirdPartyId?: number;\n}): Promise<{ account: MarginfiAccountType; tx: SolanaTransaction }> {\n  const [marginfiAccountAddress] = deriveMarginfiAccount(\n    props.program.programId,\n    props.group,\n    props.authority,\n    props.accountIndex,\n    props.thirdPartyId\n  );\n\n  const account = generateDummyAccount(props.group, props.authority, marginfiAccountAddress);\n  const tx = await makeCreateMarginfiAccountTx(\n    props.program,\n    props.authority,\n    props.group,\n    props.addressLookupTables,\n    props.accountIndex,\n    props.thirdPartyId\n  );\n\n  return {\n    account,\n    tx,\n  };\n}\n\n/**\n * Creates a new Marginfi account instruction with a projected account instance.\n *\n * Generates an instruction to create a new Marginfi account and returns a projected account instance\n * that can be used for operations before the account actually exists on-chain.\n *\n * @param props - Configuration object\n * @param props.program - The Marginfi program instance\n * @param props.authority - The authority public key for the new account\n * @param props.group - The Marginfi group public key\n * @returns Object containing the projected account and creation instruction\n */\nexport async function makeCreateAccountIxWithProjection(props: {\n  program: MarginfiProgram;\n  authority: PublicKey;\n  group: PublicKey;\n  accountIndex: number;\n  thirdPartyId?: number;\n}): Promise<{ account: MarginfiAccountType; ix: TransactionInstruction }> {\n  const [marginfiAccountAddress] = deriveMarginfiAccount(\n    props.program.programId,\n    props.group,\n    props.authority,\n    props.accountIndex,\n    props.thirdPartyId\n  );\n\n  const account = generateDummyAccount(props.group, props.authority, marginfiAccountAddress);\n  const ix = await makeCreateMarginfiAccountIx(\n    props.program,\n    props.authority,\n    props.group,\n    props.accountIndex,\n    props.thirdPartyId\n  );\n\n  return {\n    account,\n    ix,\n  };\n}\n\nexport async function makeCreateMarginfiAccountTx(\n  program: MarginfiProgram,\n  authority: PublicKey,\n  groupAddress: PublicKey,\n  addressLookupTables: AddressLookupTableAccount[],\n  accountIndex: number,\n  thirdPartyId?: number\n): Promise<SolanaTransaction> {\n  const [marginfiAccountAddress] = deriveMarginfiAccount(\n    program.programId,\n    groupAddress,\n    authority,\n    accountIndex,\n    thirdPartyId\n  );\n\n  const initMarginfiAccountIx = await instructions.makeInitMarginfiAccountPdaIx(\n    program,\n    {\n      marginfiGroup: groupAddress,\n      marginfiAccount: marginfiAccountAddress,\n      authority,\n      feePayer: authority,\n    },\n    {\n      accountIndex,\n      thirdPartyId,\n    }\n  );\n\n  const ixs = [initMarginfiAccountIx];\n\n  const signers: Keypair[] = [];\n\n  const tx = new Transaction().add(...ixs);\n  tx.feePayer = authority;\n  const solanaTx = addTransactionMetadata(tx, {\n    signers,\n    addressLookupTables,\n    type: TransactionType.CREATE_ACCOUNT,\n  });\n\n  return solanaTx;\n}\n\nexport async function makeCreateMarginfiAccountIx(\n  program: MarginfiProgram,\n  authority: PublicKey,\n  groupAddress: PublicKey,\n  accountIndex: number,\n  thirdPartyId?: number\n): Promise<TransactionInstruction> {\n  const [marginfiAccountAddress] = deriveMarginfiAccount(\n    program.programId,\n    groupAddress,\n    authority,\n    accountIndex,\n    thirdPartyId\n  );\n\n  const initMarginfiAccountIx = await instructions.makeInitMarginfiAccountPdaIx(\n    program,\n    {\n      marginfiGroup: groupAddress,\n      marginfiAccount: marginfiAccountAddress,\n      authority,\n      feePayer: authority,\n    },\n    {\n      accountIndex,\n      thirdPartyId,\n    }\n  );\n\n  return initMarginfiAccountIx;\n}\n\nexport async function makeSetupIx({ connection, authority, tokens }: MakeSetupIxParams) {\n  try {\n    // Filter out duplicate mints\n    const uniqueTokens = tokens.filter(\n      (token, index, self) => index === self.findIndex((t) => t.mint.equals(token.mint))\n    );\n\n    const userAtas = uniqueTokens.map((token) => {\n      return getAssociatedTokenAddressSync(\n        new PublicKey(token.mint),\n        authority,\n        true,\n        token.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n      );\n    });\n\n    const ixs = [];\n    const userAtaAis = await connection.getMultipleAccountsInfo(userAtas);\n\n    for (const [i, userAta] of userAtaAis.entries()) {\n      // Index against `uniqueTokens` (which `userAtas` was derived from) — not `tokens` — so a\n      // duplicate mint in the input doesn't misalign the ATA address with the mint and produce\n      // an invalid-seeds create.\n      const token = uniqueTokens[i];\n      const userAtaAddress = userAtas[i];\n      if (userAta === null && token && userAtaAddress) {\n        ixs.push(\n          createAssociatedTokenAccountIdempotentInstruction(\n            authority,\n            userAtaAddress,\n            authority,\n            new PublicKey(token.mint),\n            token.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n          )\n        );\n      }\n    }\n\n    return ixs;\n  } catch (error) {\n    console.error(\"[makeSetupIx] Failed to create setup instructions:\", error);\n    return [];\n  }\n}\n\nexport async function makePulseHealthIx(\n  program: MarginfiProgram,\n  marginfiAccount: MarginfiAccountType,\n  banks: Map<string, BankType>,\n  mandatoryBanks: PublicKey[],\n  excludedBanks: PublicKey[]\n) {\n  const healthAccounts = computeHealthCheckAccounts({\n    account: marginfiAccount,\n    banksMap: banks,\n    mandatoryBanks,\n    excludedBanks,\n  });\n  const accountMetas = computeHealthAccountMetas({ banksToInclude: healthAccounts });\n\n  // const sortIx = await instructions.makeLendingAccountSortBalancesIx(program, {\n  //   marginfiAccount: marginfiAccountPk,\n  // });\n\n  const ix = await instructions.makePulseHealthIx(\n    program,\n    {\n      marginfiAccount: marginfiAccount.address,\n    },\n    accountMetas.map((account) => ({\n      pubkey: account,\n      isSigner: false,\n      isWritable: false,\n    }))\n  );\n\n  return { instructions: [ix], keys: [] };\n}\n\nexport function generateDummyAccount(\n  group: PublicKey,\n  authority: PublicKey,\n  accountKey: PublicKey\n) {\n  // create a dummy account with 15 empty balances to be used in other transactions\n  const dummyWrappedI80F48 = bigNumberToWrappedI80F48(new BigNumber(0));\n  const dummyBalances: BalanceRaw[] = Array(15).fill({\n    active: false,\n    bankPk: new PublicKey(\"11111111111111111111111111111111\"),\n    assetShares: dummyWrappedI80F48,\n    liabilityShares: dummyWrappedI80F48,\n    emissionsOutstanding: dummyWrappedI80F48,\n    lastUpdate: new BN(0),\n  });\n  const rawAccount: MarginfiAccountRaw = {\n    group: group,\n    authority: authority,\n    lendingAccount: { balances: dummyBalances },\n    healthCache: {\n      assetValue: {\n        value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n      },\n      liabilityValue: {\n        value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n      },\n      timestamp: new BN(0),\n      flags: 0,\n      prices: [],\n      assetValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n      liabilityValueMaint: bigNumberToWrappedI80F48(new BigNumber(0)),\n      assetValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n      liabilityValueEquity: bigNumberToWrappedI80F48(new BigNumber(0)),\n      errIndex: 0,\n      internalErr: 0,\n      internalBankruptcyErr: 0,\n      internalLiqErr: 0,\n      mrgnErr: 0,\n    },\n    emissionsDestinationAccount: new PublicKey(\"11111111111111111111111111111111\"),\n    accountFlags: new BN([0, 0, 0]),\n  };\n\n  return parseMarginfiAccountRaw(accountKey, rawAccount);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  BalanceType,\n  BalanceRaw,\n  parseBalanceRaw,\n  createEmptyBalance,\n  OraclePrice,\n  MarginRequirementType,\n  computeBalanceUsdValue,\n  getBalanceUsdValueWithPriceBias,\n  computeQuantity,\n  computeQuantityUi,\n  computeTotalOutstandingEmissions,\n  computeClaimedEmissions,\n} from \"../services\";\n\nimport { Bank } from \"./bank\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass Balance implements BalanceType {\n  constructor(\n    public active: boolean,\n    public bankPk: PublicKey,\n    public assetShares: BigNumber,\n    public liabilityShares: BigNumber,\n    public emissionsOutstanding: BigNumber,\n    public lastUpdate: number\n  ) {}\n\n  static from(balanceRaw: BalanceRaw): Balance {\n    const props = parseBalanceRaw(balanceRaw);\n    return new Balance(\n      props.active,\n      props.bankPk,\n      props.assetShares,\n      props.liabilityShares,\n      props.emissionsOutstanding,\n      props.lastUpdate\n    );\n  }\n\n  static fromBalanceType(balance: BalanceType): Balance {\n    return new Balance(\n      balance.active,\n      balance.bankPk,\n      balance.assetShares,\n      balance.liabilityShares,\n      balance.emissionsOutstanding,\n      balance.lastUpdate\n    );\n  }\n\n  static createEmpty(bankPk: PublicKey): Balance {\n    const balance = createEmptyBalance(bankPk);\n    return this.fromBalanceType(balance);\n  }\n\n  computeUsdValue(\n    bank: Bank,\n    oraclePrice: OraclePrice,\n    marginRequirement = MarginRequirementType.Equity,\n    assetShareValueMultiplier?: BigNumber,\n    activeEmodeWeights?: {\n      assetWeightInit: BigNumber;\n      assetWeightMaint: BigNumber;\n    }\n  ): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return computeBalanceUsdValue({\n      balance: this,\n      bank,\n      oraclePrice,\n      marginRequirement,\n      assetShareValueMultiplier,\n      activeEmodeWeights,\n    });\n  }\n\n  getUsdValueWithPriceBias(\n    bank: Bank,\n    oraclePrice: OraclePrice,\n    marginRequirement = MarginRequirementType.Equity,\n    assetShareValueMultiplier?: BigNumber,\n    activeEmodeWeights?: {\n      assetWeightInit: BigNumber;\n      assetWeightMaint: BigNumber;\n    }\n  ): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return getBalanceUsdValueWithPriceBias({\n      balance: this,\n      bank,\n      oraclePrice,\n      marginRequirement,\n      assetShareValueMultiplier,\n      activeEmodeWeights,\n    });\n  }\n\n  computeQuantity(bank: Bank): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return computeQuantity(this, bank);\n  }\n\n  computeQuantityUi(\n    bank: Bank,\n    assetShareValueMultiplier?: BigNumber\n  ): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return computeQuantityUi(this, bank, assetShareValueMultiplier);\n  }\n\n  computeTotalOutstandingEmissions(bank: Bank): BigNumber {\n    return computeTotalOutstandingEmissions(this, bank);\n  }\n\n  computeClaimedEmissions(bank: Bank, currentTimestamp: number): BigNumber {\n    return computeClaimedEmissions(this, bank, currentTimestamp);\n  }\n}\n\nexport { Balance };\n","import BigNumber from \"bignumber.js\";\n\nimport {\n  HealthCacheFlags,\n  HealthCacheRaw,\n  HealthCacheStatus,\n  HealthCacheType,\n  parseHealthCacheRaw,\n} from \"../services\";\nexport class HealthCache implements HealthCacheType {\n  constructor(\n    public assetValue: BigNumber,\n    public liabilityValue: BigNumber,\n    public assetValueMaint: BigNumber,\n    public liabilityValueMaint: BigNumber,\n    public assetValueEquity: BigNumber,\n    public liabilityValueEquity: BigNumber,\n    public timestamp: BigNumber,\n    public flags: HealthCacheFlags[],\n    public prices: number[][],\n    public simulationStatus: HealthCacheStatus\n  ) {}\n\n  static fromHealthCacheType(healthCacheType: HealthCacheType): HealthCache {\n    return new HealthCache(\n      healthCacheType.assetValue,\n      healthCacheType.liabilityValue,\n      healthCacheType.assetValueMaint,\n      healthCacheType.liabilityValueMaint,\n      healthCacheType.assetValueEquity,\n      healthCacheType.liabilityValueEquity,\n      healthCacheType.timestamp,\n      healthCacheType.flags,\n      healthCacheType.prices,\n      healthCacheType.simulationStatus\n    );\n  }\n\n  static from(healthCacheRaw: HealthCacheRaw): HealthCache {\n    return this.fromHealthCacheType(parseHealthCacheRaw(healthCacheRaw));\n  }\n}\n","import { Keypair, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { Balance } from \"./balance\";\nimport { Bank } from \"./bank\";\nimport { HealthCache } from \"./health-cache\";\n\nimport { MarginfiIdlType } from \"~/idl\";\nimport instructions from \"~/instructions\";\nimport {\n  AccountFlags,\n  computeAccountValue,\n  computeActiveEmodePairs,\n  computeEmodeImpacts,\n  computeFreeCollateralFromCache,\n  computeFreeCollateralFromBalances,\n  ComputeFreeCollateralFromBalancesParams,\n  computeHealthCheckAccounts,\n  computeHealthComponentsFromCache,\n  computeHealthComponentsFromBalances,\n  ComputeHealthComponentsFromBalancesParams,\n  computeMaxBorrowForBank,\n  ComputeMaxBorrowForBankParams,\n  computeMaxDepositForBank,\n  ComputeMaxDepositForBankParams,\n  computeMaxWithdrawForBank,\n  ComputeMaxWithdrawForBankParams,\n  computeNetApy,\n  ComputeNetApyParams,\n  computeProjectedActiveBalancesNoCpi,\n  computeProjectedActiveBanksNoCpi,\n  decodeAccountRaw,\n  getBalance,\n  makeBeginFlashLoanIx,\n  makeBorrowIx,\n  MakeBorrowIxParams,\n  makeBorrowTx,\n  MakeBorrowTxParams,\n  makeDepositIx,\n  MakeDepositIxParams,\n  makeDepositTx,\n  MakeDepositTxParams,\n  makeEndFlashLoanIx,\n  makeFlashLoanTx,\n  MakeFlashLoanTxParams,\n  makeKaminoDepositTx,\n  MakeKaminoDepositTxParams,\n  makeKaminoWithdrawTx,\n  MakeKaminoWithdrawTxParams,\n  makeAccountTransferToNewAccountTx,\n  makeBridgedLoopTx,\n  MakeBridgedLoopTxParams,\n  makeBridgedSwapCollateralTx,\n  MakeBridgedSwapCollateralTxParams,\n  makeBridgedSwapDebtTx,\n  MakeBridgedSwapDebtTxParams,\n  BridgedTxResult,\n  makeLoopTx,\n  makePulseHealthIx,\n  makeRepayIx,\n  MakeRepayIxParams,\n  makeRepayTx,\n  MakeRepayTxParams,\n  makeRepayWithCollatTx,\n  MakeRepayWithCollatTxParams,\n  makeSwapCollateralTx,\n  MakeSwapCollateralTxParams,\n  makeRollPtTx,\n  MakeRollPtTxParams,\n  makeSwapDebtTx,\n  MakeSwapDebtTxParams,\n  makeWithdrawIx,\n  MakeWithdrawIxParams,\n  makeWithdrawTx,\n  MakeWithdrawTxParams,\n  MarginfiAccountRaw,\n  MarginfiAccountType,\n  MarginRequirementType,\n  MakeLoopTxParams,\n  parseMarginfiAccountRaw,\n  simulateAccountHealthCacheWithFallback,\n  SimulateAccountHealthCacheWithFallbackParams,\n  TransactionBuilderResult,\n  MakeDriftDepositTxParams,\n  makeDriftDepositTx,\n  MakeDriftWithdrawTxParams,\n  makeDriftWithdrawTx,\n  makeTransferPositionsTx,\n  MakeTransferPositionsTxParams,\n  TransferPositionsResult,\n  SwapQuoteResult,\n} from \"~/services/account\";\nimport { BankType, EmodePair, ActionEmodeImpact } from \"~/services/bank\";\nimport {\n  ExtendedTransaction,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeUnwrapSolIx,\n  makeWrapSolIxs,\n} from \"~/services/transaction\";\nimport { Amount, MarginfiProgram } from \"~/types\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass MarginfiAccount implements MarginfiAccountType {\n  constructor(\n    public readonly address: PublicKey,\n    public readonly group: PublicKey,\n    public readonly authority: PublicKey,\n    public readonly balances: Balance[],\n    public readonly accountFlags: AccountFlags[],\n    public readonly emissionsDestinationAccount: PublicKey,\n    public healthCache: HealthCache\n  ) {}\n\n  /**\n   * Fetches a marginfi account from on-chain data.\n   *\n   * @param address - The public key of the marginfi account\n   * @param program - The Marginfi program instance\n   *\n   * @returns Promise resolving to a MarginfiAccount instance\n   */\n  static async fetch(address: PublicKey, program: MarginfiProgram): Promise<MarginfiAccount> {\n    const data: MarginfiAccountRaw = await program.account.marginfiAccount.fetch(address);\n    return MarginfiAccount.fromAccountParsed(address, data);\n  }\n\n  static decodeAccountRaw(encoded: Buffer, idl: MarginfiIdlType): MarginfiAccountRaw {\n    return decodeAccountRaw(encoded, idl);\n  }\n\n  static fromAccountType(account: MarginfiAccountType) {\n    return new MarginfiAccount(\n      account.address,\n      account.group,\n      account.authority,\n      account.balances.map((b) => Balance.fromBalanceType(b)),\n      account.accountFlags,\n      account.emissionsDestinationAccount,\n      account.healthCache\n    );\n  }\n\n  /**\n   * Creates a MarginfiAccount instance from parsed account data.\n   *\n   * @param marginfiAccountPk - The public key of the marginfi account\n   * @param accountData - The raw account data from the program\n   *\n   * @returns A new MarginfiAccount instance\n   */\n  static fromAccountParsed(marginfiAccountPk: PublicKey, accountData: MarginfiAccountRaw) {\n    const props = parseMarginfiAccountRaw(marginfiAccountPk, accountData);\n    return new MarginfiAccount(\n      props.address,\n      props.group,\n      props.authority,\n      props.balances.map((b) => Balance.fromBalanceType(b)),\n      props.accountFlags,\n      props.emissionsDestinationAccount,\n      HealthCache.fromHealthCacheType(props.healthCache)\n    );\n  }\n\n  /**\n   * Simulates and updates the health cache for this account.\n   *\n   * Fetches current oracle prices and computes fresh health values. Returns a new\n   * account instance with updated health cache (does not mutate this instance).\n   *\n   * @param params - Configuration for health cache simulation (excluding marginfiAccount)\n   * @returns Object containing the updated account and any errors\n   */\n  async simulateHealthCache(\n    params: Omit<SimulateAccountHealthCacheWithFallbackParams, \"marginfiAccount\">\n  ) {\n    const accountWithHealthCache = await simulateAccountHealthCacheWithFallback({\n      marginfiAccount: this,\n      ...params,\n    });\n\n    return {\n      account: MarginfiAccount.fromAccountType(accountWithHealthCache.marginfiAccount),\n      error: accountWithHealthCache.error,\n    };\n  }\n\n  static fromAccountDataRaw(marginfiAccountPk: PublicKey, rawData: Buffer, idl: MarginfiIdlType) {\n    const marginfiAccountData = MarginfiAccount.decodeAccountRaw(rawData, idl);\n    return MarginfiAccount.fromAccountParsed(marginfiAccountPk, marginfiAccountData);\n  }\n  // ----------------------------------------------------------------------------\n  // Attributes\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Gets all balances that are currently active (non-zero).\n   *\n   * @returns Array of active Balance instances\n   */\n  get activeBalances(): Balance[] {\n    return this.balances.filter((b) => b.active);\n  }\n\n  /**\n   * Gets the balance for a specific bank.\n   *\n   * @param bankPk - The public key of the bank\n   *\n   * @returns The Balance instance for the bank (may be empty)\n   */\n  getBalance(bankPk: PublicKey): Balance {\n    return Balance.fromBalanceType(getBalance(bankPk, this.balances));\n  }\n\n  /**\n   * Checks if the account is disabled.\n   *\n   * @returns True if the account is disabled, false otherwise\n   */\n  get isDisabled(): boolean {\n    return this.accountFlags.includes(AccountFlags.ACCOUNT_DISABLED);\n  }\n\n  /**\n   * Checks if the account is currently in a flash loan.\n   *\n   * @returns True if a flash loan is active, false otherwise\n   */\n  get isFlashLoanEnabled(): boolean {\n    return this.accountFlags.includes(AccountFlags.ACCOUNT_IN_FLASHLOAN);\n  }\n\n  /**\n   * Checks if account authority transfer is enabled.\n   *\n   * @returns True if authority transfer is allowed, false otherwise\n   */\n  get isTransferAccountAuthorityEnabled(): boolean {\n    return this.accountFlags.includes(AccountFlags.ACCOUNT_TRANSFER_AUTHORITY_ALLOWED);\n  }\n\n  /**\n   * Sets the health cache for this account.\n   *\n   * Note: This mutates the account instance. Consider using simulateHealthCache()\n   * for a pure functional approach that returns a new account instance.\n   *\n   * @param value - The new health cache to set\n   */\n  setHealthCache(value: HealthCache) {\n    this.healthCache = value;\n  }\n\n  /**\n   * Computes free collateral using cached health values.\n   *\n   * Free collateral represents the amount of collateral that is not backing any liabilities.\n   *\n   * @param opts - Optional configuration\n   * @param opts.clamped - If true, clamps negative values to zero\n   *\n   * @returns The free collateral amount in USD\n   */\n  computeFreeCollateralFromCache(opts?: { clamped?: boolean }): BigNumber {\n    return computeFreeCollateralFromCache(this, opts);\n  }\n\n  /**\n   * Computes free collateral from balances using Initial margin requirements.\n   *\n   * Free collateral represents the amount of value available for new borrows or withdrawals.\n   * By default, negative values are clamped to zero.\n   *\n   * @param params - Configuration for free collateral computation (excluding activeBalances)\n   * @returns Free collateral value in USD (clamped to zero by default)\n   */\n  computeFreeCollateralFromBalances(\n    params: Omit<ComputeFreeCollateralFromBalancesParams, \"activeBalances\">\n  ): BigNumber {\n    return computeFreeCollateralFromBalances({\n      activeBalances: this.activeBalances,\n      ...params,\n    });\n  }\n\n  /**\n   * Computes health components using cached health values.\n   *\n   * Returns weighted asset and liability values based on the margin requirement type.\n   *\n   * @param marginReqType - The margin requirement type (Initial, Maintenance, or Equity)\n   *\n   * @returns Object containing assets and liabilities values in USD\n   */\n  computeHealthComponentsFromCache(marginRequirement: MarginRequirementType): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return computeHealthComponentsFromCache(this, marginRequirement);\n  }\n\n  /**\n   * Computes health components from balances with price bias.\n   *\n   * Returns weighted asset and liability values using conservative pricing\n   * (Lowest for assets, Highest for liabilities).\n   *\n   * @param params - Configuration for health computation (excluding activeBalances)\n   * @returns Object containing assets and liabilities values in USD\n   */\n  computeHealthComponentsFromBalances(\n    params: Omit<ComputeHealthComponentsFromBalancesParams, \"activeBalances\">\n  ): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return computeHealthComponentsFromBalances({\n      activeBalances: this.activeBalances,\n      ...params,\n    });\n  }\n\n  /**\n   * Computes the total account value (equity).\n   *\n   * Account value is calculated as total assets minus total liabilities.\n   *\n   * @returns The account value in USD\n   */\n  computeAccountValue(): BigNumber {\n    return computeAccountValue(this);\n  }\n\n  /**\n   * Computes the net APY (Annual Percentage Yield) for this account.\n   *\n   * The net APY represents the combined annualized return from all lending and borrowing\n   * positions, weighted by their USD values.\n   *\n   * @param params - Configuration for net APY computation (excluding marginfiAccount and activeBalances)\n   * @returns The net APY as a decimal (e.g., 0.05 = 5%)\n   */\n  computeNetApy(params: Omit<ComputeNetApyParams, \"marginfiAccount\" | \"activeBalances\">): number {\n    return computeNetApy({\n      marginfiAccount: this,\n      activeBalances: this.activeBalances,\n      ...params,\n    });\n  }\n\n  /**\n   * Calculates the maximum amount that can be borrowed from a bank.\n   *\n   * Takes into account:\n   * - Free collateral available\n   * - Existing deposits in the bank\n   * - Risk weights and oracle prices\n   * - E-mode configurations if applicable\n   *\n   * @param params - Configuration for max borrow computation (excluding account)\n   * @returns Maximum borrowable amount in UI units\n   *\n   * @remarks\n   * NOTE FOR LIQUIDATORS: This function doesn't account for collateral received when liquidating.\n   *\n   * @see {@link computeMaxBorrowForBank} for implementation details\n   */\n  computeMaxBorrowForBank(params: Omit<ComputeMaxBorrowForBankParams, \"account\">): BigNumber {\n    return computeMaxBorrowForBank({\n      account: this,\n      ...params,\n    });\n  }\n\n  /**\n   * Calculates the maximum amount that can be withdrawn from a bank without borrowing.\n   *\n   * Ensures the account remains healthy after withdrawal by checking collateral requirements.\n   *\n   * @param params - Configuration for max withdraw computation (excluding account)\n   * @returns Maximum withdrawable amount in UI units\n   *\n   * @see {@link computeMaxWithdrawForBank} for implementation details\n   */\n  computeMaxWithdrawForBank(params: Omit<ComputeMaxWithdrawForBankParams, \"account\">): BigNumber {\n    return computeMaxWithdrawForBank({\n      account: this,\n      ...params,\n    });\n  }\n\n  /**\n   * Calculates the maximum amount that can be deposited into a bank.\n   *\n   * Deposits are not constrained by account health, only by the bank's remaining deposit cap\n   * and (optionally) the wallet balance.\n   *\n   * @param params - Configuration for max deposit computation\n   * @returns Maximum depositable amount in UI units\n   *\n   * @see {@link computeMaxDepositForBank} for implementation details\n   */\n  computeMaxDepositForBank(params: ComputeMaxDepositForBankParams): BigNumber {\n    return computeMaxDepositForBank(params);\n  }\n\n  /**\n   * Gets the banks required for health check calculations.\n   *\n   * Returns banks that have active balances, plus any mandatory banks, minus excluded banks.\n   *\n   * @param banks - Map of all available banks\n   * @param mandatoryBanks - Banks to always include\n   * @param excludedBanks - Banks to exclude\n   *\n   * @returns Array of banks needed for health checks\n   */\n  getHealthCheckAccounts(\n    banks: Map<string, BankType>,\n    mandatoryBanks: PublicKey[] = [],\n    excludedBanks: PublicKey[] = []\n  ): BankType[] {\n    return computeHealthCheckAccounts({\n      account: this,\n      banksMap: banks,\n      mandatoryBanks,\n      excludedBanks,\n    });\n  }\n\n  /**\n   * Determines which E-mode pairs are currently active for this account.\n   *\n   * E-mode (Efficiency Mode) allows for higher leverage when borrowing and lending\n   * related assets (e.g., different stablecoins).\n   *\n   * @param emodePairs - All available E-mode pairs to check\n   *\n   * @returns Array of active E-mode pairs, or empty array if no E-mode is active\n   */\n  computeActiveEmodePairs(emodePairs: EmodePair[]): EmodePair[] {\n    const activeLiabilities = this.activeBalances\n      .filter((balance) => balance.liabilityShares.gt(0))\n      .map((balance) => balance.bankPk);\n    const activeCollateral = this.activeBalances\n      .filter((balance) => balance.assetShares.gt(0))\n      .map((balance) => balance.bankPk);\n    return computeActiveEmodePairs(emodePairs, activeLiabilities, activeCollateral);\n  }\n\n  /**\n   * Calculates how different actions would affect E-mode status.\n   *\n   * For each bank, simulates:\n   * - Borrowing (for banks not currently borrowed from)\n   * - Supplying (for supported collateral banks)\n   * - Repaying (for banks with active liabilities)\n   * - Withdrawing (for banks with active collateral)\n   *\n   * @param emodePairs - All available E-mode pairs\n   * @param banks - Array of bank PublicKeys to analyze\n   *\n   * @returns Object mapping bank addresses to their action impact analysis\n   */\n  computeEmodeImpacts(\n    emodePairs: EmodePair[],\n    banks: PublicKey[]\n  ): Record<string, ActionEmodeImpact> {\n    const activeLiabilities = this.activeBalances\n      .filter((balance) => balance.liabilityShares.gt(0))\n      .map((balance) => balance.bankPk);\n    const activeCollateral = this.activeBalances\n      .filter((balance) => balance.assetShares.gt(0))\n      .map((balance) => balance.bankPk);\n\n    return computeEmodeImpacts(emodePairs, activeLiabilities, activeCollateral, banks);\n  }\n\n  // ----------------------------------------------------------------------------\n  // Actions\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Creates a deposit instruction for this marginfi account.\n   *\n   * @param params - Deposit instruction parameters\n   * @returns Promise resolving to InstructionsWrapper containing the deposit instructions\n   *\n   * @see {@link makeDepositIx} for detailed implementation and additional options\n   */\n  async makeDepositIx(\n    params: Omit<MakeDepositIxParams, \"accountAddress\" | \"authority\" | \"group\">\n  ): Promise<InstructionsWrapper> {\n    return makeDepositIx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n      group: this.group,\n    });\n  }\n\n  /**\n   * Creates a repay instruction for this marginfi account.\n   *\n   * @param params - Repay instruction parameters\n   * @returns Promise resolving to InstructionsWrapper containing the repay instructions\n   *\n   * @see {@link makeRepayIx} for detailed implementation\n   */\n  async makeRepayIx(\n    params: Omit<MakeRepayIxParams, \"accountAddress\" | \"authority\">\n  ): Promise<InstructionsWrapper> {\n    return makeRepayIx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n    });\n  }\n\n  /**\n   * Creates a withdraw instruction for this marginfi account.\n   *\n   * @param params - Withdraw instruction parameters\n   * @returns Promise resolving to InstructionsWrapper containing the withdraw instructions\n   *\n   * @see {@link makeWithdrawIx} for detailed implementation\n   */\n  async makeWithdrawIx(\n    params: Omit<MakeWithdrawIxParams, \"marginfiAccount\" | \"authority\">\n  ): Promise<InstructionsWrapper> {\n    return makeWithdrawIx({\n      ...params,\n      marginfiAccount: this,\n      authority: this.authority,\n    });\n  }\n\n  /**\n   * Creates a borrow instruction for this marginfi account.\n   *\n   * @param params - Borrow instruction parameters\n   * @returns Promise resolving to InstructionsWrapper containing the borrow instructions\n   *\n   * @see {@link makeBorrowIx} for detailed implementation\n   */\n  async makeBorrowIx(\n    params: Omit<MakeBorrowIxParams, \"marginfiAccount\" | \"authority\">\n  ): Promise<InstructionsWrapper> {\n    return makeBorrowIx({\n      ...params,\n      marginfiAccount: this,\n      authority: this.authority,\n    });\n  }\n\n  /**\n   * Creates an instruction to begin a flash loan.\n   *\n   * Flash loans allow borrowing assets within a single transaction, which must be\n   * repaid before the transaction completes.\n   *\n   * @param params - Begin flash loan instruction parameters\n   * @returns Promise resolving to InstructionsWrapper containing the begin flash loan instruction\n   *\n   * @see {@link makeBeginFlashLoanIx} for implementation\n   */\n  async makeBeginFlashLoanIx(\n    program: MarginfiProgram,\n    endIndex: number,\n    authority?: PublicKey\n  ): Promise<InstructionsWrapper> {\n    return await makeBeginFlashLoanIx(program, this.address, endIndex, authority);\n  }\n\n  /**\n   * Creates an instruction to end a flash loan.\n   *\n   * Validates that all required banks are available and constructs the end flash loan\n   * instruction with proper health checks.\n   *\n   * @param program - The Marginfi program instance\n   * @param bankMap - Map of all available banks\n   * @param projectedActiveBanks - Banks that will be active after the flash loan\n   * @param authority - Optional authority override (defaults to account authority)\n   *\n   * @returns Promise resolving to InstructionsWrapper containing the end flash loan instruction\n   *\n   * @throws {Error} If any projected active bank is not found in bankMap\n   *\n   * @see {@link makeEndFlashLoanIx} for implementation\n   */\n  async makeEndFlashLoanIx(\n    program: MarginfiProgram,\n    bankMap: Map<string, Bank>,\n    projectedActiveBanks: PublicKey[],\n    authority?: PublicKey\n  ): Promise<InstructionsWrapper> {\n    // Pre-validate all banks exist before processing\n    const missingBanks = projectedActiveBanks.filter((account) => !bankMap.get(account.toBase58()));\n    if (missingBanks.length > 0) {\n      throw Error(\n        `Banks not found for flashloan end operation: ${missingBanks.map((b) => b.toBase58()).join(\", \")}`\n      );\n    }\n\n    const banks = projectedActiveBanks.map((account) => bankMap.get(account.toBase58())!);\n\n    return makeEndFlashLoanIx(program, this.address, this.group, banks, authority);\n  }\n\n  /**\n   * Builds a transaction to transfer this account to a new authority.\n   *\n   * Thin wrapper over the {@link makeAccountTransferToNewAccountTx} action,\n   * injecting the connection and this account from context. The global fee\n   * wallet is derived inside the action from the program's fee state.\n   *\n   * @param program - The Marginfi program instance\n   * @param newMarginfiAccount - Freshly generated keypair for the destination account\n   * @param newAuthority - The new authority public key\n   * @param feePayer - Optional `PublicKey` (adapter-signed) or `Keypair` (separate\n   *   payer); defaults to this account's authority\n   *\n   * @returns Promise resolving to the transfer transaction\n   */\n  async makeAccountTransferToNewAccountTx(\n    program: MarginfiProgram,\n    newMarginfiAccount: Keypair,\n    newAuthority: PublicKey,\n    feePayer?: PublicKey | Keypair\n  ): Promise<ExtendedV0Transaction> {\n    return makeAccountTransferToNewAccountTx({\n      connection: program.provider.connection,\n      program,\n      marginfiAccount: this,\n      newMarginfiAccount,\n      newAuthority,\n      feePayer,\n    });\n  }\n\n  /**\n   * Creates an instruction to close this marginfi account.\n   *\n   * Closes the account and returns rent to the fee payer. The account must have\n   * no active balances before closing.\n   *\n   * @param program - The Marginfi program instance\n   *\n   * @returns Promise resolving to InstructionsWrapper containing the close account instruction\n   *\n   * @see {@link makeCloseAccountIx} for implementation\n   */\n  async makeCloseAccountIx(program: MarginfiProgram): Promise<InstructionsWrapper> {\n    const ix = await instructions.makeCloseAccountIx(program, {\n      marginfiAccount: this.address,\n      feePayer: this.authority,\n    });\n    return { instructions: [ix], keys: [] };\n  }\n\n  /**\n   * Creates an instruction to update the account's health cache.\n   *\n   * Pulses the health of the account to ensure the cached health values are current.\n   *\n   * @param program - The Marginfi program instance\n   * @param banks - Map of all available banks\n   * @param mandatoryBanks - Banks that must be included in health calculation\n   * @param excludedBanks - Banks to exclude from health calculation\n   *\n   * @returns Promise resolving to InstructionsWrapper containing the pulse health instruction\n   *\n   * @see {@link makePulseHealthIx} for implementation\n   */\n  async makePulseHealthIx(\n    program: MarginfiProgram,\n    banks: Map<string, Bank>,\n    mandatoryBanks: PublicKey[],\n    excludedBanks: PublicKey[]\n  ) {\n    return makePulseHealthIx(program, this, banks, mandatoryBanks, excludedBanks);\n  }\n\n  /**\n   * Computes which banks will be active after executing the given instructions.\n   *\n   * Analyzes transaction instructions to determine which banks will have active\n   * balances, without making CPI calls.\n   *\n   * @param program - The Marginfi program instance\n   * @param instructions - Transaction instructions to analyze\n   *\n   * @returns Array of PublicKeys for banks that will be active\n   *\n   * @see {@link computeProjectedActiveBanksNoCpi} for implementation\n   */\n  computeProjectedActiveBanksNoCpi(\n    program: MarginfiProgram,\n    instructions: TransactionInstruction[]\n  ): PublicKey[] {\n    return computeProjectedActiveBanksNoCpi({ account: this, instructions, program });\n  }\n\n  /**\n   * Computes projected active balances after executing the given instructions.\n   *\n   * Simulates the effect of instructions on account balances without making CPI calls.\n   * Returns the projected balances and which banks will be impacted.\n   *\n   * @param program - The Marginfi program instance\n   * @param instructions - Transaction instructions to simulate\n   * @param bankMap - Map of all available banks\n   *\n   * @returns Object containing projected balances and impacted banks\n   *\n   * @see {@link computeProjectedActiveBalancesNoCpi} for implementation\n   */\n  computeProjectedActiveBalancesNoCpi(\n    program: MarginfiProgram,\n    instructions: TransactionInstruction[],\n    banksMap: Map<string, BankType>,\n    assetShareValueMultiplierByBank: Map<string, BigNumber>\n  ): {\n    projectedBalances: Balance[];\n    impactedAssetsBanks: string[];\n    impactedLiabilityBanks: string[];\n  } {\n    const { projectedBalances, ...rest } = computeProjectedActiveBalancesNoCpi({\n      account: this,\n      instructions,\n      program,\n      banksMap,\n      assetShareValueMultiplierByBank,\n    });\n\n    return {\n      projectedBalances: projectedBalances.map(Balance.fromBalanceType),\n      ...rest,\n    };\n  }\n\n  /**\n   * Wraps an instruction with SOL wrapping and unwrapping instructions.\n   *\n   * Useful for instructions that need native SOL to be converted to wSOL.\n   * Automatically unwraps wSOL back to SOL after the instruction executes.\n   *\n   * @param ix - The instruction to wrap\n   * @param amount - The amount of SOL to wrap (defaults to 0)\n   *\n   * @returns Array of instructions: [wrap SOL, original instruction, unwrap SOL]\n   *\n   * @see {@link makeWrapSolIxs} and {@link makeUnwrapSolIx} for wrap/unwrap implementation\n   */\n  wrapInstructionForWSol(\n    ix: TransactionInstruction,\n    amount: Amount = new BigNumber(0)\n  ): TransactionInstruction[] {\n    return [\n      ...makeWrapSolIxs(this.authority, new BigNumber(amount)),\n      ix,\n      makeUnwrapSolIx(this.authority),\n    ];\n  }\n\n  /**\n   * Creates a loop transaction to leverage a position.\n   *\n   * A loop transaction:\n   * 1. Deposits initial collateral (if in DEPOSIT mode)\n   * 2. Borrows assets via flashloan\n   * 3. Swaps borrowed assets to deposit asset (via Jupiter)\n   * 4. Deposits swapped assets as additional collateral\n   *\n   * This creates a leveraged position by recursively depositing and borrowing.\n   *\n   * @param params - Loop transaction parameters\n   * @param params.connection - Solana connection instance\n   * @param params.oraclePrices - Map of current oracle prices\n   * @param params.depositOpts - Deposit configuration (bank, amount, mode)\n   * @param params.borrowOpts - Borrow configuration (bank, amount)\n   * @param params.swapOpts - Swap configuration (venue, slippage, fees)\n   * @param params.addressLookupTableAccounts - Address lookup tables\n   * @param params.overrideInferAccounts - Optional account overrides\n   * @param params.additionalIxs - Additional instructions to include\n   * @param params.crossbarUrl - Crossbar URL for oracle updates\n   *\n   * @returns Object containing transactions array, action index, and swap quote\n   *\n   * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n   *\n   * @see {@link makeLoopTx} for detailed implementation\n   */\n  async makeLoopTx(params: Omit<MakeLoopTxParams, \"marginfiAccount\">): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    return makeLoopTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Atomically move a selected set of positions from this account to a destination account\n   * (same authority, same group) using flashloans, auto-splitting across transactions as needed.\n   *\n   * @see {@link makeTransferPositionsTx} for detailed implementation\n   */\n  async makeTransferPositionsTx(\n    params: Omit<MakeTransferPositionsTxParams, \"marginfiAccount\">\n  ): Promise<TransferPositionsResult> {\n    return makeTransferPositionsTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a loop transaction with a transparent bridged (double-hop) fallback.\n   *\n   * One call: tries the direct {@link makeLoopTx} first; if its borrow→deposit swap can't fit one\n   * transaction (size / account-locks) or has no route, it loops the deposit asset against a\n   * value-equivalent borrow of a high-liquidity bridge token, then debt-swaps the bridge debt to\n   * the requested borrow asset — both legs composed into ONE atomic Jito bundle.\n   *\n   * Bridge candidates default to USDC → wSOL → USDT and can be reordered/overridden via\n   * `params.bridgeOpts.bridgeCandidateMints`; `bridgeOpts` also accepts known token programs (skips RPC\n   * lookups), a bundle-size ceiling, and an abort signal. `result.bridgeMint` is set only when the\n   * bridged path was used.\n   *\n   * Intended for existing accounts — a fresh account's loop fits the direct path, so flows that\n   * create the account in the same action should call {@link makeLoopTx} directly.\n   *\n   * @param params - Loop transaction parameters plus optional `bridgeOpts`\n   * @returns Object containing transactions, action index, merged swap quote, and the bridge mint\n   *\n   * @see {@link makeBridgedLoopTx} for detailed implementation\n   */\n  async makeBridgedLoopTx(\n    params: Omit<MakeBridgedLoopTxParams, \"marginfiAccount\">\n  ): Promise<BridgedTxResult> {\n    return makeBridgedLoopTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a collateral-swap transaction with a transparent bridged (double-hop) fallback.\n   *\n   * One call: tries the direct {@link makeSwapCollateralTx} first; if the swap `A → C` can't fit\n   * one transaction or has no route, it decomposes into `A → bridge` + `bridge → C` through a\n   * high-liquidity bridge collateral, both legs composed into ONE atomic Jito bundle. See\n   * {@link makeBridgedLoopTx} for the `bridgeOpts` knobs.\n   *\n   * @param params - Swap collateral transaction parameters plus optional `bridgeOpts`\n   * @returns Object containing transactions, action index, merged swap quote, and the bridge mint\n   *\n   * @see {@link makeBridgedSwapCollateralTx} for detailed implementation\n   */\n  async makeBridgedSwapCollateralTx(\n    params: Omit<MakeBridgedSwapCollateralTxParams, \"marginfiAccount\">\n  ): Promise<BridgedTxResult> {\n    return makeBridgedSwapCollateralTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a debt-swap transaction with a transparent bridged (double-hop) fallback.\n   *\n   * One call: tries the direct {@link makeSwapDebtTx} first; if the swap `A → C` can't fit one\n   * transaction or has no route, the first leg repays A by borrowing a bridge token and the second\n   * leg repays exactly that bridge debt while borrowing C — both legs composed into ONE atomic\n   * Jito bundle. See {@link makeBridgedLoopTx} for the `bridgeOpts` knobs.\n   *\n   * @param params - Swap debt transaction parameters plus optional `bridgeOpts`\n   * @returns Object containing transactions, action index, merged swap quote, and the bridge mint\n   *\n   * @see {@link makeBridgedSwapDebtTx} for detailed implementation\n   */\n  async makeBridgedSwapDebtTx(\n    params: Omit<MakeBridgedSwapDebtTxParams, \"marginfiAccount\">\n  ): Promise<BridgedTxResult> {\n    return makeBridgedSwapDebtTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a transaction to repay debt using collateral.\n   *\n   * A repay with collateral transaction:\n   * 1. Withdraws collateral from the account via flashloan\n   * 2. Swaps collateral to debt asset (via Jupiter)\n   * 3. Repays the debt with swapped assets\n   *\n   * This allows users to close or reduce positions without external funds.\n   *\n   * @param params - Repay with collateral transaction parameters\n   * @param params.connection - Solana connection instance\n   * @param params.oraclePrices - Map of current oracle prices\n   * @param params.withdrawOpts - Withdraw configuration (bank, amount)\n   * @param params.repayOpts - Repay configuration (bank, optional amount)\n   * @param params.swapOpts - Swap configuration (venue, slippage, fees)\n   * @param params.addressLookupTableAccounts - Address lookup tables\n   * @param params.overrideInferAccounts - Optional account overrides\n   * @param params.additionalIxs - Additional instructions to include\n   * @param params.crossbarUrl - Crossbar URL for oracle updates\n   *\n   * @returns Object containing transactions array, action index, and swap details\n   *\n   * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n   * @throws {TransactionBuildingError} If Kamino reserve not found\n   *\n   * @see {@link makeRepayWithCollatTx} for detailed implementation\n   */\n  async makeRepayWithCollatTx(\n    params: Omit<MakeRepayWithCollatTxParams, \"marginfiAccount\">\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    swapQuote: SwapQuoteResult | undefined;\n    amountToRepay: number;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    return makeRepayWithCollatTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a transaction to swap one collateral position to another using a flash loan.\n   *\n   * A swap collateral transaction:\n   * 1. Withdraws existing collateral via flash loan\n   * 2. Swaps collateral to new asset (via Jupiter)\n   * 3. Deposits swapped assets as new collateral\n   *\n   * This allows users to change their collateral type (e.g., JitoSOL -> mSOL) without\n   * withdrawing and affecting their health during the swap.\n   *\n   * @param params - Swap collateral transaction parameters\n   * @param params.connection - Solana connection instance\n   * @param params.oraclePrices - Map of current oracle prices\n   * @param params.withdrawOpts - Withdraw configuration (bank, amount, tokenProgram)\n   * @param params.depositOpts - Deposit configuration (bank, tokenProgram)\n   * @param params.swapOpts - Swap configuration (venue, slippage, fees)\n   * @param params.addressLookupTableAccounts - Address lookup tables\n   * @param params.overrideInferAccounts - Optional account overrides\n   * @param params.additionalIxs - Additional instructions to include\n   * @param params.crossbarUrl - Crossbar URL for oracle updates\n   *\n   * @returns Object containing transactions array, action index, and swap quote\n   *\n   * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n   * @throws {TransactionBuildingError} If Kamino reserve not found\n   *\n   * @see {@link makeSwapCollateralTx} for detailed implementation\n   */\n  async makeSwapCollateralTx(params: Omit<MakeSwapCollateralTxParams, \"marginfiAccount\">): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    return makeSwapCollateralTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a transaction to roll a matured Exponent PT collateral position into its\n   * next-maturity PT, in one flash-loan-wrapped bundle\n   * (withdraw PT_old → `wrapper_merge` to base → swap-engine buy PT_new → deposit).\n   * See {@link makeRollPtTx}.\n   *\n   * @param params - Roll-PT parameters (`withdrawOpts`/`depositOpts`/`swapOpts`/`rollOpts`).\n   */\n  async makeRollPtTx(params: Omit<MakeRollPtTxParams, \"marginfiAccount\">): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n  }> {\n    return makeRollPtTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a transaction to swap one debt position to another using a flash loan.\n   *\n   * A swap debt transaction:\n   * 1. Borrows new asset via flash loan (new debt)\n   * 2. Swaps new asset to old debt asset (via Jupiter)\n   * 3. Repays old debt with swapped assets\n   *\n   * This allows users to change their debt type (e.g., USDC debt -> SOL debt) without\n   * repaying and affecting their health during the swap.\n   *\n   * @param params - Swap debt transaction parameters\n   * @param params.connection - Solana connection instance\n   * @param params.oraclePrices - Map of current oracle prices\n   * @param params.repayOpts - Repay configuration (bank, amount, tokenProgram)\n   * @param params.borrowOpts - Borrow configuration (bank, tokenProgram)\n   * @param params.swapOpts - Swap configuration (venue, slippage, fees)\n   * @param params.addressLookupTableAccounts - Address lookup tables\n   * @param params.overrideInferAccounts - Optional account overrides\n   * @param params.additionalIxs - Additional instructions to include\n   * @param params.crossbarUrl - Crossbar URL for oracle updates\n   *\n   * @returns Object containing transactions array, action index, and swap quote\n   *\n   * @throws {TransactionBuildingError} If swap exceeds transaction size limits\n   *\n   * @see {@link makeSwapDebtTx} for detailed implementation\n   */\n  async makeSwapDebtTx(params: Omit<MakeSwapDebtTxParams, \"marginfiAccount\">): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    return makeSwapDebtTx({\n      ...params,\n      marginfiAccount: this,\n      overrideInferAccounts: {\n        authority: this.authority,\n        group: this.group,\n        ...params.overrideInferAccounts,\n      },\n    });\n  }\n\n  /**\n   * Creates a deposit transaction.\n   *\n   * @param params - Parameters for the deposit transaction\n   * @returns Promise resolving to an ExtendedTransaction\n   *\n   * @see {@link makeDepositTx} for detailed implementation\n   */\n  async makeDepositTx(\n    params: Omit<MakeDepositTxParams, \"accountAddress\" | \"authority\" | \"group\">\n  ): Promise<ExtendedTransaction> {\n    return makeDepositTx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n      group: this.group,\n    });\n  }\n\n  /**\n   * Creates a Drift deposit transaction.\n   *\n   * @param params - Parameters for the Drift deposit transaction\n   * @returns Promise resolving to an ExtendedV0Transaction\n   *\n   * @see {@link makeDriftDepositTx} for detailed implementation\n   */\n  async makeDriftDepositTx(\n    params: Omit<MakeDriftDepositTxParams, \"accountAddress\" | \"authority\" | \"group\">\n  ): Promise<ExtendedV0Transaction> {\n    return makeDriftDepositTx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n      group: this.group,\n    });\n  }\n\n  /**\n   * Creates a Kamino deposit transaction.\n   *\n   * @param params - Parameters for the Kamino deposit transaction\n   * @returns Promise resolving to an ExtendedV0Transaction\n   *\n   * @see {@link makeKaminoDepositTx} for detailed implementation\n   */\n  async makeKaminoDepositTx(\n    params: Omit<MakeKaminoDepositTxParams, \"accountAddress\" | \"authority\" | \"group\">\n  ): Promise<ExtendedV0Transaction> {\n    return makeKaminoDepositTx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n      group: this.group,\n    });\n  }\n\n  /**\n   * Creates a borrow transaction.\n   *\n   * @param params - Parameters for the borrow transaction\n   * @returns Promise resolving to a TransactionBuilderResult\n   *\n   * @see {@link makeBorrowTx} for detailed implementation\n   */\n  async makeBorrowTx(\n    params: Omit<MakeBorrowTxParams, \"marginfiAccount\">\n  ): Promise<TransactionBuilderResult> {\n    return makeBorrowTx({\n      ...params,\n      marginfiAccount: this,\n      opts: {\n        ...params.opts,\n        overrideInferAccounts: {\n          authority: this.authority,\n          ...params.opts?.overrideInferAccounts,\n        },\n      },\n    });\n  }\n\n  /**\n   * Creates a repay transaction.\n   *\n   * @param params - Parameters for the repay transaction\n   * @returns Promise resolving to an ExtendedTransaction\n   *\n   * @see {@link makeRepayTx} for detailed implementation\n   */\n  async makeRepayTx(\n    params: Omit<MakeRepayTxParams, \"accountAddress\" | \"authority\">\n  ): Promise<ExtendedTransaction> {\n    return makeRepayTx({\n      ...params,\n      accountAddress: this.address,\n      authority: this.authority,\n    });\n  }\n\n  /**\n   * Creates a withdraw transaction.\n   *\n   * @param params - Parameters for the withdraw transaction\n   * @returns Promise resolving to a TransactionBuilderResult\n   *\n   * @see {@link makeWithdrawTx} for detailed implementation\n   */\n  async makeWithdrawTx(\n    params: Omit<MakeWithdrawTxParams, \"marginfiAccount\">\n  ): Promise<TransactionBuilderResult> {\n    return makeWithdrawTx({\n      ...params,\n      marginfiAccount: this,\n      opts: {\n        ...params.opts,\n        overrideInferAccounts: {\n          authority: this.authority,\n          group: this.group,\n          ...params.opts?.overrideInferAccounts,\n        },\n      },\n    });\n  }\n\n  /**\n   * Creates a Drift withdraw transaction.\n   *\n   * @param params - Parameters for the Drift withdraw transaction\n   * @returns Promise resolving to an ExtendedV0Transaction\n   *\n   * @see {@link makeDriftWithdrawTx} for detailed implementation\n   */\n  async makeDriftWithdrawTx(\n    params: Omit<MakeDriftWithdrawTxParams, \"marginfiAccount\">\n  ): Promise<TransactionBuilderResult> {\n    return makeDriftWithdrawTx({\n      ...params,\n      marginfiAccount: this,\n      opts: {\n        ...params.opts,\n        overrideInferAccounts: {\n          authority: this.authority,\n          group: this.group,\n          ...params.opts?.overrideInferAccounts,\n        },\n      },\n    });\n  }\n\n  /**\n   * Creates a Kamino withdraw transaction.\n   *\n   * @param params - Parameters for the Kamino withdraw transaction\n   * @returns Promise resolving to a TransactionBuilderResult\n   *\n   * @see {@link makeKaminoWithdrawTx} for detailed implementation\n   */\n  async makeKaminoWithdrawTx(\n    params: Omit<MakeKaminoWithdrawTxParams, \"marginfiAccount\">\n  ): Promise<TransactionBuilderResult> {\n    return makeKaminoWithdrawTx({\n      ...params,\n      marginfiAccount: this,\n      opts: {\n        ...params.opts,\n        overrideInferAccounts: {\n          authority: this.authority,\n          group: this.group,\n          ...params.opts?.overrideInferAccounts,\n        },\n      },\n    });\n  }\n\n  /**\n   * Creates a flash loan transaction.\n   *\n   * @param params - Parameters for the flash loan transaction\n   * @returns Promise resolving to flash loan transaction details\n   *\n   * @see {@link makeFlashLoanTx} for detailed implementation\n   */\n  async makeFlashLoanTx(params: Omit<MakeFlashLoanTxParams, \"marginfiAccount\">) {\n    return makeFlashLoanTx({\n      ...params,\n      marginfiAccount: this,\n    });\n  }\n}\n\nexport { MarginfiAccount };\n","import {\n  AddressLookupTableAccount,\n  PublicKey,\n  TransactionInstruction,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { MarginfiAccountType, SwapQuoteResult } from \"../types\";\nimport { computeProjectedActiveBalancesNoCpi } from \"../utils\";\n\nimport { MarginfiAccount } from \"~/models/account\";\nimport { Balance } from \"~/models/balance\";\nimport { BankType } from \"~/services/bank\";\nimport {\n  addTransactionMetadata,\n  decompileV0Transaction,\n  ExtendedV0Transaction,\n  SolanaTransaction,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { MarginfiProgram } from \"~/types\";\n\n/**\n * Bridge / double-hop swaps — the flow-agnostic mechanics.\n *\n * When a single swap op (collateral-swap / debt-swap / loop) can't fit the per-tx limits (1232\n * bytes AND 64 account-locks) for a pair, the caller decomposes it into two ops through a\n * high-liquidity BRIDGE token and submits both as ONE atomic Jito bundle (one merged quote, one\n * signature). This module owns the parts that are identical across flows and encode marginfi\n * internals; per-flow leg building/sizing lives in the one-call `makeBridged*Tx` builders next to\n * their direct builders (`./loop.ts`, `./swap-collateral.ts`, `./swap-debt.ts`), backed by the\n * shared selection/iteration support in `../utils/bridge-routing.utils.ts`, with candidate\n * ordering still injectable per call (product policy).\n *\n * Two non-obvious invariants are baked in here so no caller has to rediscover them:\n *\n *  1. **Cranks cannot be merged across legs.** Each leg's Switchboard On-Demand crank carries oracle\n *     responses signed for a specific slot; combining the first and second legs' crank instructions in\n *     one tx breaks Switchboard consensus verification. So each leg's crank stays its own tx,\n *     immediately before that leg's flashloan. Only setup (ATA-create) txs — which are slot-independent\n *     — are merged. Worst case is 5 txs (`setup, firstLegCrank, firstLegFL, secondLegCrank,\n *     secondLegFL`), Jito's ceiling; the bundle-tip instruction fits in-place in the small setup/crank txs.\n *\n *  2. **The second leg must be built against the first leg's full projected effect.** It touches\n *     collateral/debt the first leg mutates but hasn't executed yet at build time. Built against the raw\n *     account, the second leg's flashloan/crank balance projection either throws (\"balance should be\n *     projected active\") or references a stale bank the first leg already closed (InvalidBankAccount). So\n *     the second leg is built against a clone of the account with the first leg's own instructions\n *     replayed onto it. The bundle is atomic, so at execution this state really holds.\n */\n\n/** Default max txs in a bridged bundle: setup + firstLegCrank + firstLegFL + secondLegCrank + secondLegFL = Jito ceiling. */\nconst MAX_BRIDGED_BUNDLE_TXS = 5;\n\n/** A single built swap leg (its txs + the swap-engine quote). */\nexport interface BridgedSwapLeg {\n  transactions: SolanaTransaction[];\n  quoteResponse: SwapQuoteResult | undefined;\n}\n\nexport interface ComposeBridgedSwapParams {\n  /** The already-built first leg (A → bridge). */\n  firstLeg: BridgedSwapLeg;\n  /**\n   * Build the second leg (bridge → C) against the first leg's projected post-state. The caller sizes it\n   * from the first leg's guaranteed output/borrow (so it can't fail from first-leg slippage) and passes\n   * the supplied `projectedAccount` as the leg's marginfi account.\n   */\n  buildSecondLeg: (projectedAccount: MarginfiAccountType) => Promise<BridgedSwapLeg>;\n  marginfiAccount: MarginfiAccountType;\n  program: MarginfiProgram;\n  banksMap: Map<string, BankType>;\n  /** Per-bank cToken multiplier (1 for vanilla SPL banks) — for the first leg's effect projection. */\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  feePayer: PublicKey;\n  /** Override the bundle-size ceiling (default {@link MAX_BRIDGED_BUNDLE_TXS}). */\n  maxBundleTxs?: number;\n}\n\nexport interface ComposeBridgedSwapResult {\n  /** The atomic bundle: `[mergedSetup?, firstLegCrank?, firstLegFL, secondLegCrank?, secondLegFL]`. */\n  transactions: SolanaTransaction[];\n  /**\n   * The two legs' raw quotes. Presentation (the user-facing merged quote and destination amount) is\n   * flow-specific — collateral maps `firstLeg.in → secondLeg.out`, debt maps `firstLeg.out → secondLeg.in`, etc. — so the\n   * caller builds it (see {@link mergeBridgeQuotes} for the collateral/loop-deposit shape).\n   */\n  firstLegQuote: SwapQuoteResult;\n  secondLegQuote: SwapQuoteResult;\n}\n\ninterface ClassifiedTxs {\n  setups: ExtendedV0Transaction[];\n  cranks: ExtendedV0Transaction[];\n  flashloans: ExtendedV0Transaction[]; // order preserved\n}\n\nfunction classifyTxs(txs: SolanaTransaction[]): ClassifiedTxs {\n  const out: ClassifiedTxs = { setups: [], cranks: [], flashloans: [] };\n  for (const tx of txs as ExtendedV0Transaction[]) {\n    if (tx.type === TransactionType.CREATE_ATA) out.setups.push(tx);\n    else if (tx.type === TransactionType.CRANK) out.cranks.push(tx);\n    else out.flashloans.push(tx); // FLASHLOAN / LOOP / REPAY_COLLAT / …\n  }\n  return out;\n}\n\n/** Structural identity of an instruction (program + ordered keys + data) — for setup dedupe. */\nfunction ixIdentity(ix: TransactionInstruction): string {\n  const keys = ix.keys.map((k) => k.pubkey.toBase58()).join(\",\");\n  return `${ix.programId.toBase58()}|${keys}|${Buffer.from(ix.data).toString(\"base64\")}`;\n}\n\n/**\n * Merge both legs' setup (ATA-create) txs into ONE tx: decompile each, concat instructions (dedupe\n * by structural identity — the first and second legs share the bridge ATA-create), union LUTs, recompile. Returns\n * null if the merged instructions don't fit a single tx. (Cranks are NOT merged — see module doc.)\n */\nfunction mergeSetupTxs(\n  txs: ExtendedV0Transaction[],\n  payer: PublicKey,\n  blockhash: string\n): ExtendedV0Transaction | null {\n  if (txs.length === 0) return null;\n  if (txs.length === 1) return txs[0];\n\n  const lutMap = new Map<string, AddressLookupTableAccount>();\n  const seen = new Set<string>();\n  const ixs: TransactionInstruction[] = [];\n  for (const tx of txs) {\n    const luts = tx.addressLookupTables ?? [];\n    luts.forEach((l) => lutMap.set(l.key.toBase58(), l));\n    const msg = decompileV0Transaction(tx as VersionedTransaction, luts);\n    for (const ix of msg.instructions) {\n      const id = ixIdentity(ix);\n      if (seen.has(id)) continue;\n      seen.add(id);\n      ixs.push(ix);\n    }\n  }\n\n  const luts = [...lutMap.values()];\n  const split = splitInstructionsToFitTransactions([], ixs, { blockhash, payerKey: payer, luts });\n  if (split.length !== 1) return null; // merged setup spilled to >1 tx\n  return addTransactionMetadata(split[0], {\n    type: TransactionType.CREATE_ATA,\n    addressLookupTables: luts,\n  }) as ExtendedV0Transaction;\n}\n\n/**\n * Return `account` as it will look AFTER the first leg executes — a clone with the first leg's own\n * instructions replayed onto it (source position removed, bridge position added, using the exact\n * withdraw-all / borrow semantics the first leg used). The second leg must be built against this\n * projected account, not the raw one — see invariant (2) in the module doc.\n */\nfunction projectAccountAfterFirstLeg(\n  account: MarginfiAccountType,\n  firstLegFlashloanTxs: SolanaTransaction[],\n  program: MarginfiProgram,\n  banksMap: Map<string, BankType>,\n  multipliers: Map<string, BigNumber>\n): MarginfiAccountType {\n  const ixs: TransactionInstruction[] = [];\n  for (const tx of firstLegFlashloanTxs as ExtendedV0Transaction[]) {\n    const luts = tx.addressLookupTables ?? [];\n    ixs.push(...decompileV0Transaction(tx as VersionedTransaction, luts).instructions);\n  }\n\n  const { projectedBalances } = computeProjectedActiveBalancesNoCpi({\n    account,\n    instructions: ixs,\n    program,\n    banksMap,\n    assetShareValueMultiplierByBank: multipliers,\n  });\n\n  return new MarginfiAccount(\n    account.address,\n    account.group,\n    account.authority,\n    projectedBalances.map((b) => Balance.fromBalanceType(b)),\n    account.accountFlags,\n    account.emissionsDestinationAccount,\n    account.healthCache\n  );\n}\n\n/**\n * Compose the two legs into one ordered bundle. Setups merge to one tx; cranks stay separate, each\n * immediately before its flashloan. Returns null if the merge spills or the bundle exceeds the cap.\n */\nfunction composeBundle(\n  firstLegTxs: SolanaTransaction[],\n  secondLegTxs: SolanaTransaction[],\n  payer: PublicKey,\n  blockhash: string,\n  maxBundleTxs: number\n): SolanaTransaction[] | null {\n  const c1 = classifyTxs(firstLegTxs);\n  const c2 = classifyTxs(secondLegTxs);\n\n  const mergedSetup = mergeSetupTxs([...c1.setups, ...c2.setups], payer, blockhash);\n  if ([...c1.setups, ...c2.setups].length > 0 && !mergedSetup) return null;\n\n  const result: SolanaTransaction[] = [\n    ...(mergedSetup ? [mergedSetup] : []),\n    ...c1.cranks,\n    ...c1.flashloans, // firstLegFL(s)\n    ...c2.cranks,\n    ...c2.flashloans, // secondLegFL(s)\n  ];\n  if (result.length > maxBundleTxs) return null;\n  return result;\n}\n\n/**\n * Compound two legs' slippage and price-impact into the combined risk of the bridged route. Both are\n * \"fraction of value lost\" quantities, so they compound multiplicatively: `1 - (1 - a)(1 - b)`.\n * Shared by all three merge shapes below.\n */\nfunction compoundQuoteRisk(\n  firstLeg: SwapQuoteResult,\n  secondLeg: SwapQuoteResult\n): { slippageBps: number; priceImpactPct: string | undefined } {\n  const compound = (a?: string, b?: string): string | undefined => {\n    if (a == null && b == null) return undefined;\n    const x = Number(a ?? 0);\n    const y = Number(b ?? 0);\n    return String(1 - (1 - x) * (1 - y));\n  };\n  return {\n    slippageBps: Math.round(\n      (1 - (1 - firstLeg.slippageBps / 10_000) * (1 - secondLeg.slippageBps / 10_000)) * 10_000\n    ),\n    priceImpactPct: compound(firstLeg.priceImpactPct, secondLeg.priceImpactPct),\n  };\n}\n\n/**\n * Merge two leg quotes for the \"in = first-leg input, out = second-leg output\" shape\n * (collateral-swap, loop-deposit): A in → C out, with compounded slippage and price-impact.\n */\nexport function mergeBridgeQuotes(\n  firstLeg: SwapQuoteResult,\n  secondLeg: SwapQuoteResult\n): SwapQuoteResult {\n  return {\n    inAmount: firstLeg.inAmount,\n    outAmount: secondLeg.outAmount,\n    otherAmountThreshold: secondLeg.otherAmountThreshold,\n    ...compoundQuoteRisk(firstLeg, secondLeg),\n    provider: firstLeg.provider,\n  };\n}\n\n/**\n * Merge two leg quotes for a bridged DEBT swap (repay A → borrow bridge, then repay bridge → borrow\n * C). The user-facing quote maps old-debt-repaid (first leg's *output*) → new-debt-borrowed (second\n * leg's *input*).\n */\nexport function mergeBridgeQuotesDebt(\n  firstLeg: SwapQuoteResult,\n  secondLeg: SwapQuoteResult\n): SwapQuoteResult {\n  return {\n    inAmount: firstLeg.outAmount,\n    outAmount: secondLeg.inAmount,\n    otherAmountThreshold: secondLeg.inAmount,\n    ...compoundQuoteRisk(firstLeg, secondLeg),\n    provider: firstLeg.provider,\n  };\n}\n\n/**\n * Merge two leg quotes for a bridged LOOP (loop-deposit borrowing the bridge, then debt-swap bridge\n * → X). The user-facing quote maps new-debt-borrowed (second leg's *input*) → collateral-deposited\n * (first leg's *output*).\n */\nexport function mergeBridgeQuotesLoop(\n  firstLeg: SwapQuoteResult,\n  secondLeg: SwapQuoteResult\n): SwapQuoteResult {\n  return {\n    inAmount: secondLeg.inAmount,\n    outAmount: firstLeg.outAmount,\n    otherAmountThreshold: firstLeg.otherAmountThreshold,\n    ...compoundQuoteRisk(firstLeg, secondLeg),\n    provider: firstLeg.provider,\n  };\n}\n\n/** A throwaway blockhash for re-compiling merged setup txs (rewritten at submission). */\nfunction blockhashOf(leg: BridgedSwapLeg): string {\n  const tx = leg.transactions[0] as ExtendedV0Transaction | undefined;\n  return tx ? tx.message.recentBlockhash : PublicKey.default.toBase58();\n}\n\n/**\n * Compose an already-built first leg and a caller-built second leg into one atomic bridged-swap\n * bundle. Owns the flow-agnostic mechanics — first-leg-effect projection, separate-crank composition, and\n * quote merging (see module doc for the invariants). Returns null if the second leg can't be quoted or the\n * bundle doesn't fit; the caller treats that as \"this bridge candidate didn't work, try the next\".\n */\nexport async function composeBridgedSwap(\n  params: ComposeBridgedSwapParams\n): Promise<ComposeBridgedSwapResult | null> {\n  const {\n    firstLeg,\n    buildSecondLeg,\n    marginfiAccount,\n    program,\n    banksMap,\n    assetShareValueMultiplierByBank,\n    feePayer,\n    maxBundleTxs = MAX_BRIDGED_BUNDLE_TXS,\n  } = params;\n\n  if (!firstLeg.quoteResponse) return null;\n\n  const projectedAccount = projectAccountAfterFirstLeg(\n    marginfiAccount,\n    classifyTxs(firstLeg.transactions).flashloans,\n    program,\n    banksMap,\n    assetShareValueMultiplierByBank\n  );\n\n  const secondLeg = await buildSecondLeg(projectedAccount);\n  if (!secondLeg.quoteResponse) return null;\n\n  const transactions = composeBundle(\n    firstLeg.transactions,\n    secondLeg.transactions,\n    feePayer,\n    blockhashOf(firstLeg),\n    maxBundleTxs\n  );\n  if (!transactions) return null;\n\n  return {\n    transactions,\n    firstLegQuote: firstLeg.quoteResponse,\n    secondLegQuote: secondLeg.quoteResponse,\n  };\n}\n","import { ComputeBudgetProgram, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\n\nimport {\n  computeBorrowEstimateForRepay,\n  runSwapEngine,\n  swapEngineProvidersFromOpts,\n  swapEngineQuoteFieldsFromOpts,\n} from \"../services/swap-engine\";\nimport { MakeSwapDebtTxParams, SwapQuoteResult } from \"../types\";\nimport {\n  isWholePosition,\n  computeFlashloanSwapConstraints,\n  compileFlashloanPrecheck,\n  BridgeOpts,\n  BridgedTxResult,\n  resolveTokenProgramForMint,\n  selectSwapBridges,\n  sharedBridgeLegContext,\n  tryBridgeCandidates,\n} from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeBorrowIx } from \"./borrow\";\nimport { composeBridgedSwap, mergeBridgeQuotesDebt } from \"./bridge-swap\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport { makeRepayIx } from \"./repay\";\n\nimport { MAX_TX_SIZE, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { isDecomposableSwapError, TransactionBuildingError } from \"~/errors\";\nimport { BankType } from \"~/services/bank\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTxSize,\n  getTotalAccountKeys,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  TOKEN_2022_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n} from \"~/vendor/spl\";\n\n/**\n * Creates transactions to swap one debt position to another using a flash loan.\n *\n * This allows users to change their debt type (e.g., USDC debt -> SOL debt) without\n * repaying and affecting their health during the swap.\n *\n * @example\n * const { transactions, actionTxIndex, quoteResponse } = await makeSwapDebtTx({\n *   program,\n *   marginfiAccount,\n *   connection,\n *   bankMap,\n *   oraclePrices,\n *   repayOpts: { totalPositionAmount: 100, repayBank: usdcBank, tokenProgram },\n *   borrowOpts: { borrowBank: solBank, tokenProgram },\n *   swapOpts: { swapConfig: { provider: SwapProvider.JUPITER, slippageMode: \"DYNAMIC\", slippageBps: 50, platformFeeBps: 0 } },\n *   // ...\n * });\n */\nexport async function makeSwapDebtTx(params: MakeSwapDebtTxParams): Promise<{\n  transactions: ExtendedV0Transaction[];\n  actionTxIndex: number;\n  quoteResponse: SwapQuoteResult | undefined;\n  /** true → send as ONE atomic Jito bundle (integration refreshes go stale within a slot);\n   *  false → sequential sends are safe (cranked oracles allow ≥ ~1 min staleness). */\n  mustBeAtomicBundle: boolean;\n}> {\n  const {\n    program,\n    marginfiAccount,\n    connection,\n    bankMap,\n    oraclePrices,\n    repayOpts,\n    borrowOpts,\n    bankMetadataMap,\n    assetShareValueMultiplierByBank,\n    addressLookupTableAccounts,\n    crossbarUrl,\n    additionalIxs = [],\n  } = params;\n\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: marginfiAccount.authority,\n    tokens: [\n      { mint: repayOpts.repayBank.mint, tokenProgram: repayOpts.tokenProgram },\n      { mint: borrowOpts.borrowBank.mint, tokenProgram: borrowOpts.tokenProgram },\n    ],\n  });\n\n  // No jup/drift exclusions here; kamino has no cpi so repay and borrow banks are\n  // included in the refresh\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    marginfiAccount,\n    bankMap,\n    [],\n    bankMetadataMap,\n    [repayOpts.repayBank.address, borrowOpts.borrowBank.address]\n  );\n\n  const { flashloanTx, setupInstructions, swapQuote, borrowIxs, repayIxs } =\n    await buildSwapDebtFlashloanTx({\n      ...params,\n      blockhash,\n    });\n\n  // Filter Jupiter setup instructions to avoid duplicates with our setup\n  const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n    // Filter out compute budget instructions\n    if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n      return false;\n    }\n\n    if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n      // Key 3 is always mint in create ATA instruction\n      const mintKey = ix.keys[3]?.pubkey;\n\n      if (\n        mintKey?.equals(repayOpts.repayBank.mint) ||\n        mintKey?.equals(borrowOpts.borrowBank.mint)\n      ) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n\n  setupIxs.push(...jupiterSetupInstructions);\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    instructions: [...borrowIxs.instructions, ...repayIxs.instructions],\n    program,\n    connection,\n    crossbarUrl,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  // If ATAs, additional instructions, or refreshes are needed, add them\n  if (setupIxs.length > 0 || refreshIntegrationIxs.instructions.length > 0) {\n    const ixs = [...additionalIxs, ...setupIxs, ...refreshIntegrationIxs.instructions];\n    const txs = splitInstructionsToFitTransactions([], ixs, {\n      blockhash,\n      payerKey: marginfiAccount.authority,\n      luts: addressLookupTableAccounts ?? [],\n    });\n\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: addressLookupTableAccounts,\n        })\n      )\n    );\n  }\n\n  // If crank is needed, add it\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n\n  return {\n    transactions,\n    actionTxIndex: transactions.length - 1,\n    quoteResponse: swapQuote,\n    mustBeAtomicBundle: refreshIntegrationIxs.instructions.length > 0,\n  };\n}\n\nasync function buildSwapDebtFlashloanTx({\n  program,\n  marginfiAccount,\n  bankMap,\n  repayOpts,\n  borrowOpts,\n  swapOpts,\n  bankMetadataMap,\n  addressLookupTableAccounts,\n  connection,\n  overrideInferAccounts,\n  blockhash,\n  swapEngineRunner,\n}: MakeSwapDebtTxParams & { blockhash: string }) {\n  const {\n    repayBank,\n    tokenProgram: repayTokenProgram,\n    totalPositionAmount,\n    repayAmount,\n  } = repayOpts;\n  const { borrowBank, tokenProgram: borrowTokenProgram } = borrowOpts;\n\n  // Validate and clamp repayAmount\n  if (repayAmount !== undefined && repayAmount <= 0) {\n    throw new Error(\"repayAmount must be greater than 0\");\n  }\n\n  // Use repayAmount if provided, otherwise use totalPositionAmount (full swap)\n  // Clamp to totalPositionAmount to prevent repaying more than owed\n  const actualRepayAmount = Math.min(repayAmount ?? totalPositionAmount, totalPositionAmount);\n\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  const destinationTokenAccount = getAssociatedTokenAddressSync(\n    repayBank.mint,\n    marginfiAccount.authority,\n    true,\n    repayTokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n  );\n\n  // Step 1: size the borrow from a market-price calculation — never a provider\n  // ExactOut quote (Jupiter Router /build is ExactIn-only, and provider ExactOut\n  // routes are unreliable). See computeBorrowEstimateForRepay for the buffering.\n  const estimatedBorrowAmount = computeBorrowEstimateForRepay({\n    repayTargetUi: actualRepayAmount,\n    repayMarketPrice: repayOpts.marketPrice,\n    borrowMarketPrice: borrowOpts.marketPrice,\n    slippageBps: swapOpts.swapConfig?.slippageBps,\n    isRepayAll: actualRepayAmount >= totalPositionAmount,\n  });\n\n  const swapConstraints = await computeFlashloanSwapConstraints({\n    program,\n    marginfiAccount,\n    bankMap,\n    bankMetadataMap,\n    addressLookupTableAccounts: addressLookupTableAccounts ?? [],\n    primaryIx: { type: \"borrow\", bank: borrowBank, tokenProgram: borrowTokenProgram },\n    secondaryIx: { type: \"repay\", bank: repayBank, tokenProgram: repayTokenProgram },\n    overrideInferAccounts,\n  });\n\n  // Footprint for engine route sizing: borrow + repay ixs at estimate amounts (their\n  // byte/account footprint is amount-independent). The real ixs are built from the\n  // winning quote below.\n  const footprintBorrowIxs = await makeBorrowIx({\n    program,\n    bank: borrowBank,\n    bankMap,\n    tokenProgram: borrowTokenProgram,\n    amount: estimatedBorrowAmount,\n    marginfiAccount,\n    authority: marginfiAccount.authority,\n    isSync: true,\n    opts: { createAtas: false, wrapAndUnwrapSol: false, overrideInferAccounts },\n  });\n  const footprintRepayIxs = await makeRepayIx({\n    program,\n    bank: repayBank,\n    tokenProgram: repayTokenProgram,\n    amount: actualRepayAmount,\n    accountAddress: marginfiAccount.address,\n    authority: marginfiAccount.authority,\n    isSync: true,\n    opts: { wrapAndUnwrapSol: false, overrideInferAccounts },\n  });\n\n  // Step 2: run the multi-provider engine (ExactIn on the estimated borrow amount).\n  const runEngine = swapEngineRunner ?? runSwapEngine;\n  const engineResult = await runEngine({\n    inputMint: borrowBank.mint.toBase58(),\n    outputMint: repayBank.mint.toBase58(),\n    amountNative: uiToNative(estimatedBorrowAmount, borrowBank.mintDecimals).toNumber(),\n    inputDecimals: borrowBank.mintDecimals,\n    outputDecimals: repayBank.mintDecimals,\n    ...swapEngineQuoteFieldsFromOpts(swapOpts),\n    taker: marginfiAccount.authority,\n    destinationTokenAccount,\n    connection,\n    footprint: {\n      instructions: [\n        ...cuRequestIxs,\n        ...footprintBorrowIxs.instructions,\n        ...footprintRepayIxs.instructions,\n      ],\n      luts: addressLookupTableAccounts ?? [],\n      payer: marginfiAccount.authority,\n      sizeConstraint: swapConstraints.sizeConstraint,\n      maxSwapTotalAccounts: swapConstraints.maxSwapTotalAccounts,\n    },\n    providers: swapEngineProvidersFromOpts(swapOpts),\n  });\n\n  const quoteResponse = engineResult.quoteResponse;\n  const outAmount = nativeToUi(quoteResponse.outAmount, repayBank.mintDecimals);\n  const outAmountThreshold = nativeToUi(quoteResponse.otherAmountThreshold, repayBank.mintDecimals);\n\n  // If output exceeds total debt, cap at total debt (for repayAll)\n  // Otherwise use minimum output with slippage protection\n  const amountToRepay = outAmount > totalPositionAmount ? totalPositionAmount : outAmountThreshold;\n\n  // For ExactIn, inAmount is what we borrow\n  const borrowAmount = nativeToUi(quoteResponse.inAmount, borrowBank.mintDecimals);\n\n  // Build borrow instruction (new debt)\n  const borrowIxs = await makeBorrowIx({\n    program,\n    bank: borrowBank,\n    bankMap,\n    tokenProgram: borrowTokenProgram,\n    amount: borrowAmount,\n    marginfiAccount,\n    authority: marginfiAccount.authority,\n    isSync: true,\n    opts: {\n      createAtas: false,\n      wrapAndUnwrapSol: false,\n      overrideInferAccounts,\n    },\n  });\n\n  // Build repay instruction (old debt)\n  const repayIxs = await makeRepayIx({\n    program,\n    bank: repayBank,\n    tokenProgram: repayTokenProgram,\n    amount: amountToRepay,\n    accountAddress: marginfiAccount.address,\n    authority: marginfiAccount.authority,\n    repayAll: isWholePosition(\n      {\n        amount: totalPositionAmount,\n        isLending: false,\n      },\n      amountToRepay,\n      repayBank.mintDecimals\n    ),\n    isSync: true,\n    opts: {\n      wrapAndUnwrapSol: false,\n      overrideInferAccounts,\n    },\n  });\n\n  const luts = [...(addressLookupTableAccounts ?? []), ...engineResult.swapLuts];\n\n  const allNonFlIxs = [\n    ...cuRequestIxs,\n    ...borrowIxs.instructions,\n    ...engineResult.swapInstructions,\n    ...repayIxs.instructions,\n  ];\n\n  compileFlashloanPrecheck({\n    allIxs: allNonFlIxs,\n    payer: marginfiAccount.authority,\n    luts,\n    sizeConstraint: swapConstraints.sizeConstraint,\n    swapIxCount: engineResult.swapInstructions.length,\n    swapLutCount: engineResult.swapLuts.length,\n  });\n\n  // Wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n  // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n  // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n  const flashloanTx = await makeFlashLoanTx({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    blockhash,\n    ixs: allNonFlIxs,\n    isSync: true,\n  });\n\n  const txSize = getTxSize(flashloanTx);\n  const totalKeys = getTotalAccountKeys(flashloanTx);\n\n  if (txSize > MAX_TX_SIZE || totalKeys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.swapSizeExceededPositionSwap(\n      txSize,\n      totalKeys,\n      swapOpts.swapConfig?.provider\n    );\n  }\n\n  return {\n    flashloanTx,\n    setupInstructions: engineResult.setupInstructions,\n    swapQuote: quoteResponse,\n    borrowIxs,\n    repayIxs,\n  };\n}\n\n// ----------------------------------------------------------------------------\n// Bridged (double-hop) fallback\n// ----------------------------------------------------------------------------\n\nexport interface MakeBridgedSwapDebtTxParams extends MakeSwapDebtTxParams {\n  bridgeOpts?: BridgeOpts;\n}\n\n/**\n * {@link makeSwapDebtTx} with a transparent bridged fallback: if the direct debt swap `A → C`\n * (repay A by borrowing C) can't fit one tx or has no route, decompose it into `A → bridge` +\n * `bridge → C` through a borrowable bridge debt, as one atomic bundle. The first leg repays A by\n * borrowing the bridge; the second leg repays exactly the bridge the first leg borrowed and\n * borrows C.\n */\nexport async function makeBridgedSwapDebtTx(\n  params: MakeBridgedSwapDebtTxParams\n): Promise<BridgedTxResult> {\n  const { bridgeOpts, ...directParams } = params;\n  try {\n    return await makeSwapDebtTx(directParams);\n  } catch (directError) {\n    if (!isDecomposableSwapError(directError)) throw directError;\n    // A pinned route (swapOpts.swapIxs) belongs to the direct pair and cannot be spliced into\n    // SDK-composed legs — never attempt the bridged fallback with one.\n    if (directParams.swapOpts.swapIxs) throw directError;\n    const bridged = await tryBridgedDebtSwap(directParams, bridgeOpts);\n    if (bridged) return bridged;\n    throw directError;\n  }\n}\n\nasync function tryBridgedDebtSwap(\n  params: MakeSwapDebtTxParams,\n  bridgeOpts: BridgeOpts | undefined\n): Promise<BridgedTxResult | null> {\n  const sourceBank = params.repayOpts.repayBank;\n  const destinationBank = params.borrowOpts.borrowBank;\n  const repayAmount = params.repayOpts.repayAmount ?? params.repayOpts.totalPositionAmount;\n  // Bridge legs price via the oracle (0 when missing): caller-supplied market prices only cover\n  // the source/destination pair, never the bridge.\n  const oraclePriceOf = (bank: BankType) =>\n    params.oraclePrices.get(bank.address.toBase58())?.priceRealtime.price.toNumber() ?? 0;\n  // A debt swap BORROWS the bridge → skip any candidate the account is supplying.\n  const { usableBridgeBanks, conflictingBridgeBanks } = selectSwapBridges({\n    sourceMint: sourceBank.mint,\n    destinationMint: destinationBank.mint,\n    bankMap: params.bankMap,\n    marginfiAccount: params.marginfiAccount,\n    bridgeTokenSide: \"borrow\",\n    bridgeCandidateMints: bridgeOpts?.bridgeCandidateMints,\n  });\n\n  const tokenProgramCache = new Map(bridgeOpts?.tokenProgramByMint);\n  return tryBridgeCandidates({\n    usableBridgeBanks,\n    conflictingBridgeBanks,\n    bridgeTokenSide: \"borrow\",\n    abortSignal: bridgeOpts?.abortSignal,\n    buildBundleThroughBridge: async (bridgeBank) => {\n      const bridgeTokenProgram = await resolveTokenProgramForMint(\n        bridgeBank.mint,\n        params.connection,\n        tokenProgramCache\n      );\n\n      // First leg: repay A by borrowing the bridge (debt A → bridge).\n      const firstLeg = await makeSwapDebtTx({\n        ...sharedBridgeLegContext(params),\n        repayOpts: {\n          totalPositionAmount: params.repayOpts.totalPositionAmount,\n          repayAmount,\n          repayBank: sourceBank,\n          tokenProgram: params.repayOpts.tokenProgram,\n          marketPrice: oraclePriceOf(sourceBank),\n        },\n        borrowOpts: {\n          borrowBank: bridgeBank,\n          tokenProgram: bridgeTokenProgram,\n          marketPrice: oraclePriceOf(bridgeBank),\n        },\n      });\n      if (!firstLeg.quoteResponse) return null;\n\n      // The first leg borrowed `inAmount` of the bridge (its swap input). The second leg repays\n      // exactly that bridge debt — exact, so no slippage residual; repay-all clears it (no\n      // partial-leftover deposit conflict).\n      const bridgeBorrowedUi = nativeToUi(firstLeg.quoteResponse.inAmount, bridgeBank.mintDecimals);\n      if (bridgeBorrowedUi <= 0) return null;\n\n      const result = await composeBridgedSwap({\n        firstLeg,\n        buildSecondLeg: (projectedAccount) =>\n          makeSwapDebtTx({\n            ...sharedBridgeLegContext(params),\n            marginfiAccount: projectedAccount,\n            repayOpts: {\n              totalPositionAmount: bridgeBorrowedUi,\n              repayAmount: bridgeBorrowedUi,\n              repayBank: bridgeBank,\n              tokenProgram: bridgeTokenProgram,\n              marketPrice: oraclePriceOf(bridgeBank),\n            },\n            borrowOpts: {\n              borrowBank: destinationBank,\n              tokenProgram: params.borrowOpts.tokenProgram,\n              marketPrice: oraclePriceOf(destinationBank),\n            },\n          }),\n        marginfiAccount: params.marginfiAccount,\n        program: params.program,\n        banksMap: params.bankMap,\n        assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n        feePayer: params.overrideInferAccounts?.authority ?? params.marginfiAccount.authority,\n        maxBundleTxs: bridgeOpts?.maxBundleTxs,\n      });\n      if (!result) return null;\n\n      return {\n        transactions: result.transactions,\n        actionTxIndex: result.transactions.length - 1,\n        quoteResponse: mergeBridgeQuotesDebt(result.firstLegQuote, result.secondLegQuote),\n        bridgeMint: bridgeBank.mint,\n        mustBeAtomicBundle: true,\n      };\n    },\n  });\n}\n","import {\n  ComputeBudgetProgram,\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport {\n  runSwapEngine,\n  swapEngineProvidersFromOpts,\n  swapEngineQuoteFieldsFromOpts,\n} from \"../services/swap-engine\";\nimport { LoopFlashloanDescriptor, MakeLoopTxParams, SwapQuoteResult } from \"../types\";\nimport {\n  computeFlashloanSwapConstraints,\n  compileFlashloanPrecheck,\n  patchDepositAmount,\n  isDepositIx,\n  BridgeOpts,\n  BridgedTxResult,\n  resolvePinnedSwapRoute,\n  resolveTokenProgramForMint,\n  selectSwapBridges,\n  sharedBridgeLegContext,\n  tryBridgeCandidates,\n} from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeBorrowIx } from \"./borrow\";\nimport { composeBridgedSwap, mergeBridgeQuotesLoop } from \"./bridge-swap\";\nimport {\n  makeDepositIx,\n  makeDriftDepositIx,\n  makeJuplendDepositIx,\n  makeKaminoDepositIx,\n} from \"./deposit\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport { makeSwapDebtTx } from \"./swap-debt\";\n\nimport { MAX_TX_SIZE, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { isDecomposableSwapError, TransactionBuildingError } from \"~/errors\";\nimport { AssetTag, BankType } from \"~/services/bank\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTxSize,\n  getTotalAccountKeys,\n  InstructionsWrapper,\n  makeWrapSolIxs,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { uiToNative } from \"~/utils\";\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n  NATIVE_MINT,\n  TOKEN_2022_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\nexport async function makeLoopTx(params: MakeLoopTxParams): Promise<{\n  transactions: ExtendedV0Transaction[];\n  actionTxIndex: number;\n  quoteResponse: SwapQuoteResult | undefined;\n  /** true → send as ONE atomic Jito bundle (integration refreshes go stale within a slot);\n   *  false → sequential sends are safe (cranked oracles allow ≥ ~1 min staleness). */\n  mustBeAtomicBundle: boolean;\n}> {\n  const {\n    program,\n    marginfiAccount,\n    bankMap,\n    depositOpts,\n    borrowOpts,\n    addressLookupTableAccounts,\n    connection,\n    oraclePrices,\n    crossbarUrl,\n    additionalIxs = [],\n  } = params;\n\n  // Get blockhash\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  // Setup Ata's if needed for borrow & deposit tokens\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: marginfiAccount.authority,\n    tokens: [\n      {\n        mint: borrowOpts.borrowBank.mint,\n        tokenProgram: borrowOpts.tokenProgram,\n      },\n      {\n        mint: depositOpts.depositBank.mint,\n        tokenProgram: depositOpts.tokenProgram,\n      },\n    ],\n  });\n\n  // depositBank is excluded from the jup/drift updates (deposit ix updates them via CPI);\n  // kamino has no cpi so borrow and deposit banks are included in the refresh\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    params.marginfiAccount,\n    params.bankMap,\n    [depositOpts.depositBank.address],\n    params.bankMetadataMap,\n    [borrowOpts.borrowBank.address, depositOpts.depositBank.address]\n  );\n\n  const { flashloanTx, setupInstructions, swapQuote, depositIxs, borrowIxs } =\n    await buildLoopFlashloanTx({\n      ...params,\n      blockhash,\n    });\n\n  // Add ata creations needed for routing\n  const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n    // filter out compute budget instructions\n    if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n      return false;\n    }\n\n    if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n      // key 3 is always mint in create ata\n      const mintKey = ix.keys[3]?.pubkey;\n\n      if (\n        mintKey?.equals(depositOpts.depositBank.mint) ||\n        mintKey?.equals(borrowOpts.borrowBank.mint)\n      ) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n\n  setupIxs.push(...jupiterSetupInstructions);\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n    instructions: [...borrowIxs.instructions, ...depositIxs.instructions],\n    program,\n    connection,\n    crossbarUrl,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  // wrap sol if needed\n  if (depositOpts.depositBank.mint.equals(NATIVE_MINT) && depositOpts.inputDepositAmount) {\n    setupIxs.push(\n      ...makeWrapSolIxs(marginfiAccount.authority, new BigNumber(depositOpts.inputDepositAmount))\n    );\n  }\n\n  // if atas are needed, add them\n  if (\n    setupIxs.length > 0 ||\n    additionalIxs.length > 0 ||\n    refreshIntegrationIxs.instructions.length > 0\n  ) {\n    const ixs = [...additionalIxs, ...setupIxs, ...refreshIntegrationIxs.instructions];\n    const txs = splitInstructionsToFitTransactions([], ixs, {\n      blockhash,\n      payerKey: marginfiAccount.authority,\n      luts: addressLookupTableAccounts ?? [],\n    });\n\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: addressLookupTableAccounts,\n        })\n      )\n    );\n  }\n\n  // if crank is needed, add it\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n  return {\n    transactions,\n    actionTxIndex: transactions.length - 1,\n    quoteResponse: swapQuote,\n    mustBeAtomicBundle: refreshIntegrationIxs.instructions.length > 0,\n  };\n}\n\ntype LoopParams = MakeLoopTxParams & { blockhash: string };\n\n/**\n * Orchestrates the deferred-swap loop build:\n *   1. buildLoopNonSwapIxs  — everything except the swap, deposit seeded with a market-price estimate\n *   2. swap engine          — picks a route against the remaining budget (interim adapter for now)\n *   3. finalizeLoopFlashloanTx — splice swap, byte-patch deposit amount, wrap + validate\n */\nasync function buildLoopFlashloanTx(params: LoopParams) {\n  const { depositOpts } = params;\n\n  const { descriptor, swapNeeded, borrowIxs, depositIxs } = await buildLoopNonSwapIxs(params);\n\n  // No swap: deposit amount is already exact, nothing to insert or patch.\n  if (!swapNeeded) {\n    const flashloanTx = await finalizeLoopFlashloanTx({\n      params,\n      innerIxs: descriptor.innerIxs,\n      luts: descriptor.luts,\n      swapIxCount: 0,\n      swapLutCount: 0,\n      sizeConstraint: descriptor.sizeConstraint,\n    });\n\n    return {\n      flashloanTx,\n      setupInstructions: [] as TransactionInstruction[],\n      swapQuote: undefined,\n      borrowIxs,\n      depositIxs,\n    };\n  }\n\n  // Step 2: swap engine — picks the best-priced route that fits the remaining budget.\n  const engineResult = await runLoopSwapEngine(descriptor, params);\n\n  // Step 3: splice the swap ix(s) into the swap slot, then byte-patch the deposit amount\n  // to the real swap output (plus the deposit principal in DEPOSIT mode).\n  const finalIxs = [...descriptor.innerIxs];\n  finalIxs.splice(descriptor.swapSlotIndex, 0, ...engineResult.swapInstructions);\n\n  const principalNative =\n    depositOpts.loopMode === \"DEPOSIT\"\n      ? uiToNative(depositOpts.inputDepositAmount, depositOpts.depositBank.mintDecimals)\n      : new BN(0);\n  const finalDepositNative = engineResult.outputAmountNative.add(principalNative);\n\n  const depositIxPosition = descriptor.depositIxIndex + engineResult.swapInstructions.length;\n  patchDepositAmount(finalIxs[depositIxPosition], finalDepositNative);\n\n  const luts = [...descriptor.luts, ...engineResult.swapLuts];\n\n  const flashloanTx = await finalizeLoopFlashloanTx({\n    params,\n    innerIxs: finalIxs,\n    luts,\n    swapIxCount: engineResult.swapInstructions.length,\n    swapLutCount: engineResult.swapLuts.length,\n    sizeConstraint: descriptor.sizeConstraint,\n  });\n\n  return {\n    flashloanTx,\n    setupInstructions: engineResult.setupInstructions,\n    swapQuote: engineResult.quoteResponse,\n    borrowIxs,\n    depositIxs,\n  };\n}\n\n/**\n * Step 1: build the loop's inner instructions (compute budget, borrow, deposit) without the swap.\n * When a swap is required the deposit is seeded with a no-slippage market-price estimate of the\n * borrow amount; the real amount is patched in after the swap engine runs. Returns a descriptor\n * the engine uses to size its route against the remaining flashloan budget.\n */\nasync function buildLoopNonSwapIxs(params: LoopParams): Promise<{\n  descriptor: LoopFlashloanDescriptor;\n  swapNeeded: boolean;\n  borrowIxs: InstructionsWrapper;\n  depositIxs: InstructionsWrapper;\n}> {\n  const {\n    program,\n    marginfiAccount,\n    bankMap,\n    borrowOpts,\n    depositOpts,\n    bankMetadataMap,\n    addressLookupTableAccounts,\n    overrideInferAccounts,\n  } = params;\n\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  const swapNeeded = !depositOpts.depositBank.mint.equals(borrowOpts.borrowBank.mint);\n\n  const destinationTokenAccount = getAssociatedTokenAddressSync(\n    new PublicKey(depositOpts.depositBank.mint),\n    marginfiAccount.authority,\n    true,\n    depositOpts.tokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n  );\n\n  const principalUi = depositOpts.loopMode === \"DEPOSIT\" ? depositOpts.inputDepositAmount : 0;\n\n  let depositAmountUi: number;\n  let sizeConstraint = 0;\n  let maxSwapTotalAccounts = 0;\n\n  if (!swapNeeded) {\n    // Same mint: borrow and deposit the same token, amount is exact.\n    depositAmountUi = borrowOpts.borrowAmount + principalUi;\n  } else {\n    // Measure how many bytes & accounts remain for swapping (net of begin/end flashloan).\n    const swapConstraints = await computeFlashloanSwapConstraints({\n      program,\n      marginfiAccount,\n      bankMap,\n      bankMetadataMap,\n      addressLookupTableAccounts: addressLookupTableAccounts ?? [],\n      primaryIx: {\n        type: \"borrow\",\n        bank: borrowOpts.borrowBank,\n        tokenProgram: borrowOpts.tokenProgram,\n      },\n      secondaryIx: {\n        type: \"deposit\",\n        bank: depositOpts.depositBank,\n        tokenProgram: depositOpts.tokenProgram,\n      },\n      overrideInferAccounts,\n    });\n    sizeConstraint = swapConstraints.sizeConstraint;\n    maxSwapTotalAccounts = swapConstraints.maxSwapTotalAccounts;\n\n    // No-slippage market-price estimate of the swap output (patched to the real value post-swap).\n    const estimateUi = (borrowOpts.borrowAmount * borrowOpts.marketPrice) / depositOpts.marketPrice;\n    depositAmountUi = estimateUi + principalUi;\n  }\n\n  const borrowIxs = await makeBorrowIx({\n    program,\n    bank: borrowOpts.borrowBank,\n    bankMap,\n    tokenProgram: borrowOpts.tokenProgram,\n    amount: borrowOpts.borrowAmount,\n    marginfiAccount,\n    authority: marginfiAccount.authority,\n    isSync: false,\n    opts: {\n      createAtas: false,\n      wrapAndUnwrapSol: false,\n      overrideInferAccounts,\n    },\n  });\n\n  const depositIxs = await buildDepositIxs(params, depositAmountUi);\n\n  // Inner ix order: [cuRequest..., borrow..., <swap slot>, deposit...]\n  const innerIxsBeforeSwap = [...cuRequestIxs, ...borrowIxs.instructions];\n  const swapSlotIndex = innerIxsBeforeSwap.length;\n  const innerIxs = [...innerIxsBeforeSwap, ...depositIxs.instructions];\n\n  const depositIxIndex = innerIxs.findIndex(isDepositIx);\n  if (depositIxIndex < 0) {\n    throw new Error(\n      \"buildLoopNonSwapIxs: could not locate deposit instruction for amount patching\"\n    );\n  }\n\n  const descriptor: LoopFlashloanDescriptor = {\n    innerIxs,\n    swapSlotIndex,\n    depositIxIndex,\n    inputMint: borrowOpts.borrowBank.mint.toBase58(),\n    outputMint: depositOpts.depositBank.mint.toBase58(),\n    inputDecimals: borrowOpts.borrowBank.mintDecimals,\n    outputDecimals: depositOpts.depositBank.mintDecimals,\n    inAmountNative: uiToNative(\n      borrowOpts.borrowAmount,\n      borrowOpts.borrowBank.mintDecimals\n    ).toNumber(),\n    destinationTokenAccount,\n    sizeConstraint,\n    maxSwapTotalAccounts,\n    luts: addressLookupTableAccounts ?? [],\n  };\n\n  return { descriptor, swapNeeded, borrowIxs, depositIxs };\n}\n\n/** Builds the deposit instruction(s) for the loop's deposit bank at the given UI amount. */\nasync function buildDepositIxs(params: LoopParams, amountUi: number): Promise<InstructionsWrapper> {\n  const { program, marginfiAccount, depositOpts, bankMetadataMap, overrideInferAccounts } = params;\n\n  switch (depositOpts.depositBank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve =\n        bankMetadataMap[depositOpts.depositBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          depositOpts.depositBank.address.toBase58(),\n          depositOpts.depositBank.mint.toBase58(),\n          depositOpts.depositBank.tokenSymbol\n        );\n      }\n\n      return makeKaminoDepositIx({\n        program,\n        bank: depositOpts.depositBank,\n        tokenProgram: depositOpts.tokenProgram,\n        amount: amountUi,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        reserve,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n    }\n\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[depositOpts.depositBank.address.toBase58()]?.driftStates;\n\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          depositOpts.depositBank.address.toBase58(),\n          depositOpts.depositBank.mint.toBase58(),\n          depositOpts.depositBank.tokenSymbol\n        );\n      }\n\n      return makeDriftDepositIx({\n        program,\n        bank: depositOpts.depositBank,\n        tokenProgram: depositOpts.tokenProgram,\n        amount: amountUi,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        driftMarketIndex: driftState.spotMarketState.marketIndex,\n        driftOracle: driftState.spotMarketState.oracle,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n    }\n\n    case AssetTag.JUPLEND: {\n      return makeJuplendDepositIx({\n        program,\n        bank: depositOpts.depositBank,\n        tokenProgram: depositOpts.tokenProgram,\n        amount: amountUi,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n    }\n\n    default: {\n      return makeDepositIx({\n        program,\n        bank: depositOpts.depositBank,\n        tokenProgram: depositOpts.tokenProgram,\n        amount: amountUi,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n    }\n  }\n}\n\n/**\n * Step 2: run the multi-provider swap engine (ExactIn on the borrow amount) and adapt\n * the result to the loop's splice/patch contract. The descriptor's inner ixs + LUTs are\n * the footprint the engine sizes routes against (full-footprint Titan template + fit check).\n */\nasync function runLoopSwapEngine(\n  descriptor: LoopFlashloanDescriptor,\n  params: LoopParams\n): Promise<{\n  swapInstructions: TransactionInstruction[];\n  setupInstructions: TransactionInstruction[];\n  swapLuts: LoopFlashloanDescriptor[\"luts\"];\n  quoteResponse: SwapQuoteResult;\n  outputAmountNative: BN;\n}> {\n  const { connection, swapOpts, marginfiAccount, swapEngineRunner } = params;\n\n  // Caller-pinned route override: the pinned quote's min-out sizes the deposit byte-patch,\n  // exactly like an engine-selected route (validated — a pinned route can never silently\n  // produce a zero-collateral deposit).\n  if (swapOpts.swapIxs) {\n    const pinned = resolvePinnedSwapRoute(swapOpts.swapIxs, descriptor.inAmountNative);\n    return {\n      swapInstructions: pinned.swapInstructions,\n      setupInstructions: pinned.setupInstructions,\n      swapLuts: pinned.lookupTables,\n      quoteResponse: pinned.quoteResponse,\n      outputAmountNative: pinned.outputAmountNative,\n    };\n  }\n\n  const runEngine = swapEngineRunner ?? runSwapEngine;\n  const engineResult = await runEngine({\n    inputMint: descriptor.inputMint,\n    outputMint: descriptor.outputMint,\n    amountNative: descriptor.inAmountNative,\n    inputDecimals: descriptor.inputDecimals,\n    outputDecimals: descriptor.outputDecimals,\n    ...swapEngineQuoteFieldsFromOpts(swapOpts),\n    taker: marginfiAccount.authority,\n    destinationTokenAccount: descriptor.destinationTokenAccount,\n    connection,\n    footprint: {\n      instructions: descriptor.innerIxs,\n      luts: descriptor.luts,\n      payer: marginfiAccount.authority,\n      sizeConstraint: descriptor.sizeConstraint,\n      maxSwapTotalAccounts: descriptor.maxSwapTotalAccounts,\n    },\n    providers: swapEngineProvidersFromOpts(swapOpts),\n  });\n\n  return {\n    swapInstructions: engineResult.swapInstructions,\n    setupInstructions: engineResult.setupInstructions,\n    swapLuts: engineResult.swapLuts,\n    quoteResponse: engineResult.quoteResponse,\n    outputAmountNative: engineResult.outputAmountNative,\n  };\n}\n\n/**\n * Step 3: wrap the assembled inner ixs in a flashloan and validate size/account budget.\n * The flashloan end index is recomputed from the final ix count inside makeFlashLoanTx, so it\n * is correct after swap insertion without any byte patching.\n */\nasync function finalizeLoopFlashloanTx({\n  params,\n  innerIxs,\n  luts,\n  swapIxCount,\n  swapLutCount,\n  sizeConstraint,\n}: {\n  params: LoopParams;\n  innerIxs: TransactionInstruction[];\n  luts: LoopFlashloanDescriptor[\"luts\"];\n  swapIxCount: number;\n  swapLutCount: number;\n  sizeConstraint: number;\n}) {\n  const { program, marginfiAccount, bankMap, swapOpts, blockhash } = params;\n\n  if (swapIxCount > 0) {\n    compileFlashloanPrecheck({\n      allIxs: innerIxs,\n      payer: marginfiAccount.authority,\n      luts,\n      sizeConstraint,\n      swapIxCount,\n      swapLutCount,\n    });\n  }\n\n  // if cuRequestIxs are not present, priority fee ix is needed\n  // wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n  // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n  // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n  const flashloanTx = await makeFlashLoanTx({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    blockhash,\n    ixs: innerIxs,\n  });\n\n  const txSize = getTxSize(flashloanTx);\n  const totalKeys = getTotalAccountKeys(flashloanTx);\n\n  if (txSize > MAX_TX_SIZE || totalKeys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.swapSizeExceededLoop(\n      txSize,\n      totalKeys,\n      swapOpts.swapConfig?.provider\n    );\n  }\n\n  return flashloanTx;\n}\n\n// ----------------------------------------------------------------------------\n// Bridged (double-hop) fallback\n// ----------------------------------------------------------------------------\n\nexport interface MakeBridgedLoopTxParams extends MakeLoopTxParams {\n  bridgeOpts?: BridgeOpts;\n}\n\n/**\n * {@link makeLoopTx} with a transparent bridged fallback: if the direct loop's borrow→deposit swap\n * can't fit one tx or has no route, loop P borrowing a value-equivalent amount of a bridge token,\n * then debt-swap the bridge debt → X, as one atomic bundle.\n *\n * Intended for existing accounts — a fresh account's loop has a minimal footprint and fits the\n * direct path, so callers creating the account in the same flow should call {@link makeLoopTx}\n * directly.\n */\nexport async function makeBridgedLoopTx(params: MakeBridgedLoopTxParams): Promise<BridgedTxResult> {\n  const { bridgeOpts, ...loopParams } = params;\n  try {\n    return await makeLoopTx(loopParams);\n  } catch (directError) {\n    if (!isDecomposableSwapError(directError)) throw directError;\n    // A pinned route (swapOpts.swapIxs) belongs to the direct pair and cannot be spliced into\n    // SDK-composed legs — never attempt the bridged fallback with one.\n    if (loopParams.swapOpts.swapIxs) throw directError;\n    const bridged = await tryBridgedLoop(loopParams, bridgeOpts);\n    if (bridged) return bridged;\n    throw directError;\n  }\n}\n\nasync function tryBridgedLoop(\n  params: MakeLoopTxParams,\n  bridgeOpts: BridgeOpts | undefined\n): Promise<BridgedTxResult | null> {\n  const { depositBank } = params.depositOpts;\n  const { borrowBank } = params.borrowOpts;\n  // A loop BORROWS the bridge → skip any candidate the account is supplying.\n  const { usableBridgeBanks, conflictingBridgeBanks } = selectSwapBridges({\n    sourceMint: depositBank.mint,\n    destinationMint: borrowBank.mint,\n    bankMap: params.bankMap,\n    marginfiAccount: params.marginfiAccount,\n    bridgeTokenSide: \"borrow\",\n    bridgeCandidateMints: bridgeOpts?.bridgeCandidateMints,\n  });\n\n  // Bridge legs price via the oracle (0 when missing): caller-supplied market prices only cover\n  // the source/destination pair, never the bridge.\n  const oraclePriceOf = (bank: BankType) =>\n    params.oraclePrices.get(bank.address.toBase58())?.priceRealtime.price.toNumber() ?? 0;\n\n  const borrowBankPrice = oraclePriceOf(borrowBank);\n  if (borrowBankPrice <= 0) return null;\n\n  const tokenProgramCache = new Map(bridgeOpts?.tokenProgramByMint);\n  return tryBridgeCandidates({\n    usableBridgeBanks,\n    conflictingBridgeBanks,\n    bridgeTokenSide: \"borrow\",\n    abortSignal: bridgeOpts?.abortSignal,\n    buildBundleThroughBridge: async (bridgeBank) => {\n      const bridgeBankPrice = oraclePriceOf(bridgeBank);\n      if (bridgeBankPrice <= 0) return null;\n\n      // Borrow a value-equivalent amount of the bridge instead of X — same leverage / P deposit.\n      const bridgeBorrowUi = (params.borrowOpts.borrowAmount * borrowBankPrice) / bridgeBankPrice;\n      if (bridgeBorrowUi <= 0) return null;\n      const bridgeTokenProgram = await resolveTokenProgramForMint(\n        bridgeBank.mint,\n        params.connection,\n        tokenProgramCache\n      );\n\n      // First leg: loop P borrowing the bridge (borrow bridge, swap bridge→P, deposit P).\n      const firstLeg = await makeLoopTx({\n        ...params,\n        depositOpts: {\n          ...params.depositOpts,\n          marketPrice: oraclePriceOf(depositBank),\n        },\n        borrowOpts: {\n          borrowAmount: bridgeBorrowUi,\n          borrowBank: bridgeBank,\n          tokenProgram: bridgeTokenProgram,\n          marketPrice: bridgeBankPrice,\n        },\n      });\n      if (!firstLeg.quoteResponse) return null;\n\n      const result = await composeBridgedSwap({\n        firstLeg,\n        // Second leg: debt-swap the bridge debt → X (repay exactly the bridge the first leg\n        // borrowed — exact, so no slippage residual; repay-all clears it — and borrow X).\n        buildSecondLeg: (projectedAccount) =>\n          makeSwapDebtTx({\n            ...sharedBridgeLegContext(params),\n            marginfiAccount: projectedAccount,\n            repayOpts: {\n              totalPositionAmount: bridgeBorrowUi,\n              repayAmount: bridgeBorrowUi,\n              repayBank: bridgeBank,\n              tokenProgram: bridgeTokenProgram,\n              marketPrice: bridgeBankPrice,\n            },\n            borrowOpts: {\n              borrowBank,\n              tokenProgram: params.borrowOpts.tokenProgram,\n              marketPrice: borrowBankPrice,\n            },\n          }),\n        marginfiAccount: params.marginfiAccount,\n        program: params.program,\n        banksMap: params.bankMap,\n        assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n        feePayer: params.overrideInferAccounts?.authority ?? params.marginfiAccount.authority,\n        maxBundleTxs: bridgeOpts?.maxBundleTxs,\n      });\n      if (!result) return null; // both legs didn't build / bundle didn't fit — try the next bridge\n\n      return {\n        transactions: result.transactions,\n        actionTxIndex: result.transactions.length - 1,\n        quoteResponse: mergeBridgeQuotesLoop(result.firstLegQuote, result.secondLegQuote),\n        bridgeMint: bridgeBank.mint,\n        mustBeAtomicBundle: true,\n      };\n    },\n  });\n}\n","import {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport {\n  runSwapEngine,\n  swapEngineProvidersFromOpts,\n  swapEngineQuoteFieldsFromOpts,\n} from \"../services/swap-engine\";\nimport { MakeSwapCollateralTxParams, SwapQuoteResult } from \"../types\";\nimport {\n  isWholePosition,\n  computeFlashloanSwapConstraints,\n  compileFlashloanPrecheck,\n  patchDepositAmount,\n  isDepositIx,\n  BridgeOpts,\n  BridgedTxResult,\n  resolveTokenProgramForMint,\n  selectSwapBridges,\n  sharedBridgeLegContext,\n  tryBridgeCandidates,\n} from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { composeBridgedSwap, mergeBridgeQuotes } from \"./bridge-swap\";\nimport {\n  makeDepositIx,\n  makeDriftDepositIx,\n  makeJuplendDepositIx,\n  makeKaminoDepositIx,\n} from \"./deposit\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport {\n  makeDriftWithdrawIx,\n  makeJuplendWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeWithdrawIx,\n} from \"./withdraw\";\n\nimport { MAX_TX_SIZE, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { isDecomposableSwapError, TransactionBuildingError } from \"~/errors\";\nimport { AssetTag } from \"~/services/bank\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTxSize,\n  getTotalAccountKeys,\n  InstructionsWrapper,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  TOKEN_2022_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n} from \"~/vendor/spl\";\n\n/**\n * Creates transactions to swap one collateral position to another using a flash loan.\n *\n * This allows users to change their collateral type (e.g., JitoSOL -> mSOL) without\n * withdrawing and affecting their health during the swap.\n *\n * @example\n * const { transactions, actionTxIndex, quoteResponse } = await makeSwapCollateralTx({\n *   program,\n *   marginfiAccount,\n *   connection,\n *   bankMap,\n *   oraclePrices,\n *   withdrawOpts: { totalPositionAmount: 10, withdrawBank: jitoSolBank, tokenProgram },\n *   depositOpts: { depositBank: mSolBank, tokenProgram },\n *   swapOpts: { swapConfig: { provider: SwapProvider.JUPITER, slippageMode: \"DYNAMIC\", slippageBps: 50, platformFeeBps: 0 } },\n *   // ...\n * });\n */\nexport async function makeSwapCollateralTx(params: MakeSwapCollateralTxParams): Promise<{\n  transactions: ExtendedV0Transaction[];\n  actionTxIndex: number;\n  quoteResponse: SwapQuoteResult | undefined;\n  /** true → send as ONE atomic Jito bundle (integration refreshes go stale within a slot);\n   *  false → sequential sends are safe (cranked oracles allow ≥ ~1 min staleness). */\n  mustBeAtomicBundle: boolean;\n}> {\n  const {\n    program,\n    marginfiAccount,\n    connection,\n    bankMap,\n    oraclePrices,\n    withdrawOpts,\n    depositOpts,\n    bankMetadataMap,\n    assetShareValueMultiplierByBank,\n    addressLookupTableAccounts,\n    crossbarUrl,\n  } = params;\n\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: marginfiAccount.authority,\n    tokens: [\n      { mint: withdrawOpts.withdrawBank.mint, tokenProgram: withdrawOpts.tokenProgram },\n      { mint: depositOpts.depositBank.mint, tokenProgram: depositOpts.tokenProgram },\n    ],\n  });\n\n  // Both banks are excluded from the jup/drift updates (withdraw/deposit ixs update them\n  // via CPI); kamino has no cpi so both banks are included in the refresh instead\n  const refreshIntegrationIxs = makeRefreshIntegrationBanksIxs(\n    marginfiAccount,\n    bankMap,\n    [withdrawOpts.withdrawBank.address, depositOpts.depositBank.address],\n    bankMetadataMap\n  );\n\n  const { flashloanTx, setupInstructions, swapQuote, withdrawIxs, depositIxs } =\n    await buildSwapCollateralFlashloanTx({\n      ...params,\n      blockhash,\n    });\n\n  // Filter Jupiter setup instructions to avoid duplicates with our setup\n  const jupiterSetupInstructions = setupInstructions.filter((ix) => {\n    // Filter out compute budget instructions\n    if (ix.programId.equals(ComputeBudgetProgram.programId)) {\n      return false;\n    }\n\n    if (ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) {\n      // Key 3 is always mint in create ATA instruction\n      const mintKey = ix.keys[3]?.pubkey;\n\n      if (\n        mintKey?.equals(withdrawOpts.withdrawBank.mint) ||\n        mintKey?.equals(depositOpts.depositBank.mint)\n      ) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n\n  setupIxs.push(...jupiterSetupInstructions);\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    instructions: [...withdrawIxs.instructions, ...depositIxs.instructions],\n    program,\n    connection,\n    crossbarUrl,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  // If ATAs, additional instructions, or refreshes are needed, add them\n  if (setupIxs.length > 0 || refreshIntegrationIxs.instructions.length > 0) {\n    const ixs = [...setupIxs, ...refreshIntegrationIxs.instructions];\n    const txs = splitInstructionsToFitTransactions([], ixs, {\n      blockhash,\n      payerKey: marginfiAccount.authority,\n      luts: addressLookupTableAccounts ?? [],\n    });\n\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: addressLookupTableAccounts,\n        })\n      )\n    );\n  }\n\n  // If crank is needed, add it\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n\n  return {\n    transactions,\n    actionTxIndex: transactions.length - 1,\n    quoteResponse: swapQuote,\n    mustBeAtomicBundle: refreshIntegrationIxs.instructions.length > 0,\n  };\n}\n\nasync function buildSwapCollateralFlashloanTx({\n  program,\n  marginfiAccount,\n  bankMap,\n  withdrawOpts,\n  depositOpts,\n  swapOpts,\n  bankMetadataMap,\n  assetShareValueMultiplierByBank,\n  addressLookupTableAccounts,\n  connection,\n  overrideInferAccounts,\n  blockhash,\n  swapEngineRunner,\n}: MakeSwapCollateralTxParams & { blockhash: string }) {\n  const {\n    withdrawBank,\n    tokenProgram: withdrawTokenProgram,\n    totalPositionAmount,\n    withdrawAmount,\n  } = withdrawOpts;\n  const { depositBank, tokenProgram: depositTokenProgram } = depositOpts;\n\n  // Validate and clamp withdrawAmount\n  if (withdrawAmount !== undefined && withdrawAmount <= 0) {\n    throw new Error(\"withdrawAmount must be greater than 0\");\n  }\n\n  // Use withdrawAmount if provided, otherwise use totalPositionAmount (full swap)\n  // Clamp to totalPositionAmount to prevent withdrawing more than exists\n  const actualWithdrawAmount = Math.min(withdrawAmount ?? totalPositionAmount, totalPositionAmount);\n  const isFullWithdraw = isWholePosition(\n    { amount: totalPositionAmount, isLending: true },\n    actualWithdrawAmount,\n    withdrawBank.mintDecimals\n  );\n\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  let swapInstructions: TransactionInstruction[] = [];\n  let setupInstructions: TransactionInstruction[] = [];\n  let swapLookupTables: AddressLookupTableAccount[] = [];\n  let swapQuote: SwapQuoteResult | undefined;\n  let sizeConstraintUsed = 0;\n\n  // Build withdraw instruction\n  let withdrawIxs: InstructionsWrapper;\n\n  switch (withdrawOpts.withdrawBank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve =\n        bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      // Sometimes the ctoken conversion can be off by a few basis points, this accounts for that\n      const multiplier =\n        assetShareValueMultiplierByBank.get(withdrawOpts.withdrawBank.address.toBase58()) ??\n        new BigNumber(1);\n      const adjustedAmount = new BigNumber(actualWithdrawAmount)\n        .div(multiplier)\n        .times(1.0001)\n        .toNumber();\n\n      withdrawIxs = await makeKaminoWithdrawIx({\n        program,\n        bank: withdrawBank,\n        bankMap,\n        tokenProgram: withdrawTokenProgram,\n        cTokenAmount: adjustedAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        reserve,\n        bankMetadataMap,\n        withdrawAll: isFullWithdraw,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.driftStates;\n\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      withdrawIxs = await makeDriftWithdrawIx({\n        program,\n        bank: withdrawOpts.withdrawBank,\n        bankMap,\n        tokenProgram: withdrawOpts.tokenProgram,\n        amount: actualWithdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        driftSpotMarket: driftState.spotMarketState,\n        userRewards: driftState.userRewards,\n        bankMetadataMap,\n        withdrawAll: isFullWithdraw,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n\n    case AssetTag.JUPLEND: {\n      const jupLendState =\n        bankMetadataMap[withdrawOpts.withdrawBank.address.toBase58()]?.jupLendStates;\n\n      if (!jupLendState) {\n        throw TransactionBuildingError.jupLendStateNotFound(\n          withdrawOpts.withdrawBank.address.toBase58(),\n          withdrawOpts.withdrawBank.mint.toBase58(),\n          withdrawOpts.withdrawBank.tokenSymbol\n        );\n      }\n\n      withdrawIxs = await makeJuplendWithdrawIx({\n        program,\n        bank: withdrawBank,\n        bankMap,\n        tokenProgram: withdrawTokenProgram,\n        amount: actualWithdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        jupLendingState: jupLendState.jupLendingState,\n        bankMetadataMap,\n        withdrawAll: isFullWithdraw,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n\n    default: {\n      withdrawIxs = await makeWithdrawIx({\n        program,\n        bank: withdrawBank,\n        bankMap,\n        tokenProgram: withdrawTokenProgram,\n        amount: actualWithdrawAmount,\n        marginfiAccount,\n        authority: marginfiAccount.authority,\n        withdrawAll: isFullWithdraw,\n        bankMetadataMap,\n        isSync: false,\n        opts: {\n          createAtas: false,\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n  }\n\n  // Deferred-swap: when a swap is needed the deposit is seeded with a placeholder amount\n  // (its byte/account footprint is amount-independent) and byte-patched to the real swap\n  // output after the engine runs. Same-mint deposits the exact withdrawn amount.\n  const swapNeeded = !depositBank.mint.equals(withdrawBank.mint);\n  const amountToDeposit = swapNeeded ? 0 : actualWithdrawAmount;\n\n  // Build deposit instruction\n  let depositIxs: InstructionsWrapper;\n\n  switch (depositBank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserve = bankMetadataMap[depositBank.address.toBase58()]?.kaminoStates?.reserveState;\n\n      if (!reserve) {\n        throw TransactionBuildingError.kaminoReserveNotFound(\n          depositBank.address.toBase58(),\n          depositBank.mint.toBase58(),\n          depositBank.tokenSymbol\n        );\n      }\n\n      depositIxs = await makeKaminoDepositIx({\n        program,\n        bank: depositBank,\n        tokenProgram: depositTokenProgram,\n        amount: amountToDeposit,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        reserve,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n    case AssetTag.DRIFT: {\n      const driftState = bankMetadataMap[depositBank.address.toBase58()]?.driftStates;\n\n      if (!driftState) {\n        throw TransactionBuildingError.driftStateNotFound(\n          depositBank.address.toBase58(),\n          depositBank.mint.toBase58(),\n          depositBank.tokenSymbol\n        );\n      }\n\n      const driftMarketIndex = driftState.spotMarketState.marketIndex;\n      const driftOracle = driftState.spotMarketState.oracle;\n\n      depositIxs = await makeDriftDepositIx({\n        program,\n        bank: depositBank,\n        tokenProgram: depositTokenProgram,\n        amount: amountToDeposit,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        driftMarketIndex,\n        driftOracle,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n    case AssetTag.JUPLEND: {\n      depositIxs = await makeJuplendDepositIx({\n        program,\n        bank: depositBank,\n        tokenProgram: depositTokenProgram,\n        amount: amountToDeposit,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n    default: {\n      depositIxs = await makeDepositIx({\n        program,\n        bank: depositBank,\n        tokenProgram: depositTokenProgram,\n        amount: amountToDeposit,\n        accountAddress: marginfiAccount.address,\n        authority: marginfiAccount.authority,\n        group: marginfiAccount.group,\n        opts: {\n          wrapAndUnwrapSol: false,\n          overrideInferAccounts,\n        },\n      });\n      break;\n    }\n  }\n\n  if (swapNeeded) {\n    const destinationTokenAccount = getAssociatedTokenAddressSync(\n      depositBank.mint,\n      marginfiAccount.authority,\n      true,\n      depositTokenProgram.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : undefined\n    );\n\n    const swapConstraints = await computeFlashloanSwapConstraints({\n      program,\n      marginfiAccount,\n      bankMap,\n      bankMetadataMap,\n      addressLookupTableAccounts: addressLookupTableAccounts ?? [],\n      primaryIx: { type: \"withdraw\", bank: withdrawBank, tokenProgram: withdrawTokenProgram },\n      secondaryIx: { type: \"deposit\", bank: depositBank, tokenProgram: depositTokenProgram },\n      overrideInferAccounts,\n    });\n    sizeConstraintUsed = swapConstraints.sizeConstraint;\n\n    const runEngine = swapEngineRunner ?? runSwapEngine;\n    const engineResult = await runEngine({\n      inputMint: withdrawBank.mint.toBase58(),\n      outputMint: depositBank.mint.toBase58(),\n      amountNative: uiToNative(actualWithdrawAmount, withdrawBank.mintDecimals).toNumber(),\n      inputDecimals: withdrawBank.mintDecimals,\n      outputDecimals: depositBank.mintDecimals,\n      ...swapEngineQuoteFieldsFromOpts(swapOpts),\n      taker: marginfiAccount.authority,\n      destinationTokenAccount,\n      connection,\n      footprint: {\n        instructions: [...cuRequestIxs, ...withdrawIxs.instructions, ...depositIxs.instructions],\n        luts: addressLookupTableAccounts ?? [],\n        payer: marginfiAccount.authority,\n        sizeConstraint: swapConstraints.sizeConstraint,\n        maxSwapTotalAccounts: swapConstraints.maxSwapTotalAccounts,\n      },\n      providers: swapEngineProvidersFromOpts(swapOpts),\n    });\n\n    // Patch the seeded deposit to the real (minimum guaranteed) swap output.\n    const depositIxToPatch = depositIxs.instructions.find(isDepositIx);\n    if (!depositIxToPatch) {\n      throw new Error(\"swap-collateral: could not locate deposit instruction for amount patching\");\n    }\n    patchDepositAmount(depositIxToPatch, engineResult.outputAmountNative);\n\n    swapInstructions = engineResult.swapInstructions;\n    setupInstructions = engineResult.setupInstructions;\n    swapLookupTables = engineResult.swapLuts;\n    swapQuote = engineResult.quoteResponse;\n  }\n\n  const luts = [...(addressLookupTableAccounts ?? []), ...swapLookupTables];\n\n  const allNonFlIxs = [\n    ...cuRequestIxs,\n    ...withdrawIxs.instructions,\n    ...swapInstructions,\n    ...depositIxs.instructions,\n  ];\n\n  if (swapInstructions.length > 0) {\n    compileFlashloanPrecheck({\n      allIxs: allNonFlIxs,\n      payer: marginfiAccount.authority,\n      luts,\n      sizeConstraint: sizeConstraintUsed,\n      swapIxCount: swapInstructions.length,\n      swapLutCount: swapLookupTables.length,\n    });\n  }\n\n  // Wallets add a priority fee ix by default breaking the flashloan tx so we need to add a placeholder priority fee ix\n  // docs: https://docs.phantom.app/developer-powertools/solana-priority-fees\n  // Solflare requires you to also include the set compute unit price to avoid transaction rejection on flashloans.\n  const flashloanTx = await makeFlashLoanTx({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    blockhash,\n    ixs: allNonFlIxs,\n    isSync: false,\n  });\n\n  const txSize = getTxSize(flashloanTx);\n  const totalKeys = getTotalAccountKeys(flashloanTx);\n\n  if (txSize > MAX_TX_SIZE || totalKeys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.swapSizeExceededPositionSwap(\n      txSize,\n      totalKeys,\n      swapOpts.swapConfig?.provider\n    );\n  }\n\n  return {\n    flashloanTx,\n    setupInstructions,\n    swapQuote,\n    withdrawIxs,\n    depositIxs,\n  };\n}\n\n// ----------------------------------------------------------------------------\n// Bridged (double-hop) fallback\n// ----------------------------------------------------------------------------\n\nexport interface MakeBridgedSwapCollateralTxParams extends MakeSwapCollateralTxParams {\n  bridgeOpts?: BridgeOpts;\n}\n\n// Headroom (native units) between the second leg's swap input and the first leg's bridge min-out.\n// The swap input must never exceed what the withdraw actually delivers: marginfi share-rounding on\n// the deposit→withdraw round-trip can come back a lamport short, and the UI-number amount\n// round-trip can floor another. A few native units — value-invisible for any real token.\nconst SECOND_LEG_ROUNDING_HEADROOM_NATIVE = 10;\n\n/**\n * {@link makeSwapCollateralTx} with a transparent bridged fallback: if the direct swap `A → C`\n * can't fit one tx or has no route, decompose it into `A → bridge` + `bridge → C` through a\n * high-liquidity bridge collateral, composed into one atomic bundle.\n */\nexport async function makeBridgedSwapCollateralTx(\n  params: MakeBridgedSwapCollateralTxParams\n): Promise<BridgedTxResult> {\n  const { bridgeOpts, ...directParams } = params;\n  try {\n    return await makeSwapCollateralTx(directParams);\n  } catch (directError) {\n    if (!isDecomposableSwapError(directError)) throw directError;\n    // A pinned route (swapOpts.swapIxs) belongs to the direct pair and cannot be spliced into\n    // SDK-composed legs — never attempt the bridged fallback with one.\n    if (directParams.swapOpts.swapIxs) throw directError;\n    const bridged = await tryBridgedCollateralSwap(directParams, bridgeOpts);\n    if (bridged) return bridged;\n    throw directError;\n  }\n}\n\nasync function tryBridgedCollateralSwap(\n  params: MakeSwapCollateralTxParams,\n  bridgeOpts: BridgeOpts | undefined\n): Promise<BridgedTxResult | null> {\n  const sourceBank = params.withdrawOpts.withdrawBank;\n  const destinationBank = params.depositOpts.depositBank;\n  const withdrawAmount =\n    params.withdrawOpts.withdrawAmount ?? params.withdrawOpts.totalPositionAmount;\n  // A collateral swap DEPOSITS the bridge → skip any candidate the account is borrowing.\n  const { usableBridgeBanks, conflictingBridgeBanks } = selectSwapBridges({\n    sourceMint: sourceBank.mint,\n    destinationMint: destinationBank.mint,\n    bankMap: params.bankMap,\n    marginfiAccount: params.marginfiAccount,\n    bridgeTokenSide: \"deposit\",\n    bridgeCandidateMints: bridgeOpts?.bridgeCandidateMints,\n  });\n\n  const tokenProgramCache = new Map(bridgeOpts?.tokenProgramByMint);\n  return tryBridgeCandidates({\n    usableBridgeBanks,\n    conflictingBridgeBanks,\n    bridgeTokenSide: \"deposit\",\n    abortSignal: bridgeOpts?.abortSignal,\n    buildBundleThroughBridge: async (bridgeBank) => {\n      const bridgeTokenProgram = await resolveTokenProgramForMint(\n        bridgeBank.mint,\n        params.connection,\n        tokenProgramCache\n      );\n\n      // First leg: A → bridge (deposits min-out bridge collateral).\n      const firstLeg = await makeSwapCollateralTx({\n        ...sharedBridgeLegContext(params),\n        withdrawOpts: {\n          totalPositionAmount: params.withdrawOpts.totalPositionAmount,\n          withdrawAmount,\n          withdrawBank: sourceBank,\n          tokenProgram: params.withdrawOpts.tokenProgram,\n        },\n        depositOpts: { depositBank: bridgeBank, tokenProgram: bridgeTokenProgram },\n      });\n      if (!firstLeg.quoteResponse) return null;\n\n      // The second leg spends (a rounding-headroom hair under) the first leg's GUARANTEED bridge\n      // min-out, so it can't fail from first-leg slippage.\n      const bridgeMinOutNative = Number(firstLeg.quoteResponse.otherAmountThreshold);\n      const secondLegAmountNative = bridgeMinOutNative - SECOND_LEG_ROUNDING_HEADROOM_NATIVE;\n      if (secondLegAmountNative <= 0) return null;\n      const secondLegAmountUi = nativeToUi(secondLegAmountNative, bridgeBank.mintDecimals);\n\n      // Without a pre-existing bridge deposit, the second leg withdraws ALL of the bridge (the\n      // first leg deposited exactly min-out), so no dust position is ever left behind — the\n      // headroom lamports land in the wallet ATA, not as a marginfi position. `withdrawAmount ===\n      // totalPositionAmount` is what makes the builder emit a withdraw-all (the on-chain\n      // withdraw-all pulls all shares regardless of the amount). With a pre-existing bridge\n      // deposit, withdraw-all would sweep the user's own position into the swap, so keep the\n      // partial withdraw there — the headroom merges invisibly into their existing position.\n      const hasBridgeDeposit = params.marginfiAccount.balances.some(\n        (b) => b.active && b.bankPk.equals(bridgeBank.address) && b.assetShares.gt(0)\n      );\n\n      const result = await composeBridgedSwap({\n        firstLeg,\n        // The second leg builds against the first leg's projected effect.\n        buildSecondLeg: (projectedAccount) =>\n          makeSwapCollateralTx({\n            ...sharedBridgeLegContext(params),\n            marginfiAccount: projectedAccount,\n            withdrawOpts: {\n              totalPositionAmount: hasBridgeDeposit\n                ? nativeToUi(bridgeMinOutNative, bridgeBank.mintDecimals)\n                : secondLegAmountUi,\n              withdrawAmount: secondLegAmountUi,\n              withdrawBank: bridgeBank,\n              tokenProgram: bridgeTokenProgram,\n            },\n            depositOpts: params.depositOpts,\n          }),\n        marginfiAccount: params.marginfiAccount,\n        program: params.program,\n        banksMap: params.bankMap,\n        assetShareValueMultiplierByBank: params.assetShareValueMultiplierByBank,\n        feePayer: params.overrideInferAccounts?.authority ?? params.marginfiAccount.authority,\n        maxBundleTxs: bridgeOpts?.maxBundleTxs,\n      });\n      if (!result) return null;\n\n      return {\n        transactions: result.transactions,\n        actionTxIndex: result.transactions.length - 1,\n        quoteResponse: mergeBridgeQuotes(result.firstLegQuote, result.secondLegQuote),\n        bridgeMint: bridgeBank.mint,\n        mustBeAtomicBundle: true,\n      };\n    },\n  });\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\n/**\n * Exponent Finance program IDs (mainnet), taken from the official SDK's\n * `@exponent-labs/exponent-sdk` `environment.js`.\n *\n * The **core** program owns the `Vault` / `MarketTwo` accounts and runs the PT\n * instructions (`merge`, `strip`, `trade_pt`, …). It is `ExponentnaRg…` — the same key as\n * the repo's `declare_id!`. (An earlier version of this file mislabelled `declare_id!` as a\n * localnet-only key and used the **generic SY** program `XP1BRLn8…` as \"core\"; that is\n * wrong — `XP1BRLn8…` is one of the per-flavor SY programs, and a `merge`/`trade_pt` sent\n * to it fails because it does not own the core-owned `Vault`/`MarketTwo` accounts. Verified\n * on mainnet: vault `78MLjM…` is owned by `ExponentnaRg…`.)\n *\n * Instruction encoding/accounts come from the committed IDL (`idl/exponent_core.json`).\n */\nexport const EXPONENT_CORE_PROGRAM_ID = new PublicKey(\n  \"ExponentnaRg3CQbW6dqQNZKXp7gtZ9DGMp1cwC4HAS7\"\n);\n\n/** CLMM (`MarketThree`) program — concentrated-liquidity PT/YT trading. */\nexport const EXPONENT_CLMM_PROGRAM_ID = new PublicKey(\n  \"XPC1MM4dYACDfykNuXYZ5una2DsMDWL24CrYubCvarC\"\n);\n\n/** Orderbook program — limit-order PT/YT trading. */\nexport const EXPONENT_ORDERBOOK_PROGRAM_ID = new PublicKey(\n  \"XPBookgQTN2p8Yw1C2La35XkPMmZTCEYH77AdReVvK1\"\n);\n\n/** Strategy-vaults program. */\nexport const EXPONENT_VAULTS_PROGRAM_ID = new PublicKey(\n  \"sVau1tXvayVWfotzm9Ahcv2qfnnfRWttt78BCnNC6dD\"\n);\n\n/**\n * Per-flavor SY programs. A `Vault.sy_program` is one of these; `merge`/`trade_pt` carry it\n * as the `sy_program` account (and CPI into it to value SY). bulkSOL uses the **generic**\n * flavor (`XP1BRLn8…`).\n */\nexport const EXPONENT_GENERIC_SY_PROGRAM_ID = new PublicKey(\n  \"XP1BRLn8eCYSygrd8er5P4GKdzqKbC3DLoSsS5UYVZy\"\n);\nexport const EXPONENT_MARGINFI_SY_PROGRAM_ID = new PublicKey(\n  \"XPMfipyhcbq3DBvgvxkbZY7GekwmGNJLMD3wdiCkBc7\"\n);\nexport const EXPONENT_KAMINO_SY_PROGRAM_ID = new PublicKey(\n  \"XPK1ndTK1xrgRg99ifvdPP1exrx8D1mRXTuxBkkroCx\"\n);\nexport const EXPONENT_JITO_RESTAKING_SY_PROGRAM_ID = new PublicKey(\n  \"XPJitopeUEhMZVF72CvswnwrS2U2akQvk5s26aEfWv2\"\n);\nexport const EXPONENT_PERENA_SY_PROGRAM_ID = new PublicKey(\n  \"XPerenaJPyvnjseLCn7rgzxFEum6zX1k89C13SPTyGZ\"\n);\n\n/** Anchor event-CPI authority seed. */\nexport const EXPONENT_EVENT_AUTHORITY_SEED = \"__event_authority\";\n","{\n    \"address\": \"XPC1MM4dYACDfykNuXYZ5una2DsMDWL24CrYubCvarC\",\n    \"metadata\": {\n        \"name\": \"exponent_clmm\",\n        \"version\": \"0.1.0\",\n        \"spec\": \"0.1.0\",\n        \"description\": \"Created with Anchor\"\n    },\n    \"instructions\": [\n        {\n            \"name\": \"add_farm\",\n            \"discriminator\": [\n                7\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"signer\",\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"fee_payer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"mint_new\"\n                },\n                {\n                    \"name\": \"token_source\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_farm\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"token_rate\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"until_timestamp\",\n                    \"type\": \"u32\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"AddFarmEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"add_liquidity\",\n            \"discriminator\": [\n                25\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"owner\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_src\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_src\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\",\n                    \"docs\": [\n                        \"Address lookup table for vault\"\n                    ]\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"rent\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"max_sy_in_to_add\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"max_pt_in_to_add\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"lower_tick_key_optional\",\n                    \"type\": {\n                        \"option\": \"u32\"\n                    }\n                },\n                {\n                    \"name\": \"upper_tick_key_optional\",\n                    \"type\": {\n                        \"option\": \"u32\"\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"DepositLiquidityReturnData\"\n                }\n            }\n        },\n        {\n            \"name\": \"add_market_emission\",\n            \"discriminator\": [\n                8\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"signer\",\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"fee_payer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"mint_new\"\n                },\n                {\n                    \"name\": \"token_emission\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"system_program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"cpi_accounts\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"CpiAccounts\"\n                        }\n                    }\n                }\n            ]\n        },\n        {\n            \"name\": \"buy_pt\",\n            \"discriminator\": [\n                14\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"buyer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"min_pt_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"base_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                },\n                {\n                    \"name\": \"mint_sy_rem_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"buy_yt\",\n            \"discriminator\": [\n                12\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"trader\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"docs\": [\n                        \"Source account for the trader's SY tokens\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_trader\",\n                    \"docs\": [\n                        \"Destination for receiving YT tokens\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"Temporary SY account owned by market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity owned by market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_escrow\",\n                    \"docs\": [\n                        \"YT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"sy_in\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_yt_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"BuyYtEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"claim_farm_emission\",\n            \"discriminator\": [\n                6\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"owner\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\"\n                },\n                {\n                    \"name\": \"ticks\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_dst\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"mint\"\n                },\n                {\n                    \"name\": \"token_farm\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"Amount\"\n                        }\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"ClaimFarmEmissionsEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"deposit_liquidity\",\n            \"discriminator\": [\n                4\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"depositor\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"token_pt_src\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_src\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\",\n                    \"docs\": [\n                        \"Address lookup table for vault\"\n                    ]\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"lower_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"upper_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"max_sy_in\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"max_pt_in\",\n                    \"type\": \"u64\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"DepositLiquidityReturnData\"\n                }\n            }\n        },\n        {\n            \"name\": \"initialize_market\",\n            \"docs\": [\n                \"High-trust function to init market\"\n            ],\n            \"discriminator\": [\n                2\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"payer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"admin_signer\",\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"admin_state\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"docs\": [\n                        \"There is 1 market per vault\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"vault\",\n                    \"docs\": [\n                        \"Links the mint_sy & mint_pt & sy_program together\"\n                    ]\n                },\n                {\n                    \"name\": \"mint_sy\"\n                },\n                {\n                    \"name\": \"mint_pt\"\n                },\n                {\n                    \"name\": \"mint_yt\"\n                },\n                {\n                    \"name\": \"escrow_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"escrow_sy\",\n                    \"docs\": [\n                        \"This account for SY is only a temporary pass-through account\",\n                        \"It is used to transfer SY tokens from the signer to the market\",\n                        \"And then from the market to the SY program's escrow\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"escrow_yt\",\n                    \"docs\": [\n                        \"This account for YT is only a temporary pass-through account\",\n                        \"It is used to transfer YT tokens from the signer to the market\",\n                        \"And then from the market to the core program's\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"pt_src\",\n                    \"docs\": [\n                        \"Signer's PT token account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"sy_src\",\n                    \"docs\": [\n                        \"Signer's SY token account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\",\n                    \"docs\": [\n                        \"Use Token2022 as the implementation for PT & SY & LP tokens\"\n                    ]\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"exponent_core\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"associated_token_program\"\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_treasury_fee_sy\"\n                },\n                {\n                    \"name\": \"token_treasury_fee_pt\"\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"ln_fee_rate_root\",\n                    \"type\": \"f64\"\n                },\n                {\n                    \"name\": \"pt_init\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"sy_init\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"fee_treasury_bps\",\n                    \"type\": \"u16\"\n                },\n                {\n                    \"name\": \"cpi_accounts\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"CpiAccounts\"\n                        }\n                    }\n                },\n                {\n                    \"name\": \"cpi_core_accounts\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"CpiCoreAccounts\"\n                        }\n                    }\n                },\n                {\n                    \"name\": \"min_lp_tick_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"epsilon_clamp\",\n                    \"type\": \"f64\"\n                },\n                {\n                    \"name\": \"max_lp_supply\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"current_price_apy\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"tick_space\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"lower_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"upper_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"seed_id\",\n                    \"type\": \"u8\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"MarketThreeInitEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"market_accrue_emission\",\n            \"discriminator\": [\n                23\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"owner\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"MarketAccrueEmissionEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"market_collect_emission\",\n            \"discriminator\": [\n                11\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"owner\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_emission_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_emission_dst\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"emission_index\",\n                    \"type\": \"u16\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"MarketCollectEmissionEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"modify_farm\",\n            \"discriminator\": [\n                9\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"signer\",\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"mint\"\n                },\n                {\n                    \"name\": \"token_source\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_farm\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"new_expiration_timestamp\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"new_rate\",\n                    \"type\": \"u64\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"ModifyFarmEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"modify_market_setting\",\n            \"discriminator\": [\n                10\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"signer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"admin_state\"\n                },\n                {\n                    \"name\": \"system_program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"action\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"MarketAdminAction\"\n                        }\n                    }\n                }\n            ]\n        },\n        {\n            \"name\": \"sell_pt\",\n            \"discriminator\": [\n                15\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"seller\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount_pt\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_base_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                },\n                {\n                    \"name\": \"redeem_sy_rem_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"sell_yt\",\n            \"discriminator\": [\n                13\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"trader\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"Account owned by market\",\n                        \"This is a temporary account that receives SY tokens from the user, after which it transfers them to the SY program\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_escrow\",\n                    \"docs\": [\n                        \"YT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"yt_in\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_sy_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"SellYtEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"trade_pt\",\n            \"discriminator\": [\n                3\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"trader\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"docs\": [\n                        \"Trader's SY token account\",\n                        \"Mint is constrained by TokenProgram\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"docs\": [\n                        \"Receiving PT token account\",\n                        \"Mint is constrained by TokenProgram\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"Account owned by market\",\n                        \"This is a temporary account that receives SY tokens from the user, after which it transfers them to the SY program\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount_in\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"swap_direction\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"SwapDirection\"\n                        }\n                    }\n                },\n                {\n                    \"name\": \"amount_out_constraint\",\n                    \"type\": {\n                        \"option\": \"u64\"\n                    }\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"TradePtEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"trade_pt_exact_out\",\n            \"discriminator\": [\n                24\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"trader\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"docs\": [\n                        \"Trader's SY token account\",\n                        \"Mint is constrained by TokenProgram\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"docs\": [\n                        \"Receiving PT token account\",\n                        \"Mint is constrained by TokenProgram\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"Account owned by market\",\n                        \"This is a temporary account that receives SY tokens from the user, after which it transfers them to the SY program\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"swap_direction\",\n                    \"type\": {\n                        \"defined\": {\n                            \"name\": \"SwapDirection\"\n                        }\n                    }\n                },\n                {\n                    \"name\": \"amount_in_constraint\",\n                    \"type\": {\n                        \"option\": \"u64\"\n                    }\n                },\n                {\n                    \"name\": \"price_spot_limit\",\n                    \"type\": {\n                        \"option\": \"f64\"\n                    }\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"TradePtEvent\"\n                }\n            }\n        },\n        {\n            \"name\": \"withdraw_liquidity\",\n            \"discriminator\": [\n                5\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"owner\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_dst\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_dst\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"Market PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"Market-owned interchange account for SY\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"address_lookup_table\",\n                    \"docs\": [\n                        \"Address lookup table for vault\"\n                    ]\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"liquidity_to_remove\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_pt_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_sy_out\",\n                    \"type\": \"u64\"\n                }\n            ],\n            \"returns\": {\n                \"defined\": {\n                    \"name\": \"WithdrawLiquidityReturnData\"\n                }\n            }\n        },\n        {\n            \"name\": \"wrapper_buy_yt\",\n            \"discriminator\": [\n                16\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"buyer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"yt_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"max_base_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"mint_sy_accounts_length\",\n                    \"type\": \"u8\"\n                },\n                {\n                    \"name\": \"deposit_yt_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_provide_liquidity\",\n            \"discriminator\": [\n                18\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"depositor\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_escrow\",\n                    \"docs\": [\n                        \"YT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"SY token account owned by the market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_depositor\",\n                    \"docs\": [\n                        \"Token account for SY owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_depositor\",\n                    \"docs\": [\n                        \"Token account for YT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_depositor\",\n                    \"docs\": [\n                        \"Token account for PT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"mint_yt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"mint_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"rent\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"lower_tick\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"upper_tick\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"amount_base\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_lp_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"mint_sy_rem_accounts_until\",\n                    \"type\": \"u8\"\n                },\n                {\n                    \"name\": \"deposit_yt_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_provide_liquidity_base\",\n            \"discriminator\": [\n                26\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"depositor\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"SY token account owned by the market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_depositor\",\n                    \"docs\": [\n                        \"Token account for SY owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_depositor\",\n                    \"docs\": [\n                        \"Token account for PT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"mint_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"rent\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"lower_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"upper_tick_key\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"min_lp_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"mint_sy_accounts_until\",\n                    \"type\": \"u8\"\n                },\n                {\n                    \"name\": \"external_pt_to_buy\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"external_sy_constraint\",\n                    \"type\": \"u64\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_provide_liquidity_classic\",\n            \"discriminator\": [\n                19\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"depositor\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"SY token account owned by the market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_depositor\",\n                    \"docs\": [\n                        \"Token account for SY owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_depositor\",\n                    \"docs\": [\n                        \"Token account for PT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"instructions_sysvar\"\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"rent\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"lower_tick\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"upper_tick\",\n                    \"type\": \"u32\"\n                },\n                {\n                    \"name\": \"amount_base\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"amount_pt\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_lp_out\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"mint_sy_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_sell_yt\",\n            \"discriminator\": [\n                17\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"seller\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_trader\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_yt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"exponent_core_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"yt_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"min_base_amount\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"redeem_sy_accounts_until\",\n                    \"type\": \"u8\"\n                },\n                {\n                    \"name\": \"withdraw_yt_accounts_until\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_withdraw_liquidity\",\n            \"discriminator\": [\n                20\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"withdrawer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"SY token account owned by the market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_withdrawer\",\n                    \"docs\": [\n                        \"Token account for SY owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_withdrawer\",\n                    \"docs\": [\n                        \"Token account for PT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"token_fee_treasury_sy\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_fee_treasury_pt\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount_lp\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"sy_constraint\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"redeem_sy_accounts_length\",\n                    \"type\": \"u8\"\n                }\n            ]\n        },\n        {\n            \"name\": \"wrapper_withdraw_liquidity_classic\",\n            \"discriminator\": [\n                21\n            ],\n            \"accounts\": [\n                {\n                    \"name\": \"withdrawer\",\n                    \"writable\": true,\n                    \"signer\": true\n                },\n                {\n                    \"name\": \"market\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"ticks\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_escrow\",\n                    \"docs\": [\n                        \"PT liquidity account\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_escrow\",\n                    \"docs\": [\n                        \"SY token account owned by the market\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_sy_withdrawer\",\n                    \"docs\": [\n                        \"Token account for SY owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_pt_withdrawer\",\n                    \"docs\": [\n                        \"Token account for PT owned by the depositor\"\n                    ],\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"token_program\"\n                },\n                {\n                    \"name\": \"market_address_lookup_table\"\n                },\n                {\n                    \"name\": \"sy_program\"\n                },\n                {\n                    \"name\": \"lp_position\",\n                    \"writable\": true\n                },\n                {\n                    \"name\": \"system_program\"\n                },\n                {\n                    \"name\": \"event_authority\"\n                },\n                {\n                    \"name\": \"program\"\n                }\n            ],\n            \"args\": [\n                {\n                    \"name\": \"amount_lp\",\n                    \"type\": \"u64\"\n                },\n                {\n                    \"name\": \"redeem_sy_accounts_length\",\n                    \"type\": \"u8\"\n                }\n            ]\n        }\n    ],\n    \"accounts\": [\n        {\n            \"name\": \"Admin\",\n            \"discriminator\": [\n                244,\n                158,\n                220,\n                65,\n                8,\n                73,\n                4,\n                65\n            ]\n        },\n        {\n            \"name\": \"LpPosition\",\n            \"discriminator\": [\n                105,\n                241,\n                37,\n                200,\n                224,\n                2,\n                252,\n                90\n            ]\n        },\n        {\n            \"name\": \"MarketThree\",\n            \"discriminator\": [\n                242,\n                240,\n                26,\n                15,\n                148,\n                186,\n                185,\n                205\n            ]\n        },\n        {\n            \"name\": \"Vault\",\n            \"discriminator\": [\n                211,\n                8,\n                232,\n                43,\n                2,\n                152,\n                117,\n                119\n            ]\n        }\n    ],\n    \"events\": [\n        {\n            \"name\": \"AddFarmEvent\",\n            \"discriminator\": [\n                128,\n                69,\n                228,\n                140,\n                211,\n                1,\n                236,\n                209\n            ]\n        },\n        {\n            \"name\": \"BuyPtEvent\",\n            \"discriminator\": [\n                62,\n                132,\n                50,\n                43,\n                219,\n                234,\n                221,\n                167\n            ]\n        },\n        {\n            \"name\": \"BuyYtEvent\",\n            \"discriminator\": [\n                172,\n                181,\n                56,\n                183,\n                219,\n                24,\n                130,\n                64\n            ]\n        },\n        {\n            \"name\": \"ClaimFarmEmissionsEvent\",\n            \"discriminator\": [\n                184,\n                10,\n                159,\n                144,\n                144,\n                194,\n                166,\n                92\n            ]\n        },\n        {\n            \"name\": \"DepositLiquidityEvent\",\n            \"discriminator\": [\n                169,\n                84,\n                67,\n                174,\n                222,\n                138,\n                16,\n                123\n            ]\n        },\n        {\n            \"name\": \"DepositLiquidityReturnData\",\n            \"discriminator\": [\n                251,\n                222,\n                183,\n                16,\n                43,\n                40,\n                133,\n                193\n            ]\n        },\n        {\n            \"name\": \"MarketAccrueEmissionEvent\",\n            \"discriminator\": [\n                62,\n                90,\n                81,\n                179,\n                105,\n                110,\n                108,\n                49\n            ]\n        },\n        {\n            \"name\": \"MarketCollectEmissionEvent\",\n            \"discriminator\": [\n                125,\n                129,\n                15,\n                139,\n                232,\n                244,\n                82,\n                67\n            ]\n        },\n        {\n            \"name\": \"MarketThreeInitEvent\",\n            \"discriminator\": [\n                247,\n                116,\n                192,\n                184,\n                106,\n                246,\n                165,\n                183\n            ]\n        },\n        {\n            \"name\": \"MergeEvent\",\n            \"discriminator\": [\n                25,\n                30,\n                29,\n                41,\n                108,\n                139,\n                103,\n                4\n            ]\n        },\n        {\n            \"name\": \"ModifyFarmEvent\",\n            \"discriminator\": [\n                140,\n                186,\n                92,\n                18,\n                4,\n                227,\n                22,\n                14\n            ]\n        },\n        {\n            \"name\": \"SellPtEvent\",\n            \"discriminator\": [\n                103,\n                139,\n                188,\n                216,\n                68,\n                124,\n                110,\n                63\n            ]\n        },\n        {\n            \"name\": \"SellYtEvent\",\n            \"discriminator\": [\n                149,\n                147,\n                29,\n                159,\n                148,\n                240,\n                129,\n                7\n            ]\n        },\n        {\n            \"name\": \"StripEvent\",\n            \"discriminator\": [\n                114,\n                189,\n                26,\n                143,\n                143,\n                50,\n                197,\n                89\n            ]\n        },\n        {\n            \"name\": \"TradePtEvent\",\n            \"discriminator\": [\n                159,\n                225,\n                96,\n                81,\n                255,\n                227,\n                233,\n                174\n            ]\n        },\n        {\n            \"name\": \"WithdrawLiquidityEvent\",\n            \"discriminator\": [\n                214,\n                6,\n                161,\n                45,\n                191,\n                142,\n                124,\n                186\n            ]\n        },\n        {\n            \"name\": \"WithdrawLiquidityReturnData\",\n            \"discriminator\": [\n                42,\n                97,\n                75,\n                157,\n                90,\n                121,\n                189,\n                110\n            ]\n        },\n        {\n            \"name\": \"WrapperBuyYtEvent\",\n            \"discriminator\": [\n                148,\n                95,\n                21,\n                54,\n                99,\n                16,\n                15,\n                40\n            ]\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityBaseEvent\",\n            \"discriminator\": [\n                60,\n                121,\n                164,\n                93,\n                220,\n                13,\n                142,\n                197\n            ]\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityClassicEvent\",\n            \"discriminator\": [\n                87,\n                163,\n                150,\n                162,\n                186,\n                147,\n                234,\n                200\n            ]\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityEvent\",\n            \"discriminator\": [\n                209,\n                42,\n                227,\n                77,\n                187,\n                216,\n                17,\n                177\n            ]\n        },\n        {\n            \"name\": \"WrapperSellYtEvent\",\n            \"discriminator\": [\n                252,\n                140,\n                45,\n                253,\n                6,\n                94,\n                95,\n                135\n            ]\n        },\n        {\n            \"name\": \"WrapperWithdrawLiquidityClassicEvent\",\n            \"discriminator\": [\n                18,\n                154,\n                212,\n                39,\n                36,\n                23,\n                158,\n                124\n            ]\n        },\n        {\n            \"name\": \"WrapperWithdrawLiquidityEvent\",\n            \"discriminator\": [\n                52,\n                32,\n                180,\n                241,\n                36,\n                221,\n                72,\n                167\n            ]\n        }\n    ],\n    \"errors\": [\n        {\n            \"code\": 6000,\n            \"name\": \"VaultExpired\",\n            \"msg\": \"Vault is expired\"\n        },\n        {\n            \"code\": 6001,\n            \"name\": \"DeltaLZero\",\n            \"msg\": \"Delta liquidity can't be zero\"\n        },\n        {\n            \"code\": 6002,\n            \"name\": \"TickArrayAlreadyBoundToMarket\",\n            \"msg\": \"Tick array already bound to market\"\n        },\n        {\n            \"code\": 6003,\n            \"name\": \"LiquidityUnderflow\",\n            \"msg\": \"LiquidityUnderflow\"\n        },\n        {\n            \"code\": 6004,\n            \"name\": \"LiquidityOverflow\",\n            \"msg\": \"LiquidityOverflow\"\n        },\n        {\n            \"code\": 6005,\n            \"name\": \"PriceLimitViolated\",\n            \"msg\": \"Price limit violated\"\n        },\n        {\n            \"code\": 6006,\n            \"name\": \"EndOfRange\",\n            \"msg\": \"End of range\"\n        },\n        {\n            \"code\": 6007,\n            \"name\": \"Unauthorized\",\n            \"msg\": \"Unauthorized\"\n        },\n        {\n            \"code\": 6008,\n            \"name\": \"InsufficientBudgetSY\",\n            \"msg\": \"Insufficient budget SY\"\n        },\n        {\n            \"code\": 6009,\n            \"name\": \"InsufficientBudgetPT\",\n            \"msg\": \"Insufficient budget PT\"\n        },\n        {\n            \"code\": 6010,\n            \"name\": \"IntervalNotFound\",\n            \"msg\": \"Interval not found\"\n        },\n        {\n            \"code\": 6011,\n            \"name\": \"LpSupplyMaximumExceeded\",\n            \"msg\": \"lp supply maximum exceeded\"\n        },\n        {\n            \"code\": 6012,\n            \"name\": \"DepositingLiquidityDisabled\",\n            \"msg\": \"Depositing liquidity disabled\"\n        },\n        {\n            \"code\": 6013,\n            \"name\": \"BuyingPtDisabled\",\n            \"msg\": \"Buying pt disabled\"\n        },\n        {\n            \"code\": 6014,\n            \"name\": \"SellingPtDisabled\",\n            \"msg\": \"Selling pt disabled\"\n        },\n        {\n            \"code\": 6015,\n            \"name\": \"WithdrawingLiquidityDisabled\",\n            \"msg\": \"Withdrawing liquidity disabled\"\n        },\n        {\n            \"code\": 6016,\n            \"name\": \"BuyingYtDisabled\",\n            \"msg\": \"Buying YT is disabled\"\n        },\n        {\n            \"code\": 6017,\n            \"name\": \"SellingYtDisabled\",\n            \"msg\": \"Selling YT is disabled\"\n        },\n        {\n            \"code\": 6018,\n            \"name\": \"NoRightIndexForSplitedRange\",\n            \"msg\": \"No right index for splitted range\"\n        },\n        {\n            \"code\": 6019,\n            \"name\": \"ExactOutDirectionUnsupported\",\n            \"msg\": \"Exact-out swaps are unsupported for this direction\"\n        },\n        {\n            \"code\": 6020,\n            \"name\": \"WithdrawalAccountingDustExceeded\",\n            \"msg\": \"Withdrawal accounting dust exceeded limit\"\n        },\n        {\n            \"code\": 6021,\n            \"name\": \"InvalidExpirationTimestamp\",\n            \"msg\": \"Invalid expiration timestamp\"\n        },\n        {\n            \"code\": 6022,\n            \"name\": \"YieldTrackerLimitExceeded\",\n            \"msg\": \"Tracker limit exceeded\"\n        },\n        {\n            \"code\": 6023,\n            \"name\": \"InvalidTickRange\",\n            \"msg\": \"Lower and upper tick must differ\"\n        },\n        {\n            \"code\": 6024,\n            \"name\": \"TickRangeTooSmall\",\n            \"msg\": \"Tick range width below epsilon clamp\"\n        },\n        {\n            \"code\": 6025,\n            \"name\": \"LpMinNotReached\",\n            \"msg\": \"Lp min not reached\"\n        },\n        {\n            \"code\": 6026,\n            \"name\": \"EmissionsTrackerLengthMismatch\",\n            \"msg\": \"Emissions tracker length mismatch\"\n        },\n        {\n            \"code\": 6027,\n            \"name\": \"LiquidityToRemoveExceedsBalance\",\n            \"msg\": \"Liquidity to remove exceeds position balance\"\n        },\n        {\n            \"code\": 6028,\n            \"name\": \"InvalidFeeRate\",\n            \"msg\": \"Fee rate configuration must not exceed 5% annualized\"\n        },\n        {\n            \"code\": 6029,\n            \"name\": \"IntegerOverflow\",\n            \"msg\": \"Integer overflow during conversion\"\n        },\n        {\n            \"code\": 6030,\n            \"name\": \"InvalidAccountData\",\n            \"msg\": \"Invalid account data\"\n        },\n        {\n            \"code\": 6031,\n            \"name\": \"ConstraintViolation\",\n            \"msg\": \"Account constraint violation\"\n        },\n        {\n            \"code\": 6032,\n            \"name\": \"DepositTooSmallToMint\",\n            \"msg\": \"Deposit amount too small to mint shares\"\n        },\n        {\n            \"code\": 6033,\n            \"name\": \"TickNotAlignedToTickSpace\",\n            \"msg\": \"Tick key must be a multiple of tick_space\"\n        },\n        {\n            \"code\": 6034,\n            \"name\": \"AddingLiquidityCurrentlyNotAllowed\",\n            \"msg\": \"Adding liquidity currently is not allowed\"\n        },\n        {\n            \"code\": 6035,\n            \"name\": \"CrossingEqualizationInvariantViolated\",\n            \"msg\": \"Crossing equalization invariants were violated\"\n        }\n    ],\n    \"types\": [\n        {\n            \"name\": \"AddFarmEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"admin_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"farm_index\",\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"emission_mint\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_rate\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"expiry_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"amount_deposited\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"Admin\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"uber_admin\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"proposed_uber_admin\",\n                        \"type\": {\n                            \"option\": \"pubkey\"\n                        }\n                    },\n                    {\n                        \"name\": \"principles\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Principles\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"Amount\",\n            \"type\": {\n                \"kind\": \"enum\",\n                \"variants\": [\n                    {\n                        \"name\": \"All\"\n                    },\n                    {\n                        \"name\": \"Some\",\n                        \"fields\": [\n                            \"u64\"\n                        ]\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"BuyPtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"buyer_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"BuyYtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trader_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_yt_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"max_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_yt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"amount_sy_to_strip\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_borrowed\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_repaid\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ClaimFarmEmissionsEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"owner_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_owner\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"farm_index\",\n                        \"type\": \"u8\"\n                    },\n                    {\n                        \"name\": \"amount_claimed\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"remaining_staged\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lp_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ClaimLimits\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"claim_window_start_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"total_claim_amount_in_window\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"max_claim_amount_per_window\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"claim_window_duration_seconds\",\n                        \"type\": \"u32\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ConfigurationOptions\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"ln_fee_rate_root\",\n                        \"docs\": [\n                            \"Initial log of fee rate, which decreases over time\"\n                        ],\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"treasury_fee_bps\",\n                        \"docs\": [\n                            \"Protocol fee cut BPS\"\n                        ],\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"min_lp_tick_amount\",\n                        \"docs\": [\n                            \"Minimum amount of LP tokens to be issued\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"epsilon_clamp\",\n                        \"docs\": [\n                            \"min denomination for reinvest liquidity\"\n                        ],\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"max_lp_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tick_space\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"_reserved\",\n                        \"type\": {\n                            \"array\": [\n                                \"u8\",\n                                1024\n                            ]\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"CpiAccounts\",\n            \"docs\": [\n                \"Account lists for validating CPI calls to the SY program\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"get_sy_state\",\n                        \"docs\": [\n                            \"Fetch SY state\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"deposit_sy\",\n                        \"docs\": [\n                            \"Deposit SY into personal account owned by vault\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"withdraw_sy\",\n                        \"docs\": [\n                            \"Withdraw SY from personal account owned by vault\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"claim_emission\",\n                        \"docs\": [\n                            \"Settle rewards for vault to accounts owned by the vault\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"vec\": {\n                                    \"defined\": {\n                                        \"name\": \"CpiInterfaceContext\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"get_position_state\",\n                        \"docs\": [\n                            \"Get personal yield position\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"CpiCoreAccounts\",\n            \"docs\": [\n                \"Account lists for validating CPI calls to the SY program\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"strip_sy\",\n                        \"docs\": [\n                            \"Strip sy\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"merge_sy\",\n                        \"docs\": [\n                            \"Merge sy\"\n                        ],\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"CpiInterfaceContext\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"CpiInterfaceContext\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"alt_index\",\n                        \"docs\": [\n                            \"Address-lookup-table index\"\n                        ],\n                        \"type\": \"u8\"\n                    },\n                    {\n                        \"name\": \"is_signer\",\n                        \"type\": \"bool\"\n                    },\n                    {\n                        \"name\": \"is_writable\",\n                        \"type\": \"bool\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"CrossingSplit\",\n            \"docs\": [\n                \"Represents the three virtual segments when a position spans the active tick.\",\n                \"This allows tracking different liquidity (L_actual vs L_target) in the crossing segment.\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"cross_left_idx\",\n                        \"docs\": [\n                            \"Left boundary of the crossing tick (current_tick at deposit time)\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"cross_right_idx\",\n                        \"docs\": [\n                            \"Right boundary of the crossing tick\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"lp_balance_crossing\",\n                        \"docs\": [\n                            \"Actual liquidity for the crossing segment (L_actual, may be < L_target)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_a_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_a_sy\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_b_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_b_sy\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_c_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_c_sy\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"farms_a\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"farms_b\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"farms_c\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"DepositLiquidityEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"depositor_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"docs\": [\n                            \"Total PT amount added (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"docs\": [\n                            \"Total SY amount added (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"delta_liquidity\",\n                        \"docs\": [\n                            \"Liquidity added to the position\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"docs\": [\n                            \"Lower tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"docs\": [\n                            \"Upper tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"docs\": [\n                            \"LP position account address\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_balance_after\",\n                        \"docs\": [\n                            \"Total LP balance after this deposit\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"docs\": [\n                            \"Accumulated unclaimed SY fees\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"docs\": [\n                            \"Accumulated unclaimed PT fees\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"docs\": [\n                            \"Last snapshot of inside PT fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"docs\": [\n                            \"Last snapshot of inside SY fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"DepositLiquidityReturnData\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"depositor_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"docs\": [\n                            \"Total PT amount added (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"docs\": [\n                            \"Total SY amount added (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"delta_liquidity\",\n                        \"docs\": [\n                            \"Liquidity added to the position\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"docs\": [\n                            \"Lower tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"docs\": [\n                            \"Upper tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"docs\": [\n                            \"LP position account address\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_balance_after\",\n                        \"docs\": [\n                            \"Total LP balance after this deposit\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"docs\": [\n                            \"Accumulated unclaimed SY fees\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"docs\": [\n                            \"Accumulated unclaimed PT fees\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"docs\": [\n                            \"Last snapshot of inside PT fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"docs\": [\n                            \"Last snapshot of inside SY fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"EmissionInfo\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"token_account\",\n                        \"docs\": [\n                            \"The token account for the emission where the vault authority is the authority\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"initial_index\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"last_seen_index\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"final_index\",\n                        \"docs\": [\n                            \"The final index is used to track the last claimable index after the vault expires\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"treasury_token_account\",\n                        \"docs\": [\n                            \"The treasury token account for this reward\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"fee_bps\",\n                        \"docs\": [\n                            \"The fee taken from emission collecting\"\n                        ],\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"treasury_emission\",\n                        \"docs\": [\n                            \"The lambo fund\"\n                        ],\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"FarmEmission\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"mint\",\n                        \"docs\": [\n                            \"Mint for the emission token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_rate\",\n                        \"docs\": [\n                            \"Rate at which the emission token is emitted per second\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"expiry_timestamp\",\n                        \"docs\": [\n                            \"Expiration timestamp for the emission token\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"index\",\n                        \"docs\": [\n                            \"Index for converting LP shares into earned emissions\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"LiquidityNetBalanceLimits\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"window_start_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"window_start_net_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"max_net_balance_change_negative_percentage\",\n                        \"docs\": [\n                            \"Maximum allowed negative change in basis points (10000 = 100%)\"\n                        ],\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"max_net_balance_change_positive_percentage\",\n                        \"docs\": [\n                            \"Maximum allowed positive change in basis points (10000 = 100%)\",\n                            \"Using u32 to allow for very large increases (up to ~429,496%)\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"window_duration_seconds\",\n                        \"type\": \"u32\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"LpFarm\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"last_seen_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"farm_emissions\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"FarmEmission\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"LpPosition\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"owner\",\n                        \"docs\": [\n                            \"Link to address that owns this position\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market\",\n                        \"docs\": [\n                            \"Link to market that manages the LP\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"docs\": [\n                            \"last fee calc position snapshot Q64.64\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"docs\": [\n                            \"last fee calc position snapshot Q64.64\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"lp_balance\",\n                        \"docs\": [\n                            \"Track the LP balance of the user here\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick_idx\",\n                        \"docs\": [\n                            \"Lower tick of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick_idx\",\n                        \"docs\": [\n                            \"Upper tick of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"docs\": [\n                            \"Share trackers for each tick in range\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"crossing_split\",\n                        \"docs\": [\n                            \"Crossing split for positions that span the active tick.\",\n                            \"When active (is_active() returns true), the position is logically split\",\n                            \"into 3 segments with the crossing segment having reduced liquidity (L_actual).\",\n                            \"When inactive, this field is ignored and standard fee calculation is used.\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"CrossingSplit\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketAccrueEmissionEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"owner_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketAdminAction\",\n            \"type\": {\n                \"kind\": \"enum\",\n                \"variants\": [\n                    {\n                        \"name\": \"SetStatus\",\n                        \"fields\": [\n                            \"u8\"\n                        ]\n                    },\n                    {\n                        \"name\": \"SetMaxLpSupply\",\n                        \"fields\": [\n                            \"u64\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeTreasuryTradeSyBpsFee\",\n                        \"fields\": [\n                            \"u16\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeLnFeeRateRoot\",\n                        \"fields\": [\n                            \"f64\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeCpiAccounts\",\n                        \"fields\": [\n                            {\n                                \"name\": \"cpi_accounts\",\n                                \"type\": {\n                                    \"defined\": {\n                                        \"name\": \"CpiAccounts\"\n                                    }\n                                }\n                            },\n                            {\n                                \"name\": \"cpi_core_accounts\",\n                                \"type\": {\n                                    \"defined\": {\n                                        \"name\": \"CpiCoreAccounts\"\n                                    }\n                                }\n                            }\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeLiquidityNetBalanceLimits\",\n                        \"fields\": [\n                            {\n                                \"name\": \"max_net_balance_change_negative_percentage\",\n                                \"type\": \"u16\"\n                            },\n                            {\n                                \"name\": \"max_net_balance_change_positive_percentage\",\n                                \"type\": \"u32\"\n                            },\n                            {\n                                \"name\": \"window_duration_seconds\",\n                                \"type\": \"u32\"\n                            }\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeAddressLookupTable\",\n                        \"fields\": [\n                            \"pubkey\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeEpsilonClamp\",\n                        \"fields\": [\n                            \"f64\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeMinLpTickAmount\",\n                        \"fields\": [\n                            \"u64\"\n                        ]\n                    },\n                    {\n                        \"name\": \"ChangeTickSpace\",\n                        \"fields\": [\n                            \"u32\"\n                        ]\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketCollectEmissionEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"owner_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_emission_owner\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"emission_index\",\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"amount_collected\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lp_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"docs\": [\n                            \"Last snapshot of inside PT fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"docs\": [\n                            \"Last snapshot of inside SY fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketEmission\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"token_escrow\",\n                        \"docs\": [\n                            \"Escrow account that receives the emissions from the SY program\",\n                            \"And then passes them through to the user\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_share_index\",\n                        \"docs\": [\n                            \"Index for converting LP shares into earned emissions\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"last_seen_staged\",\n                        \"docs\": [\n                            \"The difference between the staged amount and collected emission amount\"\n                        ],\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketEmissions\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trackers\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"MarketEmission\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketFinancials\",\n            \"docs\": [\n                \"Financial parameters for the market\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"expiration_ts\",\n                        \"docs\": [\n                            \"Expiration timestamp, which is copied from the vault associated with the PT\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"pt_balance\",\n                        \"docs\": [\n                            \"Balance of PT in the market\",\n                            \"This amount is tracked separately to prevent bugs from token transfers directly to the market\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_balance\",\n                        \"docs\": [\n                            \"Balance of SY in the market\",\n                            \"This amount is tracked separately to prevent bugs from token transfers directly to the market\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_user_balance\",\n                        \"docs\": [\n                            \"Balance of SY in the market without fees\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"liquidity_balance\",\n                        \"docs\": [\n                            \"Total balance of liquidity in the market\"\n                        ],\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketThree\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"admin\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"address_lookup_table\",\n                        \"docs\": [\n                            \"Address to ALT\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_pt\",\n                        \"docs\": [\n                            \"Mint of the vault's PT token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_sy\",\n                        \"docs\": [\n                            \"Mint of the SY program's SY token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_yt\",\n                        \"docs\": [\n                            \"Mint of the vault's YT token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"vault\",\n                        \"docs\": [\n                            \"Link to yield-stripping vault\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_escrow\",\n                        \"docs\": [\n                            \"Token account that holds PT liquidity\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_escrow\",\n                        \"docs\": [\n                            \"Pass-through token account for SY moving from the depositor to the SY program\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_yt_escrow\",\n                        \"docs\": [\n                            \"Pass-through token account for YT moving from the depositor to the core program\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_fee_treasury_sy\",\n                        \"docs\": [\n                            \"Token account that holds SY fees from trade\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_fee_treasury_pt\",\n                        \"docs\": [\n                            \"Token account that holds PT fees from trade\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"self_address\",\n                        \"docs\": [\n                            \"Authority for CPI calls owned by the market struct\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"ticks\",\n                        \"docs\": [\n                            \"Pubkey tick array account\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"signer_bump\",\n                        \"docs\": [\n                            \"Bump for signing the PDA\"\n                        ],\n                        \"type\": {\n                            \"array\": [\n                                \"u8\",\n                                1\n                            ]\n                        }\n                    },\n                    {\n                        \"name\": \"status_flags\",\n                        \"type\": \"u8\"\n                    },\n                    {\n                        \"name\": \"sy_program\",\n                        \"docs\": [\n                            \"Link to the SY program ID\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"exponent_core_program\",\n                        \"docs\": [\n                            \"Link to the exponent_core program ID\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"configuration_options\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"ConfigurationOptions\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"financials\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"MarketFinancials\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"emissions\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"MarketEmissions\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"lp_farm\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"LpFarm\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"cpi_sy_accounts\",\n                        \"docs\": [\n                            \"Record of CPI accounts\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"CpiAccounts\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"cpi_core_accounts\",\n                        \"docs\": [\n                            \"Record of CPI core accounts\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"CpiCoreAccounts\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"is_current_flash_swap\",\n                        \"type\": \"bool\"\n                    },\n                    {\n                        \"name\": \"liquidity_net_balance_limits\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"LiquidityNetBalanceLimits\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"seed_id\",\n                        \"docs\": [\n                            \"Unique seed id for the market\"\n                        ],\n                        \"type\": {\n                            \"array\": [\n                                \"u8\",\n                                1\n                            ]\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MarketThreeInitEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"vault_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"rent_payer_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"admin_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"treasury_fee_bps\",\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"sy_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"pt_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"current_spot_price\",\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"tick_space\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"seed_id\",\n                        \"type\": \"u8\"\n                    },\n                    {\n                        \"name\": \"ln_fee_rate_root\",\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"min_lp_tick_amount\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"epsilon_clamp\",\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"max_lp_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"pt_init\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_init\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"MergeEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"owner\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"vault\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"sy_dst\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"escrow_sy\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yt_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"pt_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_yt\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_pt\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yield_position\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_py_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"pt_redemption_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"total_sy_in_escrow\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"pt_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"yt_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_for_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"is_vault_active\",\n                        \"type\": \"bool\"\n                    },\n                    {\n                        \"name\": \"unix_timestamp\",\n                        \"type\": \"i64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ModifiedTick\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"tick_idx\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"fee_grouth_pt_after\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_grouth_sy_after\",\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ModifiedTicks\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"fee_global_before_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_global_before_sy\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_global_after_pt\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_global_after_sy\",\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"ticks\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"ModifiedTick\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"ModifyFarmEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"admin_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"farm_index\",\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"emission_mint\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"old_token_rate\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"new_token_rate\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"old_expiry_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"new_expiry_timestamp\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"token_difference\",\n                        \"type\": \"i64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"Number\",\n            \"docs\": [\n                \"High precision number, stored as 4 u64 words in little endian\"\n            ],\n            \"repr\": {\n                \"kind\": \"c\"\n            },\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"array\": [\n                            \"u64\",\n                            4\n                        ]\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"PersonalYieldTracker\",\n            \"docs\": [\n                \"Generic tracker for interest and emissions earned by deposits\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"last_seen_index\",\n                        \"docs\": [\n                            \"The index is the per-share value of the SY token\",\n                            \"Note that the YT balance must be converted to the equivalent SY balance\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"staged\",\n                        \"docs\": [\n                            \"Staged tokens that may be withdrawn\"\n                        ],\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"PersonalYieldTrackers\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trackers\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"PersonalYieldTracker\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"PrincipalShare\",\n            \"docs\": [\n                \"Generic tracker for interest and emissions earned by deposits\"\n            ],\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"tick_idx\",\n                        \"docs\": [\n                            \"tick_idx\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"right_tick_idx\",\n                        \"docs\": [\n                            \"tick_idx\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"split_epoch\",\n                        \"docs\": [\n                            \"inserted_split_epoch\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lp_share\",\n                        \"docs\": [\n                            \"lp share\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"emissions\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"PrincipalShareTrackers\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trackers\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"PrincipalShare\"\n                                }\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"PrincipleDetails\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"administrators\",\n                        \"type\": {\n                            \"vec\": \"pubkey\"\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"Principles\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"hot_admin\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"cold_admin\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"pause_admin\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"reserved1\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"reserved2\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"reserved3\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipleDetails\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"SellPtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"seller_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_base_out\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"SellYtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trader_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_yt_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_yt_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_received_from_merge\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_spent_buying_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"pt_borrowed_and_repaid\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"StripEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"depositor\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"vault\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"authority\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"sy_src\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"escrow_sy\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yt_dst\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"pt_dst\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_yt\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_pt\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yield_position\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_py_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"total_sy_in_escrow\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"pt_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"yt_balance\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"all_time_high_sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"sy_for_pt\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"unix_timestamp\",\n                        \"type\": \"i64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"SwapDirection\",\n            \"type\": {\n                \"kind\": \"enum\",\n                \"variants\": [\n                    {\n                        \"name\": \"PtToSy\"\n                    },\n                    {\n                        \"name\": \"SyToPt\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"TradePtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"trader_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_trader\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"swap_direction\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"SwapDirection\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"is_current_flash_swap\",\n                        \"type\": \"bool\"\n                    },\n                    {\n                        \"name\": \"amount_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"total_fee\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"treasury_fee\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tick_after_trade\",\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"current_spot_price\",\n                        \"type\": \"f64\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"modified_ticks\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"ModifiedTicks\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"Vault\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"sy_program\",\n                        \"docs\": [\n                            \"Link to SY program\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_sy\",\n                        \"docs\": [\n                            \"Mint for SY token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_yt\",\n                        \"docs\": [\n                            \"Mint for the vault-specific YT token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"mint_pt\",\n                        \"docs\": [\n                            \"Mint for the vault-specific PT token\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"escrow_yt\",\n                        \"docs\": [\n                            \"Escrow account for holding deposited YT\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"escrow_sy\",\n                        \"docs\": [\n                            \"Escrow account that holds temporary SY tokens\",\n                            \"As an interchange between users and the SY program\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yield_position\",\n                        \"docs\": [\n                            \"Link to a vault-owned YT position\",\n                            \"This account collects yield from all \\\"unstaked\\\" YT\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"address_lookup_table\",\n                        \"docs\": [\n                            \"Address lookup table key for vault\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"start_ts\",\n                        \"docs\": [\n                            \"start timestamp\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"duration\",\n                        \"docs\": [\n                            \"seconds duration\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"signer_seed\",\n                        \"docs\": [\n                            \"Seed for CPI signing\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"authority\",\n                        \"docs\": [\n                            \"Authority for CPI signing\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"signer_bump\",\n                        \"docs\": [\n                            \"bump for signer authority PDA\"\n                        ],\n                        \"type\": {\n                            \"array\": [\n                                \"u8\",\n                                1\n                            ]\n                        }\n                    },\n                    {\n                        \"name\": \"last_seen_sy_exchange_rate\",\n                        \"docs\": [\n                            \"Last seen SY exchange rate\",\n                            \"This continues to be updated even after vault maturity to track SY appreciation for treasury collection\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"all_time_high_sy_exchange_rate\",\n                        \"docs\": [\n                            \"This is the all time high exchange rate for SY\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"final_sy_exchange_rate\",\n                        \"docs\": [\n                            \"This is the exchange rate for SY when the vault expires\"\n                        ],\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"total_sy_in_escrow\",\n                        \"docs\": [\n                            \"How much SY is held in escrow\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"sy_for_pt\",\n                        \"docs\": [\n                            \"The total SY set aside to back the PT holders\",\n                            \"This value is updated on every operation that touches the PT supply or the last seen exchange rate\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"pt_supply\",\n                        \"docs\": [\n                            \"Total supply of PT\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"treasury_sy\",\n                        \"docs\": [\n                            \"Amount of SY staged for the treasury\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"uncollected_sy\",\n                        \"docs\": [\n                            \"SY that has been earned by YT, but not yet collected\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"treasury_sy_token_account\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"interest_bps_fee\",\n                        \"type\": \"u16\"\n                    },\n                    {\n                        \"name\": \"min_op_size_strip\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"min_op_size_merge\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"status\",\n                        \"type\": \"u8\"\n                    },\n                    {\n                        \"name\": \"emissions\",\n                        \"type\": {\n                            \"vec\": {\n                                \"defined\": {\n                                    \"name\": \"EmissionInfo\"\n                                }\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"cpi_accounts\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"CpiAccounts\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"claim_limits\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"ClaimLimits\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"max_py_supply\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WithdrawLiquidityEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"withdrawer_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_pt_withdrawer\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"token_sy_withdrawer\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"liquidity_to_remove\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"docs\": [\n                            \"Total PT amount removed (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"docs\": [\n                            \"Total SY amount removed (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"new_lp_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"docs\": [\n                            \"Lower tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"docs\": [\n                            \"Upper tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"lp_position\",\n                        \"docs\": [\n                            \"LP position account address\"\n                        ],\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_balance_after\",\n                        \"docs\": [\n                            \"Total LP balance after this withdrawal\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_sy_collected\",\n                        \"docs\": [\n                            \"SY fees collected during this withdrawal\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_pt_collected\",\n                        \"docs\": [\n                            \"PT fees collected during this withdrawal\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"docs\": [\n                            \"Remaining unclaimed SY fees (after collection, should be 0)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"docs\": [\n                            \"Remaining unclaimed PT fees (after collection, should be 0)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"farms\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PersonalYieldTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"share_trackers\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"PrincipalShareTrackers\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_inside_last_pt\",\n                        \"docs\": [\n                            \"Last snapshot of inside PT fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    },\n                    {\n                        \"name\": \"fee_inside_last_sy\",\n                        \"docs\": [\n                            \"Last snapshot of inside SY fee growth\"\n                        ],\n                        \"type\": \"u128\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WithdrawLiquidityReturnData\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"liquidity_to_remove\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"docs\": [\n                            \"Total PT amount removed (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"docs\": [\n                            \"Total SY amount removed (distributed across ticks in range)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"new_lp_supply\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"lower_tick\",\n                        \"docs\": [\n                            \"Lower tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"upper_tick\",\n                        \"docs\": [\n                            \"Upper tick boundary of the position\"\n                        ],\n                        \"type\": \"u32\"\n                    },\n                    {\n                        \"name\": \"fee_sy_collected\",\n                        \"docs\": [\n                            \"LP position account address\",\n                            \"SY fees collected during this withdrawal\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_pt_collected\",\n                        \"docs\": [\n                            \"PT fees collected during this withdrawal\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_sy\",\n                        \"docs\": [\n                            \"Remaining unclaimed SY fees (after collection, should be 0)\"\n                        ],\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"tokens_owed_pt\",\n                        \"docs\": [\n                            \"Remaining unclaimed PT fees (after collection, should be 0)\"\n                        ],\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperBuyYtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"buyer_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yt_out_amount\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"base_in_amount\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityBaseEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"user_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"lp_position_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"trade_amount_pt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"trade_amount_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_lp_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"asset_value_lp_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_pt_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_sy_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityClassicEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"user_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_lp_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"asset_value_lp_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_pt_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_sy_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"lp_position_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperProvideLiquidityEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"user_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_lp_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_yt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"asset_value_lp_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_pt_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_sy_in\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_yt_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"lp_position_address\",\n                        \"type\": \"pubkey\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperSellYtEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"seller_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"yt_in_amount\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_base_out\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperWithdrawLiquidityClassicEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"user_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_lp_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"asset_value_lp_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_pt_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_sy_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"lp_position_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_sy_collected\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_pt_collected\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        },\n        {\n            \"name\": \"WrapperWithdrawLiquidityEvent\",\n            \"type\": {\n                \"kind\": \"struct\",\n                \"fields\": [\n                    {\n                        \"name\": \"user_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"market_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"amount_base_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_lp_in\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_pt_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"amount_sy_out\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"asset_value_lp_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_pt_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"asset_value_sy_out\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"lp_position_address\",\n                        \"type\": \"pubkey\"\n                    },\n                    {\n                        \"name\": \"sy_exchange_rate\",\n                        \"type\": {\n                            \"defined\": {\n                                \"name\": \"Number\"\n                            }\n                        }\n                    },\n                    {\n                        \"name\": \"fee_sy_collected\",\n                        \"type\": \"u64\"\n                    },\n                    {\n                        \"name\": \"fee_pt_collected\",\n                        \"type\": \"u64\"\n                    }\n                ]\n            }\n        }\n    ]\n}\n","{\n  \"address\": \"ExponentnaRg3CQbW6dqQNZKXp7gtZ9DGMp1cwC4HAS7\",\n  \"metadata\": {\n    \"name\": \"exponent_core\",\n    \"version\": \"0.1.0\",\n    \"spec\": \"0.1.0\",\n    \"description\": \"Created with Anchor\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"add_emission\",\n      \"discriminator\": [\n        18\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"authority\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"admin\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"robot_token_account\",\n          \"docs\": [\n            \"Assert that the new token account is owned by the vault\"\n          ]\n        },\n        {\n          \"name\": \"treasury_token_account\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Increase the robot's position size\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"cpi_accounts\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CpiAccounts\"\n            }\n          }\n        },\n        {\n          \"name\": \"treasury_fee_bps\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"add_farm\",\n      \"discriminator\": [\n        22\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"mint_new\"\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"token_source\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_farm\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"token_rate\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"until_timestamp\",\n          \"type\": \"u32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"add_lp_tokens_metadata\",\n      \"discriminator\": [\n        41\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin\"\n        },\n        {\n          \"name\": \"market\"\n        },\n        {\n          \"name\": \"mint_lp\"\n        },\n        {\n          \"name\": \"metadata\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_metadata_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"uri\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"add_market_emission\",\n      \"discriminator\": [\n        25\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"mint_new\"\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"token_emission\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"cpi_accounts\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CpiAccounts\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"buy_yt\",\n      \"docs\": [\n        \"Buy YT with SY\"\n      ],\n      \"discriminator\": [\n        0\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"trader\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"docs\": [\n            \"Source account for the trader's SY tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_trader\",\n          \"docs\": [\n            \"Destination for receiving YT tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"Temporary SY account owned by market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity owned by market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"vault_authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table_vault\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"sy_in\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"yt_out\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"BuyYtEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"claim_farm_emissions\",\n      \"discriminator\": [\n        24\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\"\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint\"\n        },\n        {\n          \"name\": \"token_farm\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Amount\"\n            }\n          }\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"ClaimFarmEmissionsEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"collect_emission\",\n      \"discriminator\": [\n        19\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"emission_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"emission_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"treasury_emission_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Amount\"\n            }\n          }\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"CollectEmissionEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"collect_interest\",\n      \"discriminator\": [\n        6\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"docs\": [\n            \"Owner of the YieldTokenPosition\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Owner's position data for YT deposits\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"docs\": [\n            \"The vault that holds the SY tokens in escrow\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_dst\",\n          \"docs\": [\n            \"The receiving token account for SY withdrawn\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"treasury_sy_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Amount\"\n            }\n          }\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"CollectInterestEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"collect_treasury_emission\",\n      \"discriminator\": [\n        20\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"constrained by vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"constrained by vault\"\n          ]\n        },\n        {\n          \"name\": \"emission_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"emission_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"admin\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"emission_index\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Amount\"\n            }\n          }\n        },\n        {\n          \"name\": \"kind\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CollectTreasuryEmissionKind\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"collect_treasury_interest\",\n      \"discriminator\": [\n        21\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"docs\": [\n            \"The vault that holds the SY tokens in escrow\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_dst\",\n          \"docs\": [\n            \"The receiving token account for SY withdrawn\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"admin\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Amount\"\n            }\n          }\n        },\n        {\n          \"name\": \"kind\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CollectTreasuryInterestKind\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit_yt\",\n      \"docs\": [\n        \"Deposit YT into escrow in order to earn rewards & SY interest\"\n      ],\n      \"discriminator\": [\n        7\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"docs\": [\n            \"Permissionless depositor - not necessarily the owner of the YieldTokenPosition\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"docs\": [\n            \"Vault that manages YT\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"docs\": [\n            \"Position data for YT deposits, linked to vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"yt_src\",\n          \"docs\": [\n            \"Depositor's YT token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"docs\": [\n            \"Vault-owned escrow account for YT\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\",\n          \"docs\": [\n            \"The SY interface implementation for the vault's token\"\n          ]\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Vault-owned yield token position\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"DepositYtEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"init_lp_position\",\n      \"docs\": [\n        \"Initialize a LP position for a user to deposit LP tokens into\"\n      ],\n      \"discriminator\": [\n        13\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fee_payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"owner\"\n        },\n        {\n          \"name\": \"market\"\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"InitLpPositionEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"init_market_two\",\n      \"discriminator\": [\n        10\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin_signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"docs\": [\n            \"There is 1 market per vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"docs\": [\n            \"Links the mint_sy & mint_pt & sy_program together\"\n          ]\n        },\n        {\n          \"name\": \"mint_sy\"\n        },\n        {\n          \"name\": \"mint_pt\"\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"docs\": [\n            \"This account for SY is only a temporary pass-through account\",\n            \"It is used to transfer SY tokens from the signer to the market\",\n            \"And then from the market to the SY program's escrow\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_lp\",\n          \"docs\": [\n            \"Holds activated LP tokens for farming & SY emissions\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"pt_src\",\n          \"docs\": [\n            \"Signer's PT token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_src\",\n          \"docs\": [\n            \"Signer's SY token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_dst\",\n          \"docs\": [\n            \"Receiving account for LP tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Use the old Token program as the implementation for PT & SY & LP tokens\"\n          ]\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"associated_token_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"admin\"\n        },\n        {\n          \"name\": \"token_treasury_fee_sy\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"ln_fee_rate_root\",\n          \"type\": \"f64\"\n        },\n        {\n          \"name\": \"rate_scalar_root\",\n          \"type\": \"f64\"\n        },\n        {\n          \"name\": \"init_rate_anchor\",\n          \"type\": \"f64\"\n        },\n        {\n          \"name\": \"sy_exchange_rate\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"Number\"\n            }\n          }\n        },\n        {\n          \"name\": \"pt_init\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sy_init\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"fee_treasury_sy_bps\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"cpi_accounts\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CpiAccounts\"\n            }\n          }\n        },\n        {\n          \"name\": \"seed_id\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_vault\",\n      \"docs\": [\n        \"High-trust function to init vault\"\n      ],\n      \"discriminator\": [\n        2\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin\"\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"The signer for the vault\"\n          ]\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_sy\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"treasury_token_account\"\n        },\n        {\n          \"name\": \"associated_token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"metadata\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_metadata_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"start_timestamp\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"duration\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"interest_bps_fee\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"cpi_accounts\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CpiAccounts\"\n            }\n          }\n        },\n        {\n          \"name\": \"min_op_size_strip\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_op_size_merge\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"pt_metadata_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"pt_metadata_symbol\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"pt_metadata_uri\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initialize_yield_position\",\n      \"discriminator\": [\n        3\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"docs\": [\n            \"Owner of the new YieldTokenPosition\",\n            \"ie - the \\\"owner\\\" is not a Signer\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"InitializeYieldPositionEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"market_collect_emission\",\n      \"docs\": [\n        \"Collect a staged emission\"\n      ],\n      \"discriminator\": [\n        16\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_emission_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_emission_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"emission_index\",\n          \"type\": \"u16\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"MarketCollectEmissionEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"market_deposit_lp\",\n      \"docs\": [\n        \"Deposit LP tokens into a personal LP position account\"\n      ],\n      \"discriminator\": [\n        14\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"DepositLpEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"market_two_deposit_liquidity\",\n      \"discriminator\": [\n        11\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\",\n          \"docs\": [\n            \"Address lookup table for vault\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"pt_intent\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sy_intent\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_lp_out\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"DepositLiquidityEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"market_two_withdraw_liquidity\",\n      \"discriminator\": [\n        12\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"withdrawer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"Market PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"Market-owned interchange account for SY\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\",\n          \"docs\": [\n            \"Address lookup table for vault\"\n          ]\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"lp_in\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_pt_out\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_sy_out\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"WithdrawLiquidityEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"market_withdraw_lp\",\n      \"docs\": [\n        \"Withdraw LP tokens from personal LP position account\"\n      ],\n      \"discriminator\": [\n        15\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\"\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"WithdrawLpEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"merge\",\n      \"docs\": [\n        \"Merge PT + YT into SY\",\n        \"Redeems & burns them, in exchange for SY\"\n      ],\n      \"discriminator\": [\n        5\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"This authority owns the escrow_sy account & the robot account with the SY program\",\n            \"Needs to be mutable to be used in deposit_sy CPI\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_dst\",\n          \"docs\": [\n            \"Destination account for SY withdrawn from vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"docs\": [\n            \"Vault-owned account for SY tokens\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"yt_src\",\n          \"docs\": [\n            \"The owner's YT token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"pt_src\",\n          \"docs\": [\n            \"The owner's PT token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"docs\": [\n            \"Mint for YT -- needed for burning\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"docs\": [\n            \"Mint for PT -- needed for burning\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Yield position for the vault robot account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"MergeEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"modify_farm\",\n      \"discriminator\": [\n        23\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"signer\": true\n        },\n        {\n          \"name\": \"mint\"\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"token_source\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_farm\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"until_timestamp\",\n          \"type\": \"u32\"\n        },\n        {\n          \"name\": \"new_rate\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"modify_market_setting\",\n      \"discriminator\": [\n        27\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"action\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"MarketAdminAction\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"modify_vault_setting\",\n      \"discriminator\": [\n        26\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"system_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"action\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"AdminAction\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"realloc_market\",\n      \"discriminator\": [\n        40\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"admin_state\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"rent\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"additional_bytes\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"sell_yt\",\n      \"docs\": [\n        \"Sell YT for SY\"\n      ],\n      \"discriminator\": [\n        1\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"trader\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"Account owned by market\",\n            \"This is a temporary account that receives SY tokens from the user, after which it transfers them to the SY program\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority_vault\",\n          \"docs\": [\n            \"Vault-robot authority\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow_vault\",\n          \"docs\": [\n            \"Vault-robot owned escrow account for SY\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table_vault\",\n          \"docs\": [\n            \"ALT owned by vault\"\n          ]\n        },\n        {\n          \"name\": \"yield_position_vault\",\n          \"docs\": [\n            \"Yield position owned by vault robot\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"yt_in\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_sy_out\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"SellYtEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"stage_yt_yield\",\n      \"discriminator\": [\n        9\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"docs\": [\n            \"Position data for YT deposits, linked to vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Yield position for the vault robot account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"StageYieldEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"strip\",\n      \"docs\": [\n        \"Strip SY into PT + YT\"\n      ],\n      \"discriminator\": [\n        4\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"This account owns the mints for PT & YT\",\n            \"And owns the robot account with the SY program\",\n            \"Needs to be mutable to be used in deposit_sy CPI\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_src\",\n          \"docs\": [\n            \"Depositor's SY token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"docs\": [\n            \"Temporary account owned by the vault for receiving SY tokens before depositing into the SY Program's escrow account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"yt_dst\",\n          \"docs\": [\n            \"Final destination for receiving YT (probably, but not necessarily, owned by the depositor)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"pt_dst\",\n          \"docs\": [\n            \"Final destination for receiving PT (probably, but not necessarily, owned by the depositor)\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"address_lookup_table\",\n          \"docs\": [\n            \"Address lookup table for vault\"\n          ]\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"docs\": [\n            \"Vault-owned yield position account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"StripEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"trade_pt\",\n      \"discriminator\": [\n        17\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"trader\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"docs\": [\n            \"Trader's SY token account\",\n            \"Mint is constrained by TokenProgram\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"docs\": [\n            \"Receiving PT token account\",\n            \"Mint is constrained by TokenProgram\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"Account owned by market\",\n            \"This is a temporary account that receives SY tokens from the user, after which it transfers them to the SY program\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"net_trader_pt\",\n          \"type\": \"i64\"\n        },\n        {\n          \"name\": \"sy_constraint\",\n          \"type\": \"i64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"TradePtEvent\"\n        }\n      }\n    },\n    {\n      \"name\": \"withdraw_yt\",\n      \"discriminator\": [\n        8\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"docs\": [\n            \"Vault that manages YT\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"docs\": [\n            \"Position data for YT deposits, linked to vault\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"yt_dst\",\n          \"docs\": [\n            \"Withdrawer's YT token account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"docs\": [\n            \"Vault-owned escrow account for YT\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"authority\"\n        },\n        {\n          \"name\": \"sy_program\",\n          \"docs\": [\n            \"The SY interface implementation for the vault's token\"\n          ]\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ],\n      \"returns\": {\n        \"defined\": {\n          \"name\": \"WithdrawYtEventV2\"\n        }\n      }\n    },\n    {\n      \"name\": \"wrapper_buy_pt\",\n      \"discriminator\": [\n        29\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"buyer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"pt_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_base_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_sy_rem_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_buy_yt\",\n      \"discriminator\": [\n        31\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"buyer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"vault_authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_address_lookup_table\"\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"yt_out\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"max_base_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_sy_accounts_length\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_collect_interest\",\n      \"discriminator\": [\n        33\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"claimer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"The authority owned by the vault for minting PT/YT\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"treasury_sy_token_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"redeem_sy_accounts_length\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_merge\",\n      \"discriminator\": [\n        39\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"merger\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"token_sy_merger\",\n          \"docs\": [\n            \"Token account for SY owned by the merger\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_merger\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_merger\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"vault_robot_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_py\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"redeem_sy_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_provide_liquidity\",\n      \"docs\": [\n        \"Provide liquidity to a market starting with a base asset\",\n        \"This instruction\",\n        \"- deposits base asset for SY\",\n        \"- strips a portion of the SY into PT & YT\",\n        \"- provides the remaining SY with the PT into the market\",\n        \"- keeps the YT\",\n        \"\",\n        \"# Arguments\",\n        \"- `amount_base` - The amount of base asset to deposit\",\n        \"- `min_lp_out` - The minimum amount of LP tokens to receive\",\n        \"- `mint_base_accounts_until` - The index of the account to use for the base asset mint\"\n      ],\n      \"discriminator\": [\n        28\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"docs\": [\n            \"The authority owned by the vault for minting PT/YT\"\n          ]\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"SY token account owned by the market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_depositor\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_depositor\",\n          \"docs\": [\n            \"Token account for YT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_depositor\",\n          \"docs\": [\n            \"Token account for PT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"vault_address_lookup_table\"\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_robot_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_base\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_lp_out\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_base_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_provide_liquidity_base\",\n      \"discriminator\": [\n        36\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"SY token account owned by the market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_depositor\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_depositor\",\n          \"docs\": [\n            \"Token account for PT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_base\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_lp_out\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_sy_accounts_until\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"external_pt_to_buy\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"external_sy_constraint\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_provide_liquidity_classic\",\n      \"discriminator\": [\n        37\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"SY token account owned by the market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_dst\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_depositor\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_depositor\",\n          \"docs\": [\n            \"Token account for PT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_base\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"amount_pt\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_lp_out\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_sy_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_sell_pt\",\n      \"discriminator\": [\n        30\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"seller\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_pt\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_base_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"redeem_sy_rem_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_sell_yt\",\n      \"discriminator\": [\n        32\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"seller\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_trader\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"vault_authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_address_lookup_table\"\n        },\n        {\n          \"name\": \"yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"yt_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"min_base_amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"redeem_sy_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_strip\",\n      \"discriminator\": [\n        38\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"depositor\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"token_sy_depositor\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"escrow_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_yt_depositor\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_depositor\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_pt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"authority\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_address_lookup_table\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"escrow_yt\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"user_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"vault_robot_yield_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_base\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"mint_sy_accounts_until\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_withdraw_liquidity\",\n      \"discriminator\": [\n        34\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"withdrawer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"SY token account owned by the market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_withdrawer\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_withdrawer\",\n          \"docs\": [\n            \"Token account for PT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_fee_treasury_sy\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_lp\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sy_constraint\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"redeem_sy_accounts_length\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"wrapper_withdraw_liquidity_classic\",\n      \"discriminator\": [\n        35\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"withdrawer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"market\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_escrow\",\n          \"docs\": [\n            \"PT liquidity account\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_escrow\",\n          \"docs\": [\n            \"SY token account owned by the market\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_lp_src\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"mint_lp\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_sy_withdrawer\",\n          \"docs\": [\n            \"Token account for SY owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_pt_withdrawer\",\n          \"docs\": [\n            \"Token account for PT owned by the depositor\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"market_address_lookup_table\"\n        },\n        {\n          \"name\": \"sy_program\"\n        },\n        {\n          \"name\": \"token_lp_escrow\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_position\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\"\n        },\n        {\n          \"name\": \"event_authority\"\n        },\n        {\n          \"name\": \"program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount_lp\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"redeem_sy_accounts_length\",\n          \"type\": \"u8\"\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"Admin\",\n      \"discriminator\": [\n        244,\n        158,\n        220,\n        65,\n        8,\n        73,\n        4,\n        65\n      ]\n    },\n    {\n      \"name\": \"LpPosition\",\n      \"discriminator\": [\n        105,\n        241,\n        37,\n        200,\n        224,\n        2,\n        252,\n        90\n      ]\n    },\n    {\n      \"name\": \"MarketTwo\",\n      \"discriminator\": [\n        212,\n        4,\n        132,\n        126,\n        169,\n        121,\n        121,\n        20\n      ]\n    },\n    {\n      \"name\": \"Vault\",\n      \"discriminator\": [\n        211,\n        8,\n        232,\n        43,\n        2,\n        152,\n        117,\n        119\n      ]\n    },\n    {\n      \"name\": \"YieldTokenPosition\",\n      \"discriminator\": [\n        227,\n        92,\n        146,\n        49,\n        29,\n        85,\n        71,\n        94\n      ]\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"BuyPtEvent\",\n      \"discriminator\": [\n        62,\n        132,\n        50,\n        43,\n        219,\n        234,\n        221,\n        167\n      ]\n    },\n    {\n      \"name\": \"BuyYtEvent\",\n      \"discriminator\": [\n        172,\n        181,\n        56,\n        183,\n        219,\n        24,\n        130,\n        64\n      ]\n    },\n    {\n      \"name\": \"ClaimFarmEmissionsEvent\",\n      \"discriminator\": [\n        184,\n        10,\n        159,\n        144,\n        144,\n        194,\n        166,\n        92\n      ]\n    },\n    {\n      \"name\": \"ClaimFarmEmissionsEventV2\",\n      \"discriminator\": [\n        179,\n        43,\n        141,\n        15,\n        184,\n        80,\n        2,\n        47\n      ]\n    },\n    {\n      \"name\": \"CollectEmissionEvent\",\n      \"discriminator\": [\n        220,\n        173,\n        217,\n        52,\n        133,\n        253,\n        5,\n        114\n      ]\n    },\n    {\n      \"name\": \"CollectEmissionEventV2\",\n      \"discriminator\": [\n        235,\n        35,\n        233,\n        149,\n        215,\n        221,\n        100,\n        66\n      ]\n    },\n    {\n      \"name\": \"CollectInterestEvent\",\n      \"discriminator\": [\n        95,\n        53,\n        16,\n        82,\n        91,\n        39,\n        176,\n        252\n      ]\n    },\n    {\n      \"name\": \"CollectInterestEventV2\",\n      \"discriminator\": [\n        208,\n        173,\n        139,\n        10,\n        96,\n        51,\n        184,\n        154\n      ]\n    },\n    {\n      \"name\": \"DepositLiquidityEvent\",\n      \"discriminator\": [\n        169,\n        84,\n        67,\n        174,\n        222,\n        138,\n        16,\n        123\n      ]\n    },\n    {\n      \"name\": \"DepositLpEvent\",\n      \"discriminator\": [\n        118,\n        20,\n        164,\n        8,\n        112,\n        130,\n        3,\n        62\n      ]\n    },\n    {\n      \"name\": \"DepositLpEventV2\",\n      \"discriminator\": [\n        49,\n        159,\n        183,\n        208,\n        173,\n        243,\n        36,\n        137\n      ]\n    },\n    {\n      \"name\": \"DepositYtEvent\",\n      \"discriminator\": [\n        78,\n        226,\n        18,\n        115,\n        161,\n        164,\n        137,\n        112\n      ]\n    },\n    {\n      \"name\": \"DepositYtEventV2\",\n      \"discriminator\": [\n        24,\n        10,\n        201,\n        118,\n        79,\n        178,\n        237,\n        243\n      ]\n    },\n    {\n      \"name\": \"InitLpPositionEvent\",\n      \"discriminator\": [\n        7,\n        245,\n        31,\n        228,\n        42,\n        49,\n        201,\n        192\n      ]\n    },\n    {\n      \"name\": \"InitializeYieldPositionEvent\",\n      \"discriminator\": [\n        114,\n        53,\n        131,\n        31,\n        90,\n        57,\n        208,\n        196\n      ]\n    },\n    {\n      \"name\": \"MarketCollectEmissionEvent\",\n      \"discriminator\": [\n        125,\n        129,\n        15,\n        139,\n        232,\n        244,\n        82,\n        67\n      ]\n    },\n    {\n      \"name\": \"MarketCollectEmissionEventV2\",\n      \"discriminator\": [\n        173,\n        158,\n        156,\n        218,\n        11,\n        243,\n        57,\n        54\n      ]\n    },\n    {\n      \"name\": \"MergeEvent\",\n      \"discriminator\": [\n        25,\n        30,\n        29,\n        41,\n        108,\n        139,\n        103,\n        4\n      ]\n    },\n    {\n      \"name\": \"SellPtEvent\",\n      \"discriminator\": [\n        103,\n        139,\n        188,\n        216,\n        68,\n        124,\n        110,\n        63\n      ]\n    },\n    {\n      \"name\": \"SellYtEvent\",\n      \"discriminator\": [\n        149,\n        147,\n        29,\n        159,\n        148,\n        240,\n        129,\n        7\n      ]\n    },\n    {\n      \"name\": \"StageYieldEvent\",\n      \"discriminator\": [\n        248,\n        92,\n        96,\n        80,\n        238,\n        94,\n        91,\n        195\n      ]\n    },\n    {\n      \"name\": \"StageYieldEventV2\",\n      \"discriminator\": [\n        23,\n        7,\n        36,\n        198,\n        5,\n        216,\n        217,\n        189\n      ]\n    },\n    {\n      \"name\": \"StripEvent\",\n      \"discriminator\": [\n        114,\n        189,\n        26,\n        143,\n        143,\n        50,\n        197,\n        89\n      ]\n    },\n    {\n      \"name\": \"TradePtEvent\",\n      \"discriminator\": [\n        159,\n        225,\n        96,\n        81,\n        255,\n        227,\n        233,\n        174\n      ]\n    },\n    {\n      \"name\": \"WithdrawLiquidityEvent\",\n      \"discriminator\": [\n        214,\n        6,\n        161,\n        45,\n        191,\n        142,\n        124,\n        186\n      ]\n    },\n    {\n      \"name\": \"WithdrawLpEvent\",\n      \"discriminator\": [\n        200,\n        158,\n        208,\n        54,\n        94,\n        239,\n        92,\n        222\n      ]\n    },\n    {\n      \"name\": \"WithdrawLpEventV2\",\n      \"discriminator\": [\n        17,\n        227,\n        69,\n        154,\n        238,\n        182,\n        86,\n        33\n      ]\n    },\n    {\n      \"name\": \"WithdrawYtEvent\",\n      \"discriminator\": [\n        190,\n        66,\n        234,\n        53,\n        4,\n        207,\n        221,\n        17\n      ]\n    },\n    {\n      \"name\": \"WithdrawYtEventV2\",\n      \"discriminator\": [\n        41,\n        253,\n        139,\n        142,\n        167,\n        187,\n        86,\n        118\n      ]\n    },\n    {\n      \"name\": \"WrapperBuyYtEvent\",\n      \"discriminator\": [\n        148,\n        95,\n        21,\n        54,\n        99,\n        16,\n        15,\n        40\n      ]\n    },\n    {\n      \"name\": \"WrapperCollectInterestEvent\",\n      \"discriminator\": [\n        177,\n        39,\n        249,\n        210,\n        72,\n        117,\n        16,\n        192\n      ]\n    },\n    {\n      \"name\": \"WrapperMergeEvent\",\n      \"discriminator\": [\n        97,\n        26,\n        173,\n        147,\n        157,\n        218,\n        37,\n        102\n      ]\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityBaseEvent\",\n      \"discriminator\": [\n        60,\n        121,\n        164,\n        93,\n        220,\n        13,\n        142,\n        197\n      ]\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityClassicEvent\",\n      \"discriminator\": [\n        87,\n        163,\n        150,\n        162,\n        186,\n        147,\n        234,\n        200\n      ]\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityEvent\",\n      \"discriminator\": [\n        209,\n        42,\n        227,\n        77,\n        187,\n        216,\n        17,\n        177\n      ]\n    },\n    {\n      \"name\": \"WrapperSellYtEvent\",\n      \"discriminator\": [\n        252,\n        140,\n        45,\n        253,\n        6,\n        94,\n        95,\n        135\n      ]\n    },\n    {\n      \"name\": \"WrapperStripEvent\",\n      \"discriminator\": [\n        70,\n        128,\n        226,\n        182,\n        17,\n        99,\n        235,\n        18\n      ]\n    },\n    {\n      \"name\": \"WrapperWithdrawLiquidityClassicEvent\",\n      \"discriminator\": [\n        18,\n        154,\n        212,\n        39,\n        36,\n        23,\n        158,\n        124\n      ]\n    },\n    {\n      \"name\": \"WrapperWithdrawLiquidityEvent\",\n      \"discriminator\": [\n        52,\n        32,\n        180,\n        241,\n        36,\n        221,\n        72,\n        167\n      ]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"InvalidProxyAccount\",\n      \"msg\": \"Invalid Proxy Account\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"VaultExpired\",\n      \"msg\": \"Vault is expired\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"EmissionIndexMustBeSequential\",\n      \"msg\": \"Emission Index must be sequential\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"AmountLargerThanStaged\",\n      \"msg\": \"Amount larger than staged\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"MathOverflow\",\n      \"msg\": \"Math overflow\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"DurationNegative\",\n      \"msg\": \"Duration is negative\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"FarmDoesNotExist\",\n      \"msg\": \"Farm does not exist\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"LpSupplyMaximumExceeded\",\n      \"msg\": \"Lp supply maximum exceeded\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"VaultIsNotActive\",\n      \"msg\": \"Vault has not started yet or has ended\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"OperationAmountTooSmall\",\n      \"msg\": \"Operation amount too small\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"StrippingDisabled\",\n      \"msg\": \"Stripping is disabled\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"MergingDisabled\",\n      \"msg\": \"Merging is disabled\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"DepositingYtDisabled\",\n      \"msg\": \"Depositing YT is disabled\"\n    },\n    {\n      \"code\": 6013,\n      \"name\": \"WithdrawingYtDisabled\",\n      \"msg\": \"Withdrawing YT is disabled\"\n    },\n    {\n      \"code\": 6014,\n      \"name\": \"CollectingInterestDisabled\",\n      \"msg\": \"Collecting interest is disabled\"\n    },\n    {\n      \"code\": 6015,\n      \"name\": \"CollectingEmissionsDisabled\",\n      \"msg\": \"Collecting Emissions is disabled\"\n    },\n    {\n      \"code\": 6016,\n      \"name\": \"BuyingPtDisabled\",\n      \"msg\": \"Buying PT is disabled\"\n    },\n    {\n      \"code\": 6017,\n      \"name\": \"SellingPtDisabled\",\n      \"msg\": \"Selling PT is disabled\"\n    },\n    {\n      \"code\": 6018,\n      \"name\": \"BuyingYtDisabled\",\n      \"msg\": \"Buying YT is disabled\"\n    },\n    {\n      \"code\": 6019,\n      \"name\": \"SellingYtDisabled\",\n      \"msg\": \"Selling YT is disabled\"\n    },\n    {\n      \"code\": 6020,\n      \"name\": \"DepositingLiquidityDisabled\",\n      \"msg\": \"Depositing Liquidity is disabled\"\n    },\n    {\n      \"code\": 6021,\n      \"name\": \"WithdrawingLiquidityDisabled\",\n      \"msg\": \"Withdrawing Liquidity is disabled\"\n    },\n    {\n      \"code\": 6022,\n      \"name\": \"VaultInEmergencyMode\",\n      \"msg\": \"Vault is in emergency mode\"\n    },\n    {\n      \"code\": 6023,\n      \"name\": \"FarmAlreadyExists\",\n      \"msg\": \"Farm already exists\"\n    },\n    {\n      \"code\": 6024,\n      \"name\": \"ClaimLimitExceeded\",\n      \"msg\": \"Claim limit exceeded\"\n    },\n    {\n      \"code\": 6025,\n      \"name\": \"NetBalanceChangeExceedsLimit\",\n      \"msg\": \"Net balance change exceeds limit\"\n    },\n    {\n      \"code\": 6026,\n      \"name\": \"MinSyOutNotMet\",\n      \"msg\": \"Min SY out not met\"\n    },\n    {\n      \"code\": 6027,\n      \"name\": \"MinPtOutNotMet\",\n      \"msg\": \"Min PT out not met\"\n    },\n    {\n      \"code\": 6028,\n      \"name\": \"MinLpOutNotMet\",\n      \"msg\": \"Min LP out not met\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"Admin\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"uber_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"proposed_uber_admin\",\n            \"type\": {\n              \"option\": \"pubkey\"\n            }\n          },\n          {\n            \"name\": \"principles\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Principles\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"AdminAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"SetVaultStatus\",\n            \"fields\": [\n              \"u8\"\n            ]\n          },\n          {\n            \"name\": \"ChangeVaultBpsFee\",\n            \"fields\": [\n              \"u16\"\n            ]\n          },\n          {\n            \"name\": \"ChangeVaultTreasuryTokenAccount\",\n            \"fields\": [\n              \"pubkey\"\n            ]\n          },\n          {\n            \"name\": \"ChangeEmissionTreasuryTokenAccount\",\n            \"fields\": [\n              {\n                \"name\": \"emission_index\",\n                \"type\": \"u16\"\n              },\n              {\n                \"name\": \"new_token_account\",\n                \"type\": \"pubkey\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeMinOperationSize\",\n            \"fields\": [\n              {\n                \"name\": \"is_strip\",\n                \"type\": \"bool\"\n              },\n              {\n                \"name\": \"new_size\",\n                \"type\": \"u64\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeEmissionBpsFee\",\n            \"fields\": [\n              {\n                \"name\": \"emission_index\",\n                \"type\": \"u16\"\n              },\n              {\n                \"name\": \"new_fee_bps\",\n                \"type\": \"u16\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeCpiAccounts\",\n            \"fields\": [\n              {\n                \"name\": \"cpi_accounts\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"CpiAccounts\"\n                  }\n                }\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeClaimLimits\",\n            \"fields\": [\n              {\n                \"name\": \"max_claim_amount_per_window\",\n                \"type\": \"u64\"\n              },\n              {\n                \"name\": \"claim_window_duration_seconds\",\n                \"type\": \"u32\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeMaxPySupply\",\n            \"fields\": [\n              {\n                \"name\": \"new_max_py_supply\",\n                \"type\": \"u64\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeAddressLookupTable\",\n            \"fields\": [\n              \"pubkey\"\n            ]\n          },\n          {\n            \"name\": \"RemoveVaultEmission\",\n            \"fields\": [\n              \"u8\"\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Amount\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"All\"\n          },\n          {\n            \"name\": \"Some\",\n            \"fields\": [\n              \"u64\"\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BuyPtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"buyer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"base_amount_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_amount_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"BuyYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_yt_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"max_sy_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"yt_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"sy_to_strip\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_borrowed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_repaid\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ClaimFarmEmissionsEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_farm\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_index\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"amount_claimed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"remaining_staged\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ClaimFarmEmissionsEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_farm\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"farm_index\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"amount_claimed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"remaining_staged\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          },\n          {\n            \"name\": \"farms\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ClaimLimits\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"claim_window_start_timestamp\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"total_claim_amount_in_window\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_claim_amount_per_window\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"claim_window_duration_seconds\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectEmissionEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"emission_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"amount_to_user\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_to_treasury\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectEmissionEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"emission_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"amount_to_user\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_to_treasury\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_interest\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectInterestEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_to_user\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_to_treasury\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectInterestEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_to_user\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_to_treasury\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_interest\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectTreasuryEmissionKind\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"YieldPosition\"\n          },\n          {\n            \"name\": \"TreasuryEmission\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CollectTreasuryInterestKind\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"YieldPosition\"\n          },\n          {\n            \"name\": \"TreasuryInterest\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CpiAccounts\",\n      \"docs\": [\n        \"Account lists for validating CPI calls to the SY program\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"get_sy_state\",\n            \"docs\": [\n              \"Fetch SY state\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"CpiInterfaceContext\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"deposit_sy\",\n            \"docs\": [\n              \"Deposit SY into personal account owned by vault\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"CpiInterfaceContext\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"withdraw_sy\",\n            \"docs\": [\n              \"Withdraw SY from personal account owned by vault\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"CpiInterfaceContext\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"claim_emission\",\n            \"docs\": [\n              \"Settle rewards for vault to accounts owned by the vault\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"vec\": {\n                  \"defined\": {\n                    \"name\": \"CpiInterfaceContext\"\n                  }\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"get_position_state\",\n            \"docs\": [\n              \"Get personal yield position\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"CpiInterfaceContext\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CpiInterfaceContext\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"alt_index\",\n            \"docs\": [\n              \"Address-lookup-table index\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"is_signer\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"is_writable\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositLiquidityEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"depositor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pt_intent\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_intent\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositLpEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositLpEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          },\n          {\n            \"name\": \"farms\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"depositor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"vault_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositYtEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"depositor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"vault_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_interest\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"EmissionInfo\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"token_account\",\n            \"docs\": [\n              \"The token account for the emission where the vault authority is the authority\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"initial_index\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_seen_index\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"final_index\",\n            \"docs\": [\n              \"The final index is used to track the last claimable index after the vault expires\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"treasury_token_account\",\n            \"docs\": [\n              \"The treasury token account for this reward\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_bps\",\n            \"docs\": [\n              \"The fee taken from emission collecting\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"treasury_emission\",\n            \"docs\": [\n              \"The lambo fund\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FarmEmission\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mint\",\n            \"docs\": [\n              \"Mint for the emission token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_rate\",\n            \"docs\": [\n              \"Rate at which the emission token is emitted per second\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"expiry_timestamp\",\n            \"docs\": [\n              \"Expiration timestamp for the emission token\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"index\",\n            \"docs\": [\n              \"Index for converting LP shares into earned emissions\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InitLpPositionEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"fee_payer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"num_emission_trackers\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"num_farm_emissions\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"InitializeYieldPositionEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LiquidityNetBalanceLimits\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"window_start_timestamp\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"window_start_net_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"max_net_balance_change_negative_percentage\",\n            \"docs\": [\n              \"Maximum allowed negative change in basis points (10000 = 100%)\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"max_net_balance_change_positive_percentage\",\n            \"docs\": [\n              \"Maximum allowed positive change in basis points (10000 = 100%)\",\n              \"Using u32 to allow for very large increases (up to ~429,496%)\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"window_duration_seconds\",\n            \"type\": \"u32\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LpFarm\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_seen_timestamp\",\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"farm_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"FarmEmission\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LpPosition\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"docs\": [\n              \"Link to address that owns this position\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"docs\": [\n              \"Link to market that manages the LP\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_balance\",\n            \"docs\": [\n              \"Track the LP balance of the user here\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"docs\": [\n              \"Tracker for emissions earned (paid in emission tokens)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          },\n          {\n            \"name\": \"farms\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketAdminAction\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"SetStatus\",\n            \"fields\": [\n              \"u8\"\n            ]\n          },\n          {\n            \"name\": \"SetMaxLpSupply\",\n            \"fields\": [\n              \"u64\"\n            ]\n          },\n          {\n            \"name\": \"ChangeTreasuryTradeSyBpsFee\",\n            \"fields\": [\n              \"u16\"\n            ]\n          },\n          {\n            \"name\": \"ChangeLnFeeRateRoot\",\n            \"fields\": [\n              \"f64\"\n            ]\n          },\n          {\n            \"name\": \"ChangeRateScalarRoot\",\n            \"fields\": [\n              \"f64\"\n            ]\n          },\n          {\n            \"name\": \"ChangeCpiAccounts\",\n            \"fields\": [\n              {\n                \"name\": \"cpi_accounts\",\n                \"type\": {\n                  \"defined\": {\n                    \"name\": \"CpiAccounts\"\n                  }\n                }\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeLiquidityNetBalanceLimits\",\n            \"fields\": [\n              {\n                \"name\": \"max_net_balance_change_negative_percentage\",\n                \"type\": \"u16\"\n              },\n              {\n                \"name\": \"max_net_balance_change_positive_percentage\",\n                \"type\": \"u32\"\n              },\n              {\n                \"name\": \"window_duration_seconds\",\n                \"type\": \"u32\"\n              }\n            ]\n          },\n          {\n            \"name\": \"ChangeAddressLookupTable\",\n            \"fields\": [\n              \"pubkey\"\n            ]\n          },\n          {\n            \"name\": \"RemoveMarketEmission\",\n            \"fields\": [\n              \"u8\"\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketCollectEmissionEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_emission_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_emission_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"emission_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"amount_collected\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketCollectEmissionEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_emission_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_emission_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"emission_index\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"amount_collected\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          },\n          {\n            \"name\": \"farms\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketEmission\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"token_escrow\",\n            \"docs\": [\n              \"Escrow account that receives the emissions from the SY program\",\n              \"And then passes them through to the user\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_share_index\",\n            \"docs\": [\n              \"Index for converting LP shares into earned emissions\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"last_seen_staged\",\n            \"docs\": [\n              \"The difference between the staged amount and collected emission amount\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketEmissions\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trackers\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"MarketEmission\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketFinancials\",\n      \"docs\": [\n        \"Financial parameters for the market\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"expiration_ts\",\n            \"docs\": [\n              \"Expiration timestamp, which is copied from the vault associated with the PT\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_balance\",\n            \"docs\": [\n              \"Balance of PT in the market\",\n              \"This amount is tracked separately to prevent bugs from token transfers directly to the market\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_balance\",\n            \"docs\": [\n              \"Balance of SY in the market\",\n              \"This amount is tracked separately to prevent bugs from token transfers directly to the market\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"ln_fee_rate_root\",\n            \"docs\": [\n              \"Initial log of fee rate, which decreases over time\"\n            ],\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"last_ln_implied_rate\",\n            \"docs\": [\n              \"Last seen log of implied rate (APY) for PT\",\n              \"Used to maintain continuity of the APY between trades over time\"\n            ],\n            \"type\": \"f64\"\n          },\n          {\n            \"name\": \"rate_scalar_root\",\n            \"docs\": [\n              \"Initial rate scalar, which increases over time\"\n            ],\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MarketTwo\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"address_lookup_table\",\n            \"docs\": [\n              \"Address to ALT\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_pt\",\n            \"docs\": [\n              \"Mint of the vault's PT token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_sy\",\n            \"docs\": [\n              \"Mint of the SY program's SY token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"docs\": [\n              \"Link to yield-stripping vault\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"docs\": [\n              \"Mint for the market's LP tokens\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_escrow\",\n            \"docs\": [\n              \"Holds the LP tokens that are earning emissions\",\n              \"This is where LP holders \\\"stake\\\" their LP tokens\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"docs\": [\n              \"Token account that holds PT liquidity\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"docs\": [\n              \"Pass-through token account for SY moving from the depositor to the SY program\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_fee_treasury_sy\",\n            \"docs\": [\n              \"Token account that holds SY fees from trade_pt\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fee_treasury_sy_bps\",\n            \"docs\": [\n              \"Fee treasury SY BPS\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"self_address\",\n            \"docs\": [\n              \"Authority for CPI calls owned by the market struct\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"signer_bump\",\n            \"docs\": [\n              \"Bump for signing the PDA\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"status_flags\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"sy_program\",\n            \"docs\": [\n              \"Link to the SY program ID\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"financials\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketFinancials\"\n              }\n            }\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"MarketEmissions\"\n              }\n            }\n          },\n          {\n            \"name\": \"lp_farm\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LpFarm\"\n              }\n            }\n          },\n          {\n            \"name\": \"max_lp_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_escrow_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"cpi_accounts\",\n            \"docs\": [\n              \"Record of CPI accounts\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"CpiAccounts\"\n              }\n            }\n          },\n          {\n            \"name\": \"is_current_flash_swap\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"liquidity_net_balance_limits\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"LiquidityNetBalanceLimits\"\n              }\n            }\n          },\n          {\n            \"name\": \"seed_id\",\n            \"docs\": [\n              \"Unique seed id for the market\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"MergeEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sy_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_sy\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pt_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_pt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_py_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"pt_redemption_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_sy_in_escrow\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"yt_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_for_pt\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"is_vault_active\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Number\",\n      \"docs\": [\n        \"High precision number, stored as 4 u64 words in little endian\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"array\": [\n              \"u64\",\n              4\n            ]\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PersonalYieldTracker\",\n      \"docs\": [\n        \"Generic tracker for interest and emissions earned by deposits\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_seen_index\",\n            \"docs\": [\n              \"The index is the per-share value of the SY token\",\n              \"Note that the YT balance must be converted to the equivalent SY balance\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"staged\",\n            \"docs\": [\n              \"Staged tokens that may be withdrawn\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PersonalYieldTrackers\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trackers\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"PersonalYieldTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PrincipleDetails\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"administrators\",\n            \"type\": {\n              \"vec\": \"pubkey\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Principles\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"marginfi_standard\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          },\n          {\n            \"name\": \"collect_treasury\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          },\n          {\n            \"name\": \"kamino_lend_standard\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          },\n          {\n            \"name\": \"exponent_core\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          },\n          {\n            \"name\": \"change_status_flags\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          },\n          {\n            \"name\": \"jito_restaking\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PrincipleDetails\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SellPtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"seller\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pt_amount_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_amount_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"SellYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_yt_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_yt_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_received_from_merge\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_spent_buying_pt\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_borrowed_and_repaid\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StageYieldEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"payer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_emissions\",\n            \"type\": {\n              \"vec\": \"u64\"\n            }\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StageYieldEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"payer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_interest\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"StripEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"depositor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"sy_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_sy\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pt_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_pt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_sy_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_py_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_sy_in_escrow\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"yt_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"all_time_high_sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"sy_for_pt\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"TradePtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_trader\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"net_trader_pt\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"net_trader_sy\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"fee_sy\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Vault\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"sy_program\",\n            \"docs\": [\n              \"Link to SY program\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_sy\",\n            \"docs\": [\n              \"Mint for SY token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_yt\",\n            \"docs\": [\n              \"Mint for the vault-specific YT token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_pt\",\n            \"docs\": [\n              \"Mint for the vault-specific PT token\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_yt\",\n            \"docs\": [\n              \"Escrow account for holding deposited YT\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_sy\",\n            \"docs\": [\n              \"Escrow account that holds temporary SY tokens\",\n              \"As an interchange between users and the SY program\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yield_position\",\n            \"docs\": [\n              \"Link to a vault-owned YT position\",\n              \"This account collects yield from all \\\"unstaked\\\" YT\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"address_lookup_table\",\n            \"docs\": [\n              \"Address lookup table key for vault\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"start_ts\",\n            \"docs\": [\n              \"start timestamp\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"duration\",\n            \"docs\": [\n              \"seconds duration\"\n            ],\n            \"type\": \"u32\"\n          },\n          {\n            \"name\": \"signer_seed\",\n            \"docs\": [\n              \"Seed for CPI signing\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"authority\",\n            \"docs\": [\n              \"Authority for CPI signing\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"signer_bump\",\n            \"docs\": [\n              \"bump for signer authority PDA\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"last_seen_sy_exchange_rate\",\n            \"docs\": [\n              \"Last seen SY exchange rate\",\n              \"This continues to be updated even after vault maturity to track SY appreciation for treasury collection\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"all_time_high_sy_exchange_rate\",\n            \"docs\": [\n              \"This is the all time high exchange rate for SY\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"final_sy_exchange_rate\",\n            \"docs\": [\n              \"This is the exchange rate for SY when the vault expires\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"total_sy_in_escrow\",\n            \"docs\": [\n              \"How much SY is held in escrow\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_for_pt\",\n            \"docs\": [\n              \"The total SY set aside to back the PT holders\",\n              \"This value is updated on every operation that touches the PT supply or the last seen exchange rate\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_supply\",\n            \"docs\": [\n              \"Total supply of PT\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"treasury_sy\",\n            \"docs\": [\n              \"Amount of SY staged for the treasury\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"uncollected_sy\",\n            \"docs\": [\n              \"SY that has been earned by YT, but not yet collected\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"treasury_sy_token_account\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"interest_bps_fee\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"min_op_size_strip\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_op_size_merge\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"status\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"EmissionInfo\"\n                }\n              }\n            }\n          },\n          {\n            \"name\": \"cpi_accounts\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"CpiAccounts\"\n              }\n            }\n          },\n          {\n            \"name\": \"claim_limits\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"ClaimLimits\"\n              }\n            }\n          },\n          {\n            \"name\": \"max_py_supply\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawLiquidityEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"withdrawer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_pt_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_sy_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_src\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"pt_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_supply\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawLpEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawLpEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"mint_lp\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"token_lp_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_lp_balance\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"emissions\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          },\n          {\n            \"name\": \"farms\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"PersonalYieldTrackers\"\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"vault_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawYtEventV2\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_yield_position\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_dst\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_yt\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"sy_exchange_rate\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"vault_yt_balance_after\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"user_staged_yield\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"user_interest\",\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"user_emissions\",\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperBuyYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"buyer\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_out_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_in_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperCollectInterestEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"depositor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_collected\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperMergeEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_py_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_redeemed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_base_out\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityBaseEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"trade_amount_pt_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"trade_amount_sy_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_lp_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_price\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityClassicEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_pt_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_lp_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_price\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperProvideLiquidityEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_lp_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_yt_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_price\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperSellYtEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"seller\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_in_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"base_out_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"unix_timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperStripEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_sy_stripped\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_py_out\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperWithdrawLiquidityClassicEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"docs\": [\n              \"User who withdrew liquidity\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_address\",\n            \"docs\": [\n              \"Market that the user withdrew liquidity from\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_out\",\n            \"docs\": [\n              \"Amount of base token out\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_lp_in\",\n            \"docs\": [\n              \"Amount of LP token in\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_pt_out\",\n            \"docs\": [\n              \"Amount of PT token out\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_price\",\n            \"docs\": [\n              \"LP price in asset\"\n            ],\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WrapperWithdrawLiquidityEvent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"market_address\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"amount_base_out\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"amount_lp_in\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"lp_price\",\n            \"type\": \"f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"YieldTokenPosition\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"owner\",\n            \"docs\": [\n              \"Link to address that owns this position\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"vault\",\n            \"docs\": [\n              \"Link to vault that manages the YT\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"yt_balance\",\n            \"docs\": [\n              \"Track the YT balance of the user here\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"interest\",\n            \"docs\": [\n              \"Tracker for interest earned (paid in SY)\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"YieldTokenTracker\"\n              }\n            }\n          },\n          {\n            \"name\": \"emissions\",\n            \"docs\": [\n              \"Tracker for emissions earned (paid in emission tokens)\"\n            ],\n            \"type\": {\n              \"vec\": {\n                \"defined\": {\n                  \"name\": \"YieldTokenTracker\"\n                }\n              }\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"YieldTokenTracker\",\n      \"docs\": [\n        \"Generic tracker for interest and emissions earned by YT deposits\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"last_seen_index\",\n            \"docs\": [\n              \"The index is the per-share value of the SY token\",\n              \"Note that the YT balance must be converted to the equivalent SY balance\"\n            ],\n            \"type\": {\n              \"defined\": {\n                \"name\": \"Number\"\n              }\n            }\n          },\n          {\n            \"name\": \"staged\",\n            \"docs\": [\n              \"Staged tokens that may be withdrawn\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    }\n  ]\n}","import EXPONENT_CLMM_IDL_JSON from \"./exponent_clmm.json\";\nimport EXPONENT_CORE_IDL_JSON from \"./exponent_core.json\";\n\n/**\n * Raw Exponent core IDL (as committed in github.com/exponent-finance/exponent-core).\n * Kept for reference / future codegen. NOTE: its `address` field is the IDL-declared\n * program id, which differs from the live deployment — see `../constants.ts`.\n */\nexport const EXPONENT_CORE_IDL = EXPONENT_CORE_IDL_JSON;\n\n/**\n * Raw Exponent CLMM IDL (`@exponent-labs/exponent-clmm-idl`, program `XPC1MM…` /\n * \"MarketThree\"). Used to Borsh-decode the `MarketThree` pool account; its `address`\n * field is the live CLMM program id. The matured-PT roll buys the successor PT directly\n * on this PT/SY CLMM via `trade_pt` (SY → PT), with no base round-trip or aggregator.\n */\nexport const EXPONENT_CLMM_IDL = EXPONENT_CLMM_IDL_JSON;\n","import { BorshAccountsCoder, type Idl } from \"@coral-xyz/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport { EXPONENT_CLMM_IDL, EXPONENT_CORE_IDL } from \"../idl\";\nimport {\n  ExponentCpiInterfaceContext,\n  ExponentMarketThree,\n  ExponentMarketTwo,\n  ExponentVault,\n} from \"../types\";\n\n/**\n * Exponent's high-precision `Number` is a little-endian U256 (`[u64; 4]`) scaled by 1e12\n * (`precise_number::ONE`). See exponent-core `libraries/precise_number`.\n */\nexport const EXPONENT_NUMBER_DENOM = new BigNumber(1e12);\n\nconst EXPONENT_ACCOUNTS_CODER = new BorshAccountsCoder(EXPONENT_CORE_IDL as unknown as Idl);\nconst EXPONENT_CLMM_ACCOUNTS_CODER = new BorshAccountsCoder(EXPONENT_CLMM_IDL as unknown as Idl);\n\n/** Convert a decoded Exponent `Number` (LE `[u64; 4]` U256) to a scaled BigNumber. */\nexport function exponentNumberToBigNumber(raw: unknown): BigNumber {\n  // Anchor decodes the tuple-struct `Number([u64;4])` defensively across shapes:\n  // an array of BN/number, or an object wrapping that array.\n  let words: unknown = raw;\n  if (!Array.isArray(words) && words && typeof words === \"object\") {\n    words = (words as Record<string, unknown>)[0] ?? Object.values(words)[0];\n  }\n  if (!Array.isArray(words)) {\n    throw new Error(\"exponentNumberToBigNumber: unexpected Number shape\");\n  }\n\n  let value = new BigNumber(0);\n  const TWO_64 = new BigNumber(2).pow(64);\n  words.forEach((w, i) => {\n    const word = new BigNumber(BN.isBN(w) ? w.toString() : String(w));\n    value = value.plus(word.times(TWO_64.pow(i)));\n  });\n  return value.div(EXPONENT_NUMBER_DENOM);\n}\n\nfunction pk(v: unknown): PublicKey {\n  return v instanceof PublicKey ? v : new PublicKey(v as string);\n}\n\n/** Decode a raw `Vault` account buffer into {@link ExponentVault}. */\nexport function decodeExponentVault(data: Buffer): ExponentVault {\n  const d = EXPONENT_ACCOUNTS_CODER.decode(\"Vault\", data);\n  const get = (snake: string, camel: string) => d[snake] ?? d[camel];\n  const u64 = (v: unknown): bigint => BigInt(BN.isBN(v) ? v.toString() : String(v ?? 0));\n\n  const cpi = (get(\"cpi_accounts\", \"cpiAccounts\") ?? {}) as Record<string, unknown>;\n\n  return {\n    authority: pk(get(\"authority\", \"authority\")),\n    syProgram: pk(get(\"sy_program\", \"syProgram\")),\n    mintSy: pk(get(\"mint_sy\", \"mintSy\")),\n    mintYt: pk(get(\"mint_yt\", \"mintYt\")),\n    mintPt: pk(get(\"mint_pt\", \"mintPt\")),\n    escrowSy: pk(get(\"escrow_sy\", \"escrowSy\")),\n    yieldPosition: pk(get(\"yield_position\", \"yieldPosition\")),\n    addressLookupTable: pk(get(\"address_lookup_table\", \"addressLookupTable\")),\n    cpiAccounts: {\n      getSyState: decodeCpiContexts(cpi.get_sy_state ?? cpi.getSyState),\n      depositSy: decodeCpiContexts(cpi.deposit_sy ?? cpi.depositSy),\n      withdrawSy: decodeCpiContexts(cpi.withdraw_sy ?? cpi.withdrawSy),\n    },\n    syForPt: u64(get(\"sy_for_pt\", \"syForPt\")),\n    ptSupply: u64(get(\"pt_supply\", \"ptSupply\")),\n    lastSeenSyExchangeRate: exponentNumberToBigNumber(\n      get(\"last_seen_sy_exchange_rate\", \"lastSeenSyExchangeRate\")\n    ),\n    allTimeHighSyExchangeRate: exponentNumberToBigNumber(\n      get(\"all_time_high_sy_exchange_rate\", \"allTimeHighSyExchangeRate\")\n    ),\n    finalSyExchangeRate: exponentNumberToBigNumber(\n      get(\"final_sy_exchange_rate\", \"finalSyExchangeRate\")\n    ),\n    status: Number(get(\"status\", \"status\") ?? 0),\n    startTs: Number(get(\"start_ts\", \"startTs\") ?? 0),\n    duration: Number(get(\"duration\", \"duration\") ?? 0),\n  };\n}\n\n/** Decode a `MarketTwo` account and return its `vault` address. */\nexport function decodeExponentMarketVault(data: Buffer): PublicKey {\n  const d = EXPONENT_ACCOUNTS_CODER.decode(\"MarketTwo\", data);\n  return pk(d.vault);\n}\n\n/** Decode an Anchor-decoded list of `CpiInterfaceContext` (snake/camel tolerant). */\nfunction decodeCpiContexts(raw: unknown): ExponentCpiInterfaceContext[] {\n  if (!Array.isArray(raw)) return [];\n  return raw.map((c) => {\n    const o = (c ?? {}) as Record<string, unknown>;\n    return {\n      altIndex: Number(o.alt_index ?? o.altIndex ?? 0),\n      isSigner: Boolean(o.is_signer ?? o.isSigner ?? false),\n      isWritable: Boolean(o.is_writable ?? o.isWritable ?? false),\n    };\n  });\n}\n\n/** Decode a raw `MarketTwo` account buffer into {@link ExponentMarketTwo}. */\nexport function decodeExponentMarketTwo(data: Buffer): ExponentMarketTwo {\n  const d = EXPONENT_ACCOUNTS_CODER.decode(\"MarketTwo\", data);\n  const get = (snake: string, camel: string) => d[snake] ?? d[camel];\n  const cpi = (get(\"cpi_accounts\", \"cpiAccounts\") ?? {}) as Record<string, unknown>;\n\n  return {\n    selfAddress: pk(get(\"self_address\", \"selfAddress\")),\n    mintPt: pk(get(\"mint_pt\", \"mintPt\")),\n    mintSy: pk(get(\"mint_sy\", \"mintSy\")),\n    vault: pk(get(\"vault\", \"vault\")),\n    tokenPtEscrow: pk(get(\"token_pt_escrow\", \"tokenPtEscrow\")),\n    tokenSyEscrow: pk(get(\"token_sy_escrow\", \"tokenSyEscrow\")),\n    tokenFeeTreasurySy: pk(get(\"token_fee_treasury_sy\", \"tokenFeeTreasurySy\")),\n    addressLookupTable: pk(get(\"address_lookup_table\", \"addressLookupTable\")),\n    syProgram: pk(get(\"sy_program\", \"syProgram\")),\n    statusFlags: Number(get(\"status_flags\", \"statusFlags\") ?? 0),\n    cpiAccounts: {\n      getSyState: decodeCpiContexts(cpi.get_sy_state ?? cpi.getSyState),\n      depositSy: decodeCpiContexts(cpi.deposit_sy ?? cpi.depositSy),\n      withdrawSy: decodeCpiContexts(cpi.withdraw_sy ?? cpi.withdrawSy),\n    },\n  };\n}\n\n/** Fetch + decode an Exponent `MarketTwo` account. */\nexport async function fetchExponentMarketTwo(\n  connection: Connection,\n  market: PublicKey\n): Promise<ExponentMarketTwo> {\n  const info = await connection.getAccountInfo(market);\n  if (!info) throw new Error(`Exponent market account not found: ${market.toBase58()}`);\n  return decodeExponentMarketTwo(info.data);\n}\n\n/** Decode a raw `MarketThree` (CLMM) pool account buffer into {@link ExponentMarketThree}. */\nexport function decodeExponentMarketThree(data: Buffer): ExponentMarketThree {\n  const d = EXPONENT_CLMM_ACCOUNTS_CODER.decode(\"MarketThree\", data);\n  const get = (snake: string, camel: string) => d[snake] ?? d[camel];\n  const cpi = (get(\"cpi_sy_accounts\", \"cpiSyAccounts\") ?? {}) as Record<string, unknown>;\n\n  return {\n    selfAddress: pk(get(\"self_address\", \"selfAddress\")),\n    mintPt: pk(get(\"mint_pt\", \"mintPt\")),\n    mintSy: pk(get(\"mint_sy\", \"mintSy\")),\n    vault: pk(get(\"vault\", \"vault\")),\n    ticks: pk(get(\"ticks\", \"ticks\")),\n    tokenPtEscrow: pk(get(\"token_pt_escrow\", \"tokenPtEscrow\")),\n    tokenSyEscrow: pk(get(\"token_sy_escrow\", \"tokenSyEscrow\")),\n    tokenFeeTreasurySy: pk(get(\"token_fee_treasury_sy\", \"tokenFeeTreasurySy\")),\n    tokenFeeTreasuryPt: pk(get(\"token_fee_treasury_pt\", \"tokenFeeTreasuryPt\")),\n    addressLookupTable: pk(get(\"address_lookup_table\", \"addressLookupTable\")),\n    syProgram: pk(get(\"sy_program\", \"syProgram\")),\n    statusFlags: Number(get(\"status_flags\", \"statusFlags\") ?? 0),\n    cpiAccounts: {\n      getSyState: decodeCpiContexts(cpi.get_sy_state ?? cpi.getSyState),\n      getPositionState: decodeCpiContexts(cpi.get_position_state ?? cpi.getPositionState),\n      depositSy: decodeCpiContexts(cpi.deposit_sy ?? cpi.depositSy),\n      withdrawSy: decodeCpiContexts(cpi.withdraw_sy ?? cpi.withdrawSy),\n    },\n  };\n}\n\n/** Fetch + decode an Exponent `MarketThree` (CLMM) pool account. */\nexport async function fetchExponentMarketThree(\n  connection: Connection,\n  market: PublicKey\n): Promise<ExponentMarketThree> {\n  const info = await connection.getAccountInfo(market);\n  if (!info) throw new Error(`Exponent CLMM market account not found: ${market.toBase58()}`);\n  return decodeExponentMarketThree(info.data);\n}\n\n/** Fetch + decode an Exponent `Vault` account. */\nexport async function fetchExponentVault(\n  connection: Connection,\n  vault: PublicKey\n): Promise<ExponentVault> {\n  const info = await connection.getAccountInfo(vault);\n  if (!info) throw new Error(`Exponent vault account not found: ${vault.toBase58()}`);\n  return decodeExponentVault(info.data);\n}\n\n/** Fetch a `MarketTwo` account and resolve + fetch its `Vault`. */\nexport async function fetchExponentVaultFromMarket(\n  connection: Connection,\n  market: PublicKey\n): Promise<{ vault: PublicKey; account: ExponentVault }> {\n  const info = await connection.getAccountInfo(market);\n  if (!info) throw new Error(`Exponent market account not found: ${market.toBase58()}`);\n  const vault = decodeExponentMarketVault(info.data);\n  return { vault, account: await fetchExponentVault(connection, vault) };\n}\n\n/** Read an SPL mint's decimals (classic + token-2022 share the offset-44 layout). */\nexport async function getMintDecimals(connection: Connection, mint: PublicKey): Promise<number> {\n  const info = await connection.getAccountInfo(mint);\n  if (!info) throw new Error(`mint account not found: ${mint.toBase58()}`);\n  return info.data[44];\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport {\n  EXPONENT_CLMM_PROGRAM_ID,\n  EXPONENT_CORE_PROGRAM_ID,\n  EXPONENT_EVENT_AUTHORITY_SEED,\n} from \"../constants\";\n\n/** Derive the Anchor event-CPI authority PDA for the Exponent core program. */\nexport function deriveExponentEventAuthority(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(EXPONENT_EVENT_AUTHORITY_SEED)],\n    EXPONENT_CORE_PROGRAM_ID\n  )[0];\n}\n\n/** Derive the Anchor event-CPI authority PDA for the Exponent CLMM (`MarketThree`) program. */\nexport function deriveExponentClmmEventAuthority(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(EXPONENT_EVENT_AUTHORITY_SEED)],\n    EXPONENT_CLMM_PROGRAM_ID\n  )[0];\n}\n","import { Buffer } from \"buffer\";\n\nimport { AccountMeta, PublicKey, TransactionInstruction, SystemProgram } from \"@solana/web3.js\";\n\nimport { EXPONENT_CLMM_PROGRAM_ID, EXPONENT_CORE_PROGRAM_ID } from \"./constants\";\nimport {\n  ExponentClmmTradePtAccounts,\n  ExponentMergeAccounts,\n  ExponentStripAccounts,\n  ExponentSwapDirection,\n  ExponentTradePtAccounts,\n  ExponentWrapperMergeAccounts,\n} from \"./types\";\nimport {\n  deriveExponentClmmEventAuthority,\n  deriveExponentEventAuthority,\n} from \"./utils/derive.utils\";\n\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n/**\n * `merge` instruction discriminator, taken from the committed Exponent IDL\n * (`merge` → `[5]` — a single-byte custom discriminator, not the default 8-byte Anchor\n * one). Account order + writable/signer flags below also mirror the IDL / the program's\n * `#[derive(Accounts)] struct Merge` exactly.\n */\nconst MERGE_DISCRIMINATOR = Buffer.from([5]);\n\n/**\n * Build the Exponent `merge(amount)` instruction — redeems `amount` PT (post-maturity,\n * 1:1, no AMM/slippage) into SY at `sySrcDstAta`.\n *\n * @param accounts resolved merge accounts (see {@link ExponentMergeAccounts})\n * @param amountNative PT amount to redeem, in native units (u64)\n */\nexport function makeExponentMergeIx(\n  accounts: ExponentMergeAccounts,\n  amountNative: bigint\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const eventAuthority = deriveExponentEventAuthority();\n\n  // data = discriminator(1) + amount(u64 LE, 8)\n  const data = Buffer.alloc(MERGE_DISCRIMINATOR.length + 8);\n  MERGE_DISCRIMINATOR.copy(data, 0);\n  data.writeBigUInt64LE(amountNative, MERGE_DISCRIMINATOR.length);\n\n  // Order + writable/signer flags taken verbatim from the IDL's `merge` accounts.\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.owner, isSigner: true, isWritable: true },\n    { pubkey: accounts.authority, isSigner: false, isWritable: true },\n    { pubkey: accounts.vault, isSigner: false, isWritable: true },\n    { pubkey: accounts.sySrcDstAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.escrowSy, isSigner: false, isWritable: true },\n    { pubkey: accounts.ytSrcAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.ptSrcAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintYt, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintPt, isSigner: false, isWritable: true },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.syProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.addressLookupTable, isSigner: false, isWritable: false },\n    { pubkey: accounts.yieldPosition, isSigner: false, isWritable: true },\n    { pubkey: eventAuthority, isSigner: false, isWritable: false },\n    { pubkey: EXPONENT_CORE_PROGRAM_ID, isSigner: false, isWritable: false },\n    // SY-program CPI accounts (getSyState ++ withdrawSy), ALT-resolved (post-maturity merge\n    // still CPIs into the SY program to move SY out of escrow).\n    ...(accounts.remainingAccounts ?? []),\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: EXPONENT_CORE_PROGRAM_ID,\n    data,\n  });\n}\n\n/**\n * `trade_pt` instruction discriminator, taken from the committed Exponent IDL\n * (`trade_pt` → `[17]` — a single-byte custom discriminator). Account order +\n * writable/signer flags below mirror the IDL / the program's `#[derive(Accounts)]`\n * exactly, and match the SDK's `createTradePtInstruction`.\n */\nconst TRADE_PT_DISCRIMINATOR = Buffer.from([17]);\n\n/**\n * Signed `trade_pt` args for **buying** PT with SY (the roll's buy leg).\n *\n * The program's convention is signed-from-the-trader's-perspective: a buy makes PT flow\n * *to* the trader (`net_trader_pt > 0`) and SY flow *away* (`sy_constraint < 0`, the most\n * negative SY balance change the trader will tolerate — i.e. the max SY spent).\n *\n * @param ptOutNative   exact PT the trader receives (native u64). Set to a conservative\n *                      floor; the trade gives exactly this many PT.\n * @param maxSyInNative max SY the trader is willing to spend (native u64).\n */\nexport function exponentBuyPtArgs({\n  ptOutNative,\n  maxSyInNative,\n}: {\n  ptOutNative: bigint;\n  maxSyInNative: bigint;\n}): { netTraderPt: bigint; syConstraint: bigint } {\n  return { netTraderPt: ptOutNative, syConstraint: -maxSyInNative };\n}\n\n/**\n * Build the Exponent `trade_pt(net_trader_pt, sy_constraint)` instruction — an\n * implied-APY AMM trade of SY ↔ PT on a `MarketTwo`. For a buy use {@link exponentBuyPtArgs}.\n *\n * Pricing PT reads the SY exchange rate on-chain, so `accounts.remainingAccounts` (the\n * flavor's SY-program CPI accounts, resolved from the market ALT) are appended after the\n * 12 fixed accounts, and the transaction must carry the market's address lookup table.\n *\n * @param accounts resolved trade accounts (see {@link ExponentTradePtAccounts})\n * @param args     signed `net_trader_pt` / `sy_constraint` (i64 LE)\n */\nexport function makeExponentTradePtIx(\n  accounts: ExponentTradePtAccounts,\n  args: { netTraderPt: bigint; syConstraint: bigint }\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const eventAuthority = deriveExponentEventAuthority();\n\n  // data = discriminator(1) + net_trader_pt(i64 LE, 8) + sy_constraint(i64 LE, 8)\n  const data = Buffer.alloc(TRADE_PT_DISCRIMINATOR.length + 16);\n  TRADE_PT_DISCRIMINATOR.copy(data, 0);\n  data.writeBigInt64LE(args.netTraderPt, TRADE_PT_DISCRIMINATOR.length);\n  data.writeBigInt64LE(args.syConstraint, TRADE_PT_DISCRIMINATOR.length + 8);\n\n  // Order + writable/signer flags taken verbatim from the IDL's `trade_pt` accounts.\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.trader, isSigner: true, isWritable: true },\n    { pubkey: accounts.market, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenSyTrader, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenPtTrader, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenSyEscrow, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenPtEscrow, isSigner: false, isWritable: true },\n    { pubkey: accounts.addressLookupTable, isSigner: false, isWritable: false },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.syProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.tokenFeeTreasurySy, isSigner: false, isWritable: true },\n    { pubkey: eventAuthority, isSigner: false, isWritable: false },\n    { pubkey: EXPONENT_CORE_PROGRAM_ID, isSigner: false, isWritable: false },\n    // SY-program CPI accounts (getSyState ++ depositSy ++ withdrawSy), ALT-resolved.\n    ...accounts.remainingAccounts,\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: EXPONENT_CORE_PROGRAM_ID,\n    data,\n  });\n}\n\n/**\n * `strip` instruction discriminator (Exponent IDL `strip` → `[4]`, single-byte). Account\n * order/flags mirror the IDL / SDK `createStripInstruction`. `strip` is the inverse of\n * `merge`: it takes SY and mints PT + YT (1:1 against the vault — no AMM, no slippage).\n */\nconst STRIP_DISCRIMINATOR = Buffer.from([4]);\n\n/**\n * Build the Exponent `strip(amount)` instruction — splits `amount` SY into PT + YT on an\n * active vault. The minted PT lands in `ptDst`, the YT in `ytDst`. Because PT is minted (not\n * swapped), this is the buy leg for rolling more PT than a thin AMM pool could provide.\n *\n * Pricing PT/YT reads the SY rate on-chain, so `accounts.remainingAccounts` (the flavor's\n * `deposit_sy` CPI accounts, resolved from the vault ALT) are appended after the 15 fixed\n * accounts, and the transaction must carry the vault's address lookup table.\n *\n * @param accounts resolved strip accounts (see {@link ExponentStripAccounts})\n * @param amountNative SY amount to strip, in native units (u64)\n */\nexport function makeExponentStripIx(\n  accounts: ExponentStripAccounts,\n  amountNative: bigint\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const eventAuthority = deriveExponentEventAuthority();\n\n  // data = discriminator(1) + amount(u64 LE, 8)\n  const data = Buffer.alloc(STRIP_DISCRIMINATOR.length + 8);\n  STRIP_DISCRIMINATOR.copy(data, 0);\n  data.writeBigUInt64LE(amountNative, STRIP_DISCRIMINATOR.length);\n\n  // Order + writable/signer flags taken verbatim from the IDL / SDK `createStripInstruction`.\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.depositor, isSigner: true, isWritable: true },\n    { pubkey: accounts.authority, isSigner: false, isWritable: true },\n    { pubkey: accounts.vault, isSigner: false, isWritable: true },\n    { pubkey: accounts.sySrc, isSigner: false, isWritable: true },\n    { pubkey: accounts.escrowSy, isSigner: false, isWritable: true },\n    { pubkey: accounts.ytDst, isSigner: false, isWritable: true },\n    { pubkey: accounts.ptDst, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintYt, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintPt, isSigner: false, isWritable: true },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.addressLookupTable, isSigner: false, isWritable: false },\n    { pubkey: accounts.syProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.yieldPosition, isSigner: false, isWritable: true },\n    { pubkey: eventAuthority, isSigner: false, isWritable: false },\n    { pubkey: EXPONENT_CORE_PROGRAM_ID, isSigner: false, isWritable: false },\n    // SY-program CPI accounts (depositSy), ALT-resolved.\n    ...(accounts.remainingAccounts ?? []),\n  ];\n\n  return new TransactionInstruction({ keys, programId: EXPONENT_CORE_PROGRAM_ID, data });\n}\n\n/**\n * `wrapper_merge` instruction discriminator (Exponent IDL `wrapper_merge` → `[39]`,\n * single-byte). It merges PT (post-maturity, 1:1) **and** CPIs into the flavor's SY program\n * to redeem the resulting SY into the underlying **base** token — so the roll's buy leg can\n * swap a normal token instead of the un-swappable SY. Account order/flags mirror the IDL /\n * SDK `createWrapperMergeInstruction`.\n */\nconst WRAPPER_MERGE_DISCRIMINATOR = Buffer.from([39]);\n\n/**\n * Build the Exponent `wrapper_merge(amount_py, redeem_sy_accounts_until)` instruction —\n * redeems `amountPyNative` PT into the underlying base token at the owner's base ATA.\n *\n * The remaining accounts are `[...flavor redeem accounts, ...vault SY-CPI accounts]`;\n * `redeemSyAccountsUntil` tells the program where the redeem accounts end. The redeem's first\n * account is the owner and keeps its signer flag (the SY-CPI accounts are forced non-signer,\n * resolved upstream). The transaction must carry the vault's address lookup table.\n *\n * @param accounts resolved wrapper-merge accounts (see {@link ExponentWrapperMergeAccounts})\n * @param args     `amountPyNative` (u64) PT to redeem + `redeemSyAccountsUntil` (u8)\n */\nexport function makeExponentWrapperMergeIx(\n  accounts: ExponentWrapperMergeAccounts,\n  args: { amountPyNative: bigint; redeemSyAccountsUntil: number }\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const eventAuthority = deriveExponentEventAuthority();\n\n  // data = discriminator(1) + amount_py(u64 LE, 8) + redeem_sy_accounts_until(u8, 1)\n  const data = Buffer.alloc(WRAPPER_MERGE_DISCRIMINATOR.length + 9);\n  WRAPPER_MERGE_DISCRIMINATOR.copy(data, 0);\n  data.writeBigUInt64LE(args.amountPyNative, WRAPPER_MERGE_DISCRIMINATOR.length);\n  data.writeUInt8(args.redeemSyAccountsUntil, WRAPPER_MERGE_DISCRIMINATOR.length + 8);\n\n  // Order + writable/signer flags taken verbatim from the IDL's `wrapper_merge` accounts.\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.owner, isSigner: true, isWritable: true },\n    { pubkey: accounts.syAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.vault, isSigner: false, isWritable: true },\n    { pubkey: accounts.escrowSy, isSigner: false, isWritable: true },\n    { pubkey: accounts.ytAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.ptAta, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintYt, isSigner: false, isWritable: true },\n    { pubkey: accounts.mintPt, isSigner: false, isWritable: true },\n    { pubkey: accounts.authority, isSigner: false, isWritable: true },\n    { pubkey: accounts.addressLookupTable, isSigner: false, isWritable: false },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.yieldPosition, isSigner: false, isWritable: true },\n    { pubkey: accounts.syProgram, isSigner: false, isWritable: false },\n    { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n    { pubkey: eventAuthority, isSigner: false, isWritable: false },\n    { pubkey: EXPONENT_CORE_PROGRAM_ID, isSigner: false, isWritable: false },\n    // [...redeem (flavor SY-redeem accounts), ...cpi (withdraw_sy ++ get_sy_state)]\n    ...accounts.remainingAccounts,\n  ];\n\n  return new TransactionInstruction({ keys, programId: EXPONENT_CORE_PROGRAM_ID, data });\n}\n\n/** SPL Stake Pool `UpdateStakePoolBalance` instruction tag (variant index 7). */\nconst SPL_STAKE_POOL_UPDATE_BALANCE_TAG = Buffer.from([7]);\n\n/**\n * Build the SPL Stake Pool `UpdateStakePoolBalance` instruction — refreshes a stake pool's\n * total-lamports / pool-token-supply so the pool↔token exchange rate is current for the\n * epoch. An SPL-stake-pool SY flavor (e.g. bulkSOL) requires this immediately before\n * `wrapper_merge`, otherwise the redeem reads a stale SY↔base rate.\n *\n * Account order matches the SPL Stake Pool program's `UpdateStakePoolBalance`.\n */\nexport function makeSplStakePoolUpdateBalanceIx(accounts: {\n  stakePoolProgram: PublicKey;\n  stakePool: PublicKey;\n  withdrawAuthority: PublicKey;\n  validatorList: PublicKey;\n  reserveStake: PublicKey;\n  managerFeeAccount: PublicKey;\n  poolMint: PublicKey;\n  tokenProgram?: PublicKey;\n}): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.stakePool, isSigner: false, isWritable: true },\n    { pubkey: accounts.withdrawAuthority, isSigner: false, isWritable: false },\n    { pubkey: accounts.validatorList, isSigner: false, isWritable: true },\n    { pubkey: accounts.reserveStake, isSigner: false, isWritable: false },\n    { pubkey: accounts.managerFeeAccount, isSigner: false, isWritable: true },\n    { pubkey: accounts.poolMint, isSigner: false, isWritable: true },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n  ];\n  return new TransactionInstruction({\n    keys,\n    programId: accounts.stakePoolProgram,\n    data: Buffer.from(SPL_STAKE_POOL_UPDATE_BALANCE_TAG),\n  });\n}\n\n/**\n * CLMM (`MarketThree`) `trade_pt` discriminator (`@exponent-labs/exponent-clmm-idl`,\n * `trade_pt` → `[3]`, single-byte). Account order/flags + the arg layout below mirror the\n * SDK's `createTradePtInstruction` exactly. This is the buy leg the matured-PT roll uses to\n * buy the successor PT directly on the PT/SY CLMM (`SwapDirection.SyToPt`) — no base\n * round-trip, no aggregator, and (unlike Raydium CLMMs) a single `ticks` account, so the\n * account set is fixed regardless of trade size.\n */\nconst CLMM_TRADE_PT_DISCRIMINATOR = Buffer.from([3]);\n\n/** Encode a borsh `Option<u64>` (1-byte tag + u64 LE when `Some`). */\nfunction encodeOptionU64(value: bigint | null): Buffer {\n  if (value === null) return Buffer.from([0]);\n  const buf = Buffer.alloc(9);\n  buf.writeUInt8(1, 0);\n  buf.writeBigUInt64LE(value, 1);\n  return buf;\n}\n\n/**\n * Signed `trade_pt` args for **buying** PT with SY on the CLMM (the roll's buy leg).\n *\n * `amountIn` is the exact SY spent; `swapDirection` is `SyToPt`; `amountOutConstraint` is\n * the minimum PT out (slippage floor); `priceSpotLimit` (ln-implied-APY limit) is left unset.\n *\n * @param amountInSyNative SY to spend (native u64).\n * @param minPtOutNative   minimum PT to receive (native u64) — the swap reverts below this.\n */\nexport function exponentClmmBuyPtArgs({\n  amountInSyNative,\n  minPtOutNative,\n}: {\n  amountInSyNative: bigint;\n  minPtOutNative: bigint;\n}): {\n  amountIn: bigint;\n  swapDirection: ExponentSwapDirection;\n  amountOutConstraint: bigint | null;\n  priceSpotLimit: null;\n} {\n  return {\n    amountIn: amountInSyNative,\n    swapDirection: ExponentSwapDirection.SyToPt,\n    amountOutConstraint: minPtOutNative,\n    priceSpotLimit: null,\n  };\n}\n\n/**\n * Build the CLMM `trade_pt(amount_in, swap_direction, amount_out_constraint, price_spot_limit)`\n * instruction — an implied-APY AMM trade of SY ↔ PT on a `MarketThree` pool. For a buy use\n * {@link exponentClmmBuyPtArgs}.\n *\n * Pricing PT reads the SY exchange rate on-chain, so `accounts.remainingAccounts` (the SY-CPI\n * accounts resolved from the market ALT) are appended after the 14 fixed accounts, and the\n * transaction must carry the market's address lookup table.\n *\n * @param accounts resolved trade accounts (see {@link ExponentClmmTradePtAccounts})\n * @param args     `amountIn` (u64) + `swapDirection` (u8) + `amountOutConstraint` (Option<u64>)\n *                 + `priceSpotLimit` (Option<f64>, always `null` here)\n */\nexport function makeExponentClmmTradePtIx(\n  accounts: ExponentClmmTradePtAccounts,\n  args: {\n    amountIn: bigint;\n    swapDirection: ExponentSwapDirection;\n    amountOutConstraint: bigint | null;\n    priceSpotLimit: null;\n  }\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const eventAuthority = deriveExponentClmmEventAuthority();\n\n  // data = disc(1) + amount_in(u64 LE, 8) + swap_direction(u8, 1)\n  //        + amount_out_constraint(Option<u64>) + price_spot_limit(Option<f64>)\n  const head = Buffer.alloc(CLMM_TRADE_PT_DISCRIMINATOR.length + 9);\n  CLMM_TRADE_PT_DISCRIMINATOR.copy(head, 0);\n  head.writeBigUInt64LE(args.amountIn, CLMM_TRADE_PT_DISCRIMINATOR.length);\n  head.writeUInt8(args.swapDirection, CLMM_TRADE_PT_DISCRIMINATOR.length + 8);\n  // `priceSpotLimit` is always `null` here → a single 0 tag byte (no f64 follows).\n  const data = Buffer.concat([head, encodeOptionU64(args.amountOutConstraint), Buffer.from([0])]);\n\n  // Order + writable/signer flags taken verbatim from the IDL / SDK `createTradePtInstruction`.\n  const keys: AccountMeta[] = [\n    { pubkey: accounts.trader, isSigner: true, isWritable: true },\n    { pubkey: accounts.market, isSigner: false, isWritable: true },\n    { pubkey: accounts.ticks, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenSyTrader, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenPtTrader, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenSyEscrow, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenPtEscrow, isSigner: false, isWritable: true },\n    { pubkey: accounts.addressLookupTable, isSigner: false, isWritable: false },\n    { pubkey: tokenProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.syProgram, isSigner: false, isWritable: false },\n    { pubkey: accounts.tokenFeeTreasurySy, isSigner: false, isWritable: true },\n    { pubkey: accounts.tokenFeeTreasuryPt, isSigner: false, isWritable: true },\n    { pubkey: eventAuthority, isSigner: false, isWritable: false },\n    { pubkey: EXPONENT_CLMM_PROGRAM_ID, isSigner: false, isWritable: false },\n    // SY-program CPI accounts (getSyState ++ getPositionState ++ depositSy ++ withdrawSy), ALT-resolved.\n    ...accounts.remainingAccounts,\n  ];\n\n  return new TransactionInstruction({ keys, programId: EXPONENT_CLMM_PROGRAM_ID, data });\n}\n\nconst exponentInstructions = {\n  makeExponentMergeIx,\n  makeExponentTradePtIx,\n  makeExponentStripIx,\n  makeExponentWrapperMergeIx,\n  makeExponentClmmTradePtIx,\n  makeSplStakePoolUpdateBalanceIx,\n  exponentBuyPtArgs,\n  exponentClmmBuyPtArgs,\n};\n\nexport default exponentInstructions;\n","import { AccountMeta, PublicKey } from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { makeSplStakePoolUpdateBalanceIx } from \"../instructions\";\nimport {\n  ExponentClmmTradePtAccounts,\n  ExponentClmmTradePtContext,\n  ExponentCpiInterfaceContext,\n  ExponentMergeAccounts,\n  ExponentMergeContext,\n  ExponentStripAccounts,\n  ExponentStripContext,\n  ExponentTradePtAccounts,\n  ExponentTradePtContext,\n  ExponentVault,\n  ExponentWrapperMergeAccounts,\n  ExponentWrapperMergeContext,\n  ResolveExponentClmmTradePtContextParams,\n  ResolveExponentMergeContextParams,\n  ResolveExponentStripContextParams,\n  ResolveExponentTradePtContextParams,\n  ResolveExponentWrapperMergeContextParams,\n} from \"../types\";\n\nimport {\n  fetchExponentMarketThree,\n  fetchExponentMarketTwo,\n  fetchExponentVault,\n  fetchExponentVaultFromMarket,\n  getMintDecimals,\n} from \"./deserialize.utils\";\n\nimport { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n/**\n * Resolve a list of `CpiInterfaceContext`s (ALT-indexed) into concrete {@link AccountMeta}s\n * against the given lookup-table addresses, validating each index is in range.\n */\nfunction resolveCpiMetas(\n  contexts: ExponentCpiInterfaceContext[],\n  altAddresses: PublicKey[],\n  altKey: PublicKey\n): AccountMeta[] {\n  return contexts.map((ctx) => {\n    const pubkey = altAddresses[ctx.altIndex];\n    if (!pubkey) {\n      throw new Error(\n        `Exponent CPI account alt_index ${ctx.altIndex} out of range ` +\n          `(ALT ${altKey.toBase58()} has ${altAddresses.length} entries)`\n      );\n    }\n    // A CPI context's `is_signer` marks an account the *inner* SY-program CPI signs (via\n    // PDA seeds, `invoke_signed`) — never a transaction-level signer. Forcing `false` here\n    // avoids a phantom required signature (the only real signer, the owner, is already a\n    // fixed account; Solana de-dups and OR-merges privileges). Matches the SDK.\n    return { pubkey, isSigner: false, isWritable: ctx.isWritable };\n  });\n}\n\n/** Dedupe AccountMetas by pubkey, keeping first order and OR-ing writability (matches the SDK). */\nfunction uniqueRemainingAccounts(metas: AccountMeta[]): AccountMeta[] {\n  const seen = new Map<string, AccountMeta>();\n  for (const m of metas) {\n    const key = m.pubkey.toBase58();\n    const prev = seen.get(key);\n    if (prev) prev.isWritable = prev.isWritable || m.isWritable;\n    else seen.set(key, { ...m });\n  }\n  return [...seen.values()];\n}\n\n/** SPL Stake Pool account layout offsets for the fields the refresh ix needs. */\nconst STAKE_POOL_OFFSETS = {\n  validatorList: 98,\n  reserveStake: 130,\n  poolMint: 162,\n  managerFeeAccount: 194,\n} as const;\n\n/**\n * Resolve everything `makeRollPtTx` needs for an Exponent PT roll by decoding the maturity\n * `Vault` (every vault-side `merge` account is a `has_one` field on it), deriving the\n * owner's PT/YT/SY token accounts, and resolving the SY-program CPI remaining accounts\n * (`get_sy_state ++ withdraw_sy`) from the vault's address lookup table.\n */\nexport async function resolveExponentMergeContext(\n  params: ResolveExponentMergeContextParams\n): Promise<ExponentMergeContext> {\n  const { connection, owner } = params;\n  const ptYtTokenProgram = params.ptYtTokenProgram ?? TOKEN_PROGRAM_ID;\n  const syTokenProgram = params.syTokenProgram ?? TOKEN_PROGRAM_ID;\n\n  let vaultAddress: PublicKey;\n  let vault: ExponentVault;\n  if (params.vault) {\n    vaultAddress = params.vault;\n    vault = await fetchExponentVault(connection, vaultAddress);\n  } else if (params.market) {\n    const res = await fetchExponentVaultFromMarket(connection, params.market);\n    vaultAddress = res.vault;\n    vault = res.account;\n  } else {\n    throw new Error(\"resolveExponentMergeContext: one of `vault` or `market` is required\");\n  }\n\n  const ptSrcAta = getAssociatedTokenAddressSync(vault.mintPt, owner, true, ptYtTokenProgram);\n  const ytSrcAta = getAssociatedTokenAddressSync(vault.mintYt, owner, true, ptYtTokenProgram);\n  const sySrcDstAta = getAssociatedTokenAddressSync(vault.mintSy, owner, true, syTokenProgram);\n\n  // `merge`'s SY-CPI remaining accounts are referenced by index into the vault's ALT, and\n  // the transaction must carry that ALT for them to fit / resolve.\n  const altResult = await connection.getAddressLookupTable(vault.addressLookupTable);\n  const alt = altResult.value;\n  if (!alt) {\n    throw new Error(\n      `Exponent vault address lookup table not found: ${vault.addressLookupTable.toBase58()}`\n    );\n  }\n  // Order mirrors the SDK's merge remaining accounts: getSyState ++ withdrawSy.\n  const remainingAccounts: AccountMeta[] = [\n    ...resolveCpiMetas(vault.cpiAccounts.getSyState, alt.state.addresses, vault.addressLookupTable),\n    ...resolveCpiMetas(vault.cpiAccounts.withdrawSy, alt.state.addresses, vault.addressLookupTable),\n  ];\n\n  const mergeAccounts: ExponentMergeAccounts = {\n    owner,\n    authority: vault.authority,\n    vault: vaultAddress,\n    sySrcDstAta,\n    escrowSy: vault.escrowSy,\n    ytSrcAta,\n    ptSrcAta,\n    mintYt: vault.mintYt,\n    mintPt: vault.mintPt,\n    syProgram: vault.syProgram,\n    addressLookupTable: vault.addressLookupTable,\n    yieldPosition: vault.yieldPosition,\n    tokenProgram: ptYtTokenProgram,\n    remainingAccounts,\n  };\n\n  const decimals = await getMintDecimals(connection, vault.mintSy);\n\n  return {\n    vaultAddress,\n    vault,\n    mergeAccounts,\n    addressLookupTable: alt,\n    underlying: { mint: vault.mintSy, decimals, tokenProgram: syTokenProgram },\n    computeRedeemedAmountNative(ptAmountNative: bigint): bigint {\n      // Mirrors Exponent's `merge`: amount_sy_out = floor(amount_py × pt_redemption_rate),\n      // where pt_redemption_rate = sy_for_pt / pt_supply (Vault::pt_redemption_rate).\n      if (vault.ptSupply === 0n) return 0n;\n      const sy = new BigNumber(ptAmountNative.toString())\n        .times(vault.syForPt.toString())\n        .div(vault.ptSupply.toString())\n        .integerValue(BigNumber.ROUND_FLOOR);\n      return BigInt(sy.toFixed(0));\n    },\n  };\n}\n\n/**\n * Resolve everything `makeRollPtTx` needs to buy the successor PT natively (SY → PT,\n * no unwrap, no external aggregator) by trading on the successor maturity's `MarketTwo`.\n *\n * Decodes the market, resolves the SY-program CPI accounts from the market's address\n * lookup table (every `CpiInterfaceContext` is an ALT index), and derives the owner's\n * SY/PT token accounts. The returned {@link ExponentTradePtContext.addressLookupTable}\n * must be added to the transaction's lookup tables.\n */\nexport async function resolveExponentTradePtContext(\n  params: ResolveExponentTradePtContextParams\n): Promise<ExponentTradePtContext> {\n  const { connection, owner } = params;\n  const ptTokenProgram = params.ptTokenProgram ?? TOKEN_PROGRAM_ID;\n  const syTokenProgram = params.syTokenProgram ?? TOKEN_PROGRAM_ID;\n\n  const market = await fetchExponentMarketTwo(connection, params.market);\n\n  // `trade_pt`'s SY-CPI accounts are referenced by index into the market's ALT, and the\n  // transaction must carry that ALT for the program to resolve them.\n  const altResult = await connection.getAddressLookupTable(market.addressLookupTable);\n  const alt = altResult.value;\n  if (!alt) {\n    throw new Error(\n      `Exponent market address lookup table not found: ${market.addressLookupTable.toBase58()}`\n    );\n  }\n  const altAddresses = alt.state.addresses;\n  const altKey = market.addressLookupTable;\n\n  // Order mirrors the SDK's trade_pt remaining accounts: getSyState ++ depositSy ++ withdrawSy.\n  const remainingAccounts: AccountMeta[] = [\n    ...resolveCpiMetas(market.cpiAccounts.getSyState, altAddresses, altKey),\n    ...resolveCpiMetas(market.cpiAccounts.depositSy, altAddresses, altKey),\n    ...resolveCpiMetas(market.cpiAccounts.withdrawSy, altAddresses, altKey),\n  ];\n\n  const tokenSyTrader = getAssociatedTokenAddressSync(market.mintSy, owner, true, syTokenProgram);\n  const tokenPtTrader = getAssociatedTokenAddressSync(market.mintPt, owner, true, ptTokenProgram);\n\n  const tradePtAccounts: ExponentTradePtAccounts = {\n    trader: owner,\n    market: market.selfAddress,\n    tokenSyTrader,\n    tokenPtTrader,\n    tokenSyEscrow: market.tokenSyEscrow,\n    tokenPtEscrow: market.tokenPtEscrow,\n    addressLookupTable: market.addressLookupTable,\n    syProgram: market.syProgram,\n    tokenFeeTreasurySy: market.tokenFeeTreasurySy,\n    tokenProgram: ptTokenProgram,\n    remainingAccounts,\n  };\n\n  const [syDecimals, ptDecimals] = await Promise.all([\n    getMintDecimals(connection, market.mintSy),\n    getMintDecimals(connection, market.mintPt),\n  ]);\n\n  return {\n    marketAddress: market.selfAddress,\n    market,\n    tradePtAccounts,\n    addressLookupTable: alt,\n    sy: { mint: market.mintSy, decimals: syDecimals, tokenProgram: syTokenProgram },\n    pt: { mint: market.mintPt, decimals: ptDecimals, tokenProgram: ptTokenProgram },\n  };\n}\n\n/**\n * Resolve everything the roll needs to buy the successor PT natively on its **CLMM**\n * (`MarketThree`) pool — SY → PT in one on-chain trade, no base unwrap and no external\n * aggregator. The newer maturities (e.g. October bulkSOL) only list a CLMM PT/SY pool (no\n * `MarketTwo`, no order book), so this is the direct buy leg.\n *\n * Decodes the pool, resolves its SY-program CPI accounts from the pool's address lookup\n * table (each `CpiInterfaceContext` is an ALT index), de-duplicates them, and derives the\n * owner's SY/PT token accounts. The returned {@link ExponentClmmTradePtContext.addressLookupTable}\n * must be added to the transaction's lookup tables. The pool uses a single `ticks` account,\n * so the resolved account set is fixed regardless of trade size.\n */\nexport async function resolveExponentClmmTradePtContext(\n  params: ResolveExponentClmmTradePtContextParams\n): Promise<ExponentClmmTradePtContext> {\n  const { connection, owner } = params;\n  const ptTokenProgram = params.ptTokenProgram ?? TOKEN_PROGRAM_ID;\n  const syTokenProgram = params.syTokenProgram ?? TOKEN_PROGRAM_ID;\n\n  const market = await fetchExponentMarketThree(connection, params.market);\n\n  const altResult = await connection.getAddressLookupTable(market.addressLookupTable);\n  const alt = altResult.value;\n  if (!alt) {\n    throw new Error(\n      `Exponent CLMM market address lookup table not found: ${market.addressLookupTable.toBase58()}`\n    );\n  }\n  const altAddresses = alt.state.addresses;\n  const altKey = market.addressLookupTable;\n\n  // Order mirrors the SDK's CLMM trade_pt remaining accounts:\n  // getSyState ++ getPositionState ++ depositSy ++ withdrawSy, then de-duplicated.\n  const remainingAccounts = uniqueRemainingAccounts([\n    ...resolveCpiMetas(market.cpiAccounts.getSyState, altAddresses, altKey),\n    ...resolveCpiMetas(market.cpiAccounts.getPositionState, altAddresses, altKey),\n    ...resolveCpiMetas(market.cpiAccounts.depositSy, altAddresses, altKey),\n    ...resolveCpiMetas(market.cpiAccounts.withdrawSy, altAddresses, altKey),\n  ]);\n\n  const tokenSyTrader = getAssociatedTokenAddressSync(market.mintSy, owner, true, syTokenProgram);\n  const tokenPtTrader = getAssociatedTokenAddressSync(market.mintPt, owner, true, ptTokenProgram);\n\n  const tradePtAccounts: ExponentClmmTradePtAccounts = {\n    trader: owner,\n    market: market.selfAddress,\n    ticks: market.ticks,\n    tokenSyTrader,\n    tokenPtTrader,\n    tokenSyEscrow: market.tokenSyEscrow,\n    tokenPtEscrow: market.tokenPtEscrow,\n    addressLookupTable: market.addressLookupTable,\n    syProgram: market.syProgram,\n    tokenFeeTreasurySy: market.tokenFeeTreasurySy,\n    tokenFeeTreasuryPt: market.tokenFeeTreasuryPt,\n    tokenProgram: ptTokenProgram,\n    remainingAccounts,\n  };\n\n  const [syDecimals, ptDecimals] = await Promise.all([\n    getMintDecimals(connection, market.mintSy),\n    getMintDecimals(connection, market.mintPt),\n  ]);\n\n  return {\n    marketAddress: market.selfAddress,\n    market,\n    tradePtAccounts,\n    addressLookupTable: alt,\n    sy: { mint: market.mintSy, decimals: syDecimals, tokenProgram: syTokenProgram },\n    pt: { mint: market.mintPt, decimals: ptDecimals, tokenProgram: ptTokenProgram },\n  };\n}\n\n/**\n * Resolve everything needed to `strip` SY → PT + YT on an Exponent vault (the buy leg that\n * *mints* the successor PT, unbounded by AMM depth). Decodes the vault, derives the owner's\n * SY/PT/YT token accounts, resolves the `deposit_sy` CPI remaining accounts from the vault's\n * address lookup table, and exposes the last-seen SY exchange rate for sizing the minted PT.\n */\nexport async function resolveExponentStripContext(\n  params: ResolveExponentStripContextParams\n): Promise<ExponentStripContext> {\n  const { connection, owner } = params;\n  const ptYtTokenProgram = params.ptYtTokenProgram ?? TOKEN_PROGRAM_ID;\n  const syTokenProgram = params.syTokenProgram ?? TOKEN_PROGRAM_ID;\n\n  let vaultAddress: PublicKey;\n  let vault: ExponentVault;\n  if (params.vault) {\n    vaultAddress = params.vault;\n    vault = await fetchExponentVault(connection, vaultAddress);\n  } else if (params.market) {\n    const res = await fetchExponentVaultFromMarket(connection, params.market);\n    vaultAddress = res.vault;\n    vault = res.account;\n  } else {\n    throw new Error(\"resolveExponentStripContext: one of `vault` or `market` is required\");\n  }\n\n  const altResult = await connection.getAddressLookupTable(vault.addressLookupTable);\n  const alt = altResult.value;\n  if (!alt) {\n    throw new Error(\n      `Exponent vault address lookup table not found: ${vault.addressLookupTable.toBase58()}`\n    );\n  }\n  // strip's SY-CPI remaining accounts are just `deposit_sy` (it deposits SY into the vault).\n  const remainingAccounts: AccountMeta[] = resolveCpiMetas(\n    vault.cpiAccounts.depositSy,\n    alt.state.addresses,\n    vault.addressLookupTable\n  );\n\n  const sySrc = getAssociatedTokenAddressSync(vault.mintSy, owner, true, syTokenProgram);\n  const ptDst = getAssociatedTokenAddressSync(vault.mintPt, owner, true, ptYtTokenProgram);\n  const ytDst = getAssociatedTokenAddressSync(vault.mintYt, owner, true, ptYtTokenProgram);\n\n  const stripAccounts: ExponentStripAccounts = {\n    depositor: owner,\n    authority: vault.authority,\n    vault: vaultAddress,\n    sySrc,\n    escrowSy: vault.escrowSy,\n    ytDst,\n    ptDst,\n    mintYt: vault.mintYt,\n    mintPt: vault.mintPt,\n    syProgram: vault.syProgram,\n    addressLookupTable: vault.addressLookupTable,\n    yieldPosition: vault.yieldPosition,\n    tokenProgram: ptYtTokenProgram,\n    remainingAccounts,\n  };\n\n  const [syDecimals, ptDecimals] = await Promise.all([\n    getMintDecimals(connection, vault.mintSy),\n    getMintDecimals(connection, vault.mintPt),\n  ]);\n  const syExchangeRate = vault.lastSeenSyExchangeRate.toNumber();\n\n  return {\n    vaultAddress,\n    vault,\n    stripAccounts,\n    addressLookupTable: alt,\n    sy: { mint: vault.mintSy, decimals: syDecimals, tokenProgram: syTokenProgram },\n    pt: { mint: vault.mintPt, decimals: ptDecimals, tokenProgram: ptYtTokenProgram },\n    yt: { mint: vault.mintYt, tokenProgram: ptYtTokenProgram },\n    syExchangeRate,\n    computeStrippedPtNative(syInNative: bigint): bigint {\n      // strip mints py = floor(amount_sy × sy_exchange_rate) PT (and the same YT).\n      const pt = vault.lastSeenSyExchangeRate\n        .times(syInNative.toString())\n        .integerValue(BigNumber.ROUND_FLOOR);\n      return BigInt(pt.toFixed(0));\n    },\n  };\n}\n\n/**\n * Build the SPL Stake Pool `UpdateStakePoolBalance` instruction for `stakePool` by reading\n * the pool's account (validator list / reserve / manager fee / pool mint are at fixed offsets)\n * and deriving the pool's withdraw authority PDA — all dep-free. The pool's owning program is\n * read from the account itself (no hard-coded stake-pool program id).\n */\nasync function resolveSplStakePoolRefreshIx(\n  connection: ResolveExponentWrapperMergeContextParams[\"connection\"],\n  stakePool: PublicKey\n) {\n  const info = await connection.getAccountInfo(stakePool);\n  if (!info) throw new Error(`SPL stake pool account not found: ${stakePool.toBase58()}`);\n  const stakePoolProgram = info.owner;\n  const at = (off: number) => new PublicKey(info.data.subarray(off, off + 32));\n  const [withdrawAuthority] = PublicKey.findProgramAddressSync(\n    [stakePool.toBuffer(), Buffer.from(\"withdraw\")],\n    stakePoolProgram\n  );\n  return makeSplStakePoolUpdateBalanceIx({\n    stakePoolProgram,\n    stakePool,\n    withdrawAuthority,\n    validatorList: at(STAKE_POOL_OFFSETS.validatorList),\n    reserveStake: at(STAKE_POOL_OFFSETS.reserveStake),\n    managerFeeAccount: at(STAKE_POOL_OFFSETS.managerFeeAccount),\n    poolMint: at(STAKE_POOL_OFFSETS.poolMint),\n  });\n}\n\n/**\n * Resolve everything the roll's redeem leg needs to turn matured PT into the underlying\n * **base** token via `wrapper_merge` (merge PT → SY, then CPI-redeem SY → base, in one ix) —\n * so the buy leg swaps a normal token, not the un-swappable SY.\n *\n * Decodes the maturity `Vault`, derives the owner's SY/PT/YT/base token accounts, assembles\n * the flavor redeem accounts (all derivable: the generic SY state is `get_sy_state[0]`, the\n * SPL stake pool is `get_sy_state[3]`, the base escrow is `ATA(syState, baseMint)`), appends\n * the vault's `withdraw_sy ++ get_sy_state` CPI accounts, and builds the stake-pool refresh\n * that must run first. Validated byte-for-byte against the Exponent SDK's `ixMergeToBase`.\n */\nexport async function resolveExponentWrapperMergeContext(\n  params: ResolveExponentWrapperMergeContextParams\n): Promise<ExponentWrapperMergeContext> {\n  const { connection, owner, baseMint } = params;\n  const ptYtTokenProgram = params.ptYtTokenProgram ?? TOKEN_PROGRAM_ID;\n  const syTokenProgram = params.syTokenProgram ?? TOKEN_PROGRAM_ID;\n  const baseTokenProgram = params.baseTokenProgram ?? TOKEN_PROGRAM_ID;\n\n  let vaultAddress: PublicKey;\n  let vault: ExponentVault;\n  if (params.vault) {\n    vaultAddress = params.vault;\n    vault = await fetchExponentVault(connection, vaultAddress);\n  } else if (params.market) {\n    const res = await fetchExponentVaultFromMarket(connection, params.market);\n    vaultAddress = res.vault;\n    vault = res.account;\n  } else {\n    throw new Error(\"resolveExponentWrapperMergeContext: one of `vault` or `market` is required\");\n  }\n\n  const altResult = await connection.getAddressLookupTable(vault.addressLookupTable);\n  const alt = altResult.value;\n  if (!alt) {\n    throw new Error(\n      `Exponent vault address lookup table not found: ${vault.addressLookupTable.toBase58()}`\n    );\n  }\n  const altKey = vault.addressLookupTable;\n  const getSyState = resolveCpiMetas(vault.cpiAccounts.getSyState, alt.state.addresses, altKey);\n  const withdrawSy = resolveCpiMetas(vault.cpiAccounts.withdrawSy, alt.state.addresses, altKey);\n  if (getSyState.length < 4) {\n    throw new Error(\n      \"resolveExponentWrapperMergeContext: unexpected get_sy_state shape (expected the generic \" +\n        \"SPL-stake-pool flavor: [syState, mintSy, tokenSyEscrow, stakePool])\"\n    );\n  }\n  // The generic SY state owns the base escrow; the SPL stake pool drives the SY↔base rate.\n  const syState = getSyState[0].pubkey;\n  const stakePool = getSyState[3].pubkey;\n\n  const syAta = getAssociatedTokenAddressSync(vault.mintSy, owner, true, syTokenProgram);\n  const ptAta = getAssociatedTokenAddressSync(vault.mintPt, owner, true, ptYtTokenProgram);\n  const ytAta = getAssociatedTokenAddressSync(vault.mintYt, owner, true, ptYtTokenProgram);\n  const baseAta = getAssociatedTokenAddressSync(baseMint, owner, true, baseTokenProgram);\n  const baseEscrow = getAssociatedTokenAddressSync(baseMint, syState, true, baseTokenProgram);\n\n  // Flavor `redeem_sy` accounts (generic SY program). Owner (the redeemer) keeps its signer\n  // flag; everything else is non-signer. Order taken from the SDK's `flavor.ixRedeemSy`.\n  const redeem: AccountMeta[] = [\n    { pubkey: owner, isSigner: true, isWritable: true },\n    { pubkey: syState, isSigner: false, isWritable: true },\n    { pubkey: baseAta, isSigner: false, isWritable: true },\n    { pubkey: baseEscrow, isSigner: false, isWritable: true },\n    { pubkey: syAta, isSigner: false, isWritable: true },\n    { pubkey: vault.mintSy, isSigner: false, isWritable: true },\n    { pubkey: baseMint, isSigner: false, isWritable: false },\n    { pubkey: syTokenProgram, isSigner: false, isWritable: false },\n    { pubkey: baseTokenProgram, isSigner: false, isWritable: false },\n    { pubkey: stakePool, isSigner: false, isWritable: true },\n  ];\n  const cpi = uniqueRemainingAccounts([...withdrawSy, ...getSyState]);\n\n  const wrapperMergeAccounts: ExponentWrapperMergeAccounts = {\n    owner,\n    syAta,\n    vault: vaultAddress,\n    escrowSy: vault.escrowSy,\n    ytAta,\n    ptAta,\n    mintYt: vault.mintYt,\n    mintPt: vault.mintPt,\n    authority: vault.authority,\n    addressLookupTable: vault.addressLookupTable,\n    yieldPosition: vault.yieldPosition,\n    syProgram: vault.syProgram,\n    tokenProgram: ptYtTokenProgram,\n    remainingAccounts: [...redeem, ...cpi],\n    redeemSyAccountsUntil: redeem.length,\n  };\n\n  const [baseDecimals, stakePoolRefreshIx] = await Promise.all([\n    getMintDecimals(connection, baseMint),\n    resolveSplStakePoolRefreshIx(connection, stakePool),\n  ]);\n\n  return {\n    vaultAddress,\n    vault,\n    wrapperMergeAccounts,\n    preInstructions: [stakePoolRefreshIx],\n    addressLookupTable: alt,\n    baseToken: { mint: baseMint, decimals: baseDecimals, tokenProgram: baseTokenProgram },\n    setupMints: [\n      { mint: baseMint, tokenProgram: baseTokenProgram },\n      { mint: vault.mintSy, tokenProgram: syTokenProgram },\n      { mint: vault.mintPt, tokenProgram: ptYtTokenProgram },\n      { mint: vault.mintYt, tokenProgram: ptYtTokenProgram },\n    ],\n    computeRedeemedBaseNative(ptAmountNative: bigint): bigint {\n      // `merge` gives sy = floor(pt × sy_for_pt / pt_supply); the SY→base unwrap is 1:1 in\n      // *amount* (the SY exchange rate is a valuation, not a conversion factor — verified on\n      // mainnet: it slightly *under*-estimates the real base, a safe never-short lower bound\n      // for the swap input). So base ≈ the merge SY output.\n      if (vault.ptSupply === 0n) return 0n;\n      const base = new BigNumber(ptAmountNative.toString())\n        .times(vault.syForPt.toString())\n        .div(vault.ptSupply.toString())\n        .integerValue(BigNumber.ROUND_FLOOR);\n      return BigInt(base.toFixed(0));\n    },\n  };\n}\n","import { Buffer } from \"buffer\";\n\nimport {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport {\n  MakeRollPtTxParams,\n  RollQuoteSimResult,\n  RollQuoteSimulator,\n  SwapQuoteResult,\n} from \"../types\";\nimport {\n  isWholePosition,\n  computeFlashLoanNonSwapBudget,\n  compileFlashloanPrecheck,\n  patchDepositAmount,\n  isDepositIx,\n} from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeDepositIx } from \"./deposit\";\nimport { makeFlashLoanTx } from \"./flash-loan\";\nimport { makeWithdrawIx } from \"./withdraw\";\n\nimport { MAX_TX_SIZE, MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTxSize,\n  getTotalAccountKeys,\n  InstructionsWrapper,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { uiToNative } from \"~/utils\";\nimport {\n  EXPONENT_CLMM_PROGRAM_ID,\n  ExponentClmmTradePtContext,\n  ExponentMergeContext,\n  exponentClmmBuyPtArgs,\n  makeExponentClmmTradePtIx,\n  makeExponentMergeIx,\n  resolveExponentClmmTradePtContext,\n  resolveExponentMergeContext,\n} from \"~/vendor/exponent\";\nimport {\n  TOKEN_PROGRAM_ID,\n  createAssociatedTokenAccountIdempotentInstruction,\n  getAssociatedTokenAddressSync,\n} from \"~/vendor/spl\";\n\n/** Default slippage tolerance (bps) for the SY → PT CLMM swap when the caller omits one. */\nconst DEFAULT_ROLL_SLIPPAGE_BPS = 50;\n\n/**\n * Byte offset of `amount_out` (u64 LE) in a CLMM `trade_pt` `TradePtEvent` return blob:\n * 4 pubkeys (128) + swap_direction(u8) + is_current_flash_swap(bool) + amount_in(u64) = 138.\n */\nconst TRADE_PT_EVENT_AMOUNT_OUT_OFFSET = 138;\n\n/**\n * Roll a matured Exponent PT collateral position into its next-maturity PT, so the **full\n * deposit ends up as new PT** (no leftover), in one flash-loan-wrapped bundle:\n *\n *   withdraw PT_old → Exponent `merge` (PT_old → SY) → CLMM `trade_pt` (SY → PT_new)\n *     → deposit PT_new\n *\n * The matured PT is redeemed 1:1 to its SY, then the successor PT is bought **directly on its\n * CLMM (`MarketThree`) PT/SY pool** — no base-token round-trip and no external aggregator. The\n * newer maturities (e.g. October bulkSOL) only list a CLMM pool (no `MarketTwo`, no order\n * book), and the CLMM uses a single `ticks` account, so the swap is a fixed, compact account\n * set regardless of trade size. The caller passes the matured Exponent market/vault + the\n * successor CLMM pool (`rollOpts`); everything Exponent is resolved internally. The buy is\n * bounded by the pool's depth.\n */\nexport async function makeRollPtTx(params: MakeRollPtTxParams): Promise<{\n  transactions: ExtendedV0Transaction[];\n  actionTxIndex: number;\n  quoteResponse: SwapQuoteResult | undefined;\n}> {\n  const {\n    program,\n    marginfiAccount,\n    connection,\n    bankMap,\n    oraclePrices,\n    withdrawOpts,\n    depositOpts,\n    rollOpts,\n    assetShareValueMultiplierByBank,\n    addressLookupTableAccounts,\n    crossbarUrl,\n  } = params;\n\n  if (!rollOpts.maturedMarket && !rollOpts.maturedVault) {\n    throw new Error(\"roll-pt: rollOpts.maturedMarket or maturedVault is required\");\n  }\n\n  // Resolve the matured vault's `merge` (redeem PT → SY) accounts and the successor CLMM pool's\n  // `trade_pt` (buy SY → PT) accounts up front. The merge's SY is exactly the CLMM pool's quote\n  // token (the same SY mint is shared across maturities), so the redeemed SY feeds the buy directly.\n  const merge = await resolveExponentMergeContext({\n    connection,\n    owner: marginfiAccount.authority,\n    market: rollOpts.maturedMarket,\n    vault: rollOpts.maturedVault,\n    ptYtTokenProgram: withdrawOpts.tokenProgram,\n    syTokenProgram: rollOpts.syTokenProgram,\n  });\n  const clmm = await resolveExponentClmmTradePtContext({\n    connection,\n    owner: marginfiAccount.authority,\n    market: rollOpts.successorMarket,\n    ptTokenProgram: depositOpts.tokenProgram,\n    syTokenProgram: rollOpts.syTokenProgram,\n  });\n\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  // ATAs the bundle touches: old PT (withdraw dest + merge pt_src), the matured vault's YT (a\n  // fixed `merge` account — validated as an initialized token account even post-maturity, when no\n  // YT is actually moved), the shared SY (merge dst + trade src), and the new PT (trade dest +\n  // deposit source). No base, and no YT *byproduct* — the YT ATA just has to exist.\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: marginfiAccount.authority,\n    tokens: [\n      { mint: withdrawOpts.withdrawBank.mint, tokenProgram: withdrawOpts.tokenProgram },\n      { mint: merge.mergeAccounts.mintYt, tokenProgram: withdrawOpts.tokenProgram },\n      { mint: merge.underlying.mint, tokenProgram: merge.underlying.tokenProgram },\n      { mint: depositOpts.depositBank.mint, tokenProgram: depositOpts.tokenProgram },\n    ],\n  });\n\n  const { flashloanTx, swapQuote, withdrawIxs, depositIxs } = await buildRollPtFlashloanTx({\n    params,\n    merge,\n    clmm,\n    setupIxs,\n    blockhash,\n  });\n\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    instructions: [...withdrawIxs.instructions, ...depositIxs.instructions],\n    program,\n    connection,\n    crossbarUrl,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  if (setupIxs.length > 0) {\n    const txs = splitInstructionsToFitTransactions([], setupIxs, {\n      blockhash,\n      payerKey: marginfiAccount.authority,\n      luts: addressLookupTableAccounts ?? [],\n    });\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: addressLookupTableAccounts,\n        })\n      )\n    );\n  }\n\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n\n  return {\n    transactions,\n    actionTxIndex: transactions.length - 1,\n    quoteResponse: swapQuote,\n  };\n}\n\nasync function buildRollPtFlashloanTx({\n  params,\n  merge,\n  clmm,\n  blockhash,\n}: {\n  params: MakeRollPtTxParams;\n  merge: ExponentMergeContext;\n  clmm: ExponentClmmTradePtContext;\n  setupIxs: TransactionInstruction[];\n  blockhash: string;\n}) {\n  const {\n    program,\n    marginfiAccount,\n    bankMap,\n    withdrawOpts,\n    depositOpts,\n    bankMetadataMap,\n    connection,\n    addressLookupTableAccounts,\n    overrideInferAccounts,\n    rollOpts,\n  } = params;\n  const {\n    withdrawBank,\n    tokenProgram: withdrawTokenProgram,\n    totalPositionAmount,\n    withdrawAmount,\n  } = withdrawOpts;\n  const { depositBank, tokenProgram: depositTokenProgram } = depositOpts;\n  const authority = marginfiAccount.authority;\n  const simulateTx = params.simulateTx ?? defaultRollQuoteSimulator(connection);\n\n  if (withdrawAmount !== undefined && withdrawAmount <= 0) {\n    throw new Error(\"withdrawAmount must be greater than 0\");\n  }\n  const actualWithdrawAmount = Math.min(withdrawAmount ?? totalPositionAmount, totalPositionAmount);\n  const isFullWithdraw = isWholePosition(\n    { amount: totalPositionAmount, isLending: true },\n    actualWithdrawAmount,\n    withdrawBank.mintDecimals\n  );\n  const withdrawNative = BigInt(\n    uiToNative(actualWithdrawAmount, withdrawBank.mintDecimals).toString()\n  );\n\n  const cuRequestIxs = [\n    ComputeBudgetProgram.setComputeUnitLimit({ units: 1_200_000 }),\n    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n  ];\n\n  // 1. Withdraw the matured PT (standard SPL collateral bank).\n  const withdrawIxs: InstructionsWrapper = await makeWithdrawIx({\n    program,\n    bank: withdrawBank,\n    bankMap,\n    tokenProgram: withdrawTokenProgram,\n    amount: actualWithdrawAmount,\n    marginfiAccount,\n    authority,\n    withdrawAll: isFullWithdraw,\n    bankMetadataMap,\n    isSync: false,\n    opts: { createAtas: false, wrapAndUnwrapSol: false, overrideInferAccounts },\n  });\n\n  // 2. `merge`: PT_old → SY, post-maturity (1:1, no AMM). The redeemed SY is exactly the CLMM\n  //    pool's quote token, so it feeds the buy directly.\n  const mergeIx = makeExponentMergeIx(merge.mergeAccounts, withdrawNative);\n\n  // 3. Deposit the new PT — seeded with a placeholder, byte-patched to the swap's min output.\n  const depositIxs: InstructionsWrapper = await makeDepositIx({\n    program,\n    bank: depositBank,\n    tokenProgram: depositTokenProgram,\n    amount: 0,\n    accountAddress: marginfiAccount.address,\n    authority,\n    group: marginfiAccount.group,\n    opts: { wrapAndUnwrapSol: false, overrideInferAccounts },\n  });\n\n  // LUTs for the bundle: the matured vault ALT (merge remaining accounts) + the CLMM pool ALT\n  // (trade_pt remaining accounts). A dedicated PT-roll LUT (`rollOpts.lookupTable`) can replace\n  // them to compress bytes; account *locks* are bounded by the fixed, compact CLMM footprint.\n  let luts: AddressLookupTableAccount[];\n  if (rollOpts.lookupTable) {\n    const fetched = (await connection.getAddressLookupTable(rollOpts.lookupTable)).value;\n    if (!fetched) {\n      throw new Error(\n        `roll-pt: PT-roll lookup table not found: ${rollOpts.lookupTable.toBase58()}`\n      );\n    }\n    luts = [fetched, merge.addressLookupTable, clmm.addressLookupTable];\n  } else {\n    luts = [\n      ...(addressLookupTableAccounts ?? []),\n      merge.addressLookupTable,\n      clmm.addressLookupTable,\n    ];\n  }\n\n  // 4. Size the redeem deterministically: merge pays floor(pt × sy_for_pt / pt_supply) —\n  //    Exponent's `Vault::pt_redemption_rate` — computed from the vault state fetched at\n  //    resolve time, so it matches the program's own floor math exactly. (Reading\n  //    `MergeEvent.amount_sy_out` from a flash-loan quote sim is not viable in practice:\n  //    the withdraw's event logs blow the node's log budget, truncating the return line,\n  //    and bundle-sim transports return no structured `returnData`.)\n  const syExact = merge.computeRedeemedAmountNative(withdrawNative);\n  if (syExact <= 0n) {\n    throw new Error(\"roll-pt: merge would redeem 0 SY (empty/invalid matured vault state)\");\n  }\n\n  const exactPtOut = await quoteClmmTradeOut({\n    connection,\n    simulateTx,\n    clmm,\n    amountInSyNative: syExact,\n    payer: authority,\n  });\n\n  const slippageBps = rollOpts.slippageBps ?? DEFAULT_ROLL_SLIPPAGE_BPS;\n  // Guaranteed floor: the trade reverts below this, and the deposit is sized to it so it can\n  // never exceed the PT actually received (any slippage dust stays in the wallet).\n  const minPtOut = (exactPtOut * BigInt(10_000 - slippageBps)) / 10_000n;\n  if (minPtOut <= 0n) {\n    throw new Error(\"roll-pt: quoted PT out is 0 (insufficient CLMM liquidity for this size)\");\n  }\n\n  // 5. Buy the new PT with the redeemed SY (exact-in on the merge's SY, min-out guard on PT).\n  const tradeIx = makeExponentClmmTradePtIx(\n    clmm.tradePtAccounts,\n    exponentClmmBuyPtArgs({ amountInSyNative: syExact, minPtOutNative: minPtOut })\n  );\n\n  // Patch the seeded deposit to the guaranteed (minimum) PT output.\n  const depositIxToPatch = depositIxs.instructions.find(isDepositIx);\n  if (!depositIxToPatch) {\n    throw new Error(\"roll-pt: could not locate deposit instruction for amount patching\");\n  }\n  patchDepositAmount(depositIxToPatch, new BN(minPtOut.toString()));\n\n  const allNonFlIxs = [\n    ...cuRequestIxs,\n    ...withdrawIxs.instructions,\n    mergeIx,\n    tradeIx,\n    ...depositIxs.instructions,\n  ];\n\n  // Size the precheck against the full footprint (the CLMM swap is part of the flashloan, not an\n  // engine route, so there are no separate swap ix/LUT counts to reserve).\n  const { sizeConstraint } = computeFlashLoanNonSwapBudget({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    ixs: allNonFlIxs,\n  });\n\n  compileFlashloanPrecheck({\n    allIxs: allNonFlIxs,\n    payer: authority,\n    luts,\n    sizeConstraint,\n    swapIxCount: 0,\n    swapLutCount: 0,\n  });\n\n  const flashloanTx = await makeFlashLoanTx({\n    program,\n    marginfiAccount,\n    bankMap,\n    addressLookupTableAccounts: luts,\n    blockhash,\n    ixs: allNonFlIxs,\n    isSync: false,\n  });\n\n  const txSize = getTxSize(flashloanTx);\n  const totalKeys = getTotalAccountKeys(flashloanTx);\n  if (txSize > MAX_TX_SIZE || totalKeys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.swapSizeExceededPositionSwap(txSize, totalKeys, undefined);\n  }\n\n  const swapQuote: SwapQuoteResult = {\n    inAmount: syExact.toString(),\n    outAmount: exactPtOut.toString(),\n    otherAmountThreshold: minPtOut.toString(),\n    slippageBps,\n  };\n\n  return { flashloanTx, swapQuote, withdrawIxs, depositIxs };\n}\n\n/** The default {@link RollQuoteSimulator}: a plain `connection.simulateTransaction`. */\nfunction defaultRollQuoteSimulator(\n  connection: MakeRollPtTxParams[\"connection\"]\n): RollQuoteSimulator {\n  return async (tx) => {\n    const sim = await connection.simulateTransaction(tx, {\n      sigVerify: false,\n      replaceRecentBlockhash: true,\n    });\n    return {\n      err: sim.value.err,\n      logs: sim.value.logs,\n      returnData: (sim.value as { returnData?: RollQuoteSimResult[\"returnData\"] }).returnData,\n    };\n  };\n}\n\n/**\n * Net native-amount change of (`mint`, `owner`) across a quote sim's token balances, or\n * `null` when the transport supplied none (plain `simulateTransaction` doesn't).\n */\nfunction tokenBalanceDelta(sim: RollQuoteSimResult, mint: string, owner: string): bigint | null {\n  if (!sim.preTokenBalances && !sim.postTokenBalances) return null;\n  const sum = (list: RollQuoteSimResult[\"postTokenBalances\"]) =>\n    (list ?? [])\n      .filter((b) => b.mint === mint && b.owner === owner)\n      .reduce((acc, b) => acc + BigInt(b.amount), 0n);\n  return sum(sim.postTokenBalances) - sum(sim.preTokenBalances);\n}\n\n/**\n * Read `amount_out` from a `trade_pt` return blob. The committed IDL declares the full\n * `TradePtEvent` (amount_out at byte 138), but the DEPLOYED program returns a compact\n * 16-byte pair — decoded self-validatingly: the field equal to the known `amountIn`\n * identifies the layout, the other field is `amount_out`. Returns `null` when the blob\n * matches neither shape.\n */\nfunction readTradePtOut(data: Buffer, amountIn: bigint): bigint | null {\n  if (data.length === 16) {\n    const a = data.readBigUInt64LE(0);\n    const b = data.readBigUInt64LE(8);\n    if (a === amountIn) return b;\n    if (b === amountIn) return a;\n    return null;\n  }\n  if (data.length >= TRADE_PT_EVENT_AMOUNT_OUT_OFFSET + 8) {\n    return data.readBigUInt64LE(TRADE_PT_EVENT_AMOUNT_OUT_OFFSET);\n  }\n  return null;\n}\n\n/**\n * Quote the exact PT out for `amountInSyNative` SY on the successor CLMM, by simulating a\n * **standalone** `trade_pt` and reading the trader's PT balance delta (or the program\n * return blob when the transport reports no token balances).\n *\n * A CLMM swap is trader-independent — the output for a given input + pool state is the same\n * whoever trades — so we run the quote against an existing large SY holder (the swap isn't\n * executed; the holder's balance just lets the simulation transfer `amountInSyNative` SY). This\n * keeps the quote a short, self-contained, **succeeding** simulation: its `returnData` is\n * reliable (unlike the redeem+trade flash-loan sim, whose logs can truncate). The roll authority\n * is the fee payer (`sigVerify` is off, so neither it nor the holder needs to actually sign).\n */\nasync function quoteClmmTradeOut({\n  connection,\n  simulateTx,\n  clmm,\n  amountInSyNative,\n  payer,\n}: {\n  connection: MakeRollPtTxParams[\"connection\"];\n  simulateTx: RollQuoteSimulator;\n  clmm: ExponentClmmTradePtContext;\n  amountInSyNative: bigint;\n  payer: PublicKey;\n}): Promise<bigint> {\n  // Exclude the pool's own SY token accounts so we don't quote against its escrow/treasury.\n  const excluded = new Set([\n    clmm.tradePtAccounts.tokenSyEscrow.toBase58(),\n    clmm.tradePtAccounts.tokenFeeTreasurySy.toBase58(),\n  ]);\n  const largest = await connection.getTokenLargestAccounts(clmm.sy.mint);\n  const funded = largest.value.find(\n    (a) => !excluded.has(a.address.toBase58()) && BigInt(a.amount) >= amountInSyNative\n  );\n  if (!funded) {\n    throw new Error(\n      \"roll-pt: no SY holder large enough to quote the buy — the roll size exceeds available \" +\n        \"CLMM liquidity for this pair\"\n    );\n  }\n  const parsed = await connection.getParsedAccountInfo(funded.address);\n  const info = (parsed.value?.data as { parsed?: { info?: { owner?: string } } } | undefined)\n    ?.parsed?.info;\n  if (!info?.owner) throw new Error(\"roll-pt: could not resolve the quote SY holder's owner\");\n  const trader = new PublicKey(info.owner);\n  const ptTokenProgram = clmm.pt.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const tokenPtTrader = getAssociatedTokenAddressSync(clmm.pt.mint, trader, true, ptTokenProgram);\n\n  // Re-point the trade at the funded holder (the pool/ticks/escrow/CPI accounts are unchanged).\n  const quoteIx = makeExponentClmmTradePtIx(\n    { ...clmm.tradePtAccounts, trader, tokenSyTrader: funded.address, tokenPtTrader },\n    exponentClmmBuyPtArgs({ amountInSyNative, minPtOutNative: 1n })\n  );\n  const createPtAta = createAssociatedTokenAccountIdempotentInstruction(\n    payer,\n    tokenPtTrader,\n    trader,\n    clmm.pt.mint,\n    ptTokenProgram\n  );\n\n  const { blockhash } = await connection.getLatestBlockhash(\"confirmed\");\n  const message = new TransactionMessage({\n    payerKey: payer,\n    recentBlockhash: blockhash,\n    instructions: [createPtAta, quoteIx],\n  }).compileToV0Message([clmm.addressLookupTable]);\n  const sim = await simulateTx(new VersionedTransaction(message));\n\n  if (process.env.ROLL_DEBUG) {\n    // eslint-disable-next-line no-console\n    console.error(\n      \"[roll trade quote] err:\",\n      JSON.stringify(sim.err),\n      \"returnData?\",\n      !!sim.returnData\n    );\n  }\n\n  // The PT actually credited to the trader IS the quote — transport-independent ground\n  // truth, reported by bundle-sim transports. The trade is the trader's only PT movement.\n  const delta = tokenBalanceDelta(sim, clmm.pt.mint.toBase58(), trader.toBase58());\n  if (delta !== null && delta > 0n) return delta;\n\n  // Plain `simulateTransaction` transports report no token balances — read the program\n  // return blob instead.\n  const rd = sim.returnData;\n  if (rd?.data && rd.programId === EXPONENT_CLMM_PROGRAM_ID.toBase58()) {\n    const out = readTradePtOut(\n      Buffer.from(rd.data[0], rd.data[1] as BufferEncoding),\n      amountInSyNative\n    );\n    if (out !== null && out > 0n) return out;\n  }\n\n  throw new Error(\n    `roll-pt: CLMM trade quote produced no readable output (err=${JSON.stringify(sim.err)})`\n  );\n}\n","import {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport {\n  MakeTransferPositionsTxParams,\n  TransferPositionSide,\n  TransferPositionsResult,\n} from \"../types\";\nimport { MarginfiAccountType } from \"../types/account.types\";\nimport { computeHealthAccountMetas, computeQuantityUi } from \"../utils\";\nimport { findRandomAvailableAccountIndex } from \"../utils/fetch.utils\";\n\nimport { makeCreateAccountIxWithProjection, makeSetupIx } from \"./account-lifecycle\";\nimport { makeBorrowIx } from \"./borrow\";\nimport { makeDepositIx, makeKaminoDepositIx, makeJuplendDepositIx } from \"./deposit\";\nimport { makeBeginFlashLoanIx, makeEndFlashLoanIx } from \"./flash-loan\";\nimport { makeRepayIx } from \"./repay\";\nimport { makeWithdrawIx, makeKaminoWithdrawIx, makeJuplendWithdrawIx } from \"./withdraw\";\n\nimport { MAX_ACCOUNT_LOCKS, MAX_TX_SIZE } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { AssetTag, BankType, RiskTier, requireBank, requireTokenProgram } from \"~/services/bank\";\nimport {\n  makeSmartCrankSwbFeedIxForAccounts,\n  makeRefreshKaminoBanksIxs,\n  makeUpdateJupLendRateIxs,\n} from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTotalAccountKeys,\n  getTxSize,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { MarginfiProgram, BankIntegrationMetadataMap } from \"~/types\";\n\n/** Fixed marginfi balance slots per account. */\nconst MAX_BALANCES = 16;\n\n/** Default hard cap on positions moved in one transfer. Keeps the whole transfer inside one tx. */\nconst DEFAULT_MAX_TRANSFER_POSITIONS = 5;\n\nconst DEFAULT_BORROW_PADDING_BPS = 10;\n\nconst CU_IXS = () => [\n  ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n  ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }),\n];\n\n// --------------------------------------------------------------------------------------\n// Classification\n// --------------------------------------------------------------------------------------\n\nexport interface ClassifiedPosition {\n  bankAddress: PublicKey;\n  side: TransferPositionSide;\n  /** UI amount of the position (collateral: withdrawn from A / deposited to B; debt: repaid on A). */\n  uiAmount: BigNumber;\n  bank: BankType;\n  tokenProgram: PublicKey;\n}\n\n/** Shared lookups, thrown as INVALID_SELECTION so the copy stays user-facing. */\nconst invalidSelection =\n  (address: PublicKey) =>\n  (message: string): Error =>\n    TransactionBuildingError.transferPositionsInvalidSelection(message, [address.toBase58()]);\n\n/**\n * Validate the selection, infer each position's side, and resolve its UI amount. Correctness of the\n * transfer itself (both accounts staying healthy) is enforced on-chain by the flashloan's end health\n * check on A and each borrow's health check on B — so no client-side health/USD math is needed.\n */\nexport function classifyAndValidate(params: MakeTransferPositionsTxParams): ClassifiedPosition[] {\n  const {\n    marginfiAccount: accountA,\n    destinationAccount: accountB,\n    bankAddresses,\n    bankMap,\n    tokenProgramsByBank,\n    assetShareValueMultiplierByBank,\n  } = params;\n\n  const maxPositions = params.maxPositions ?? DEFAULT_MAX_TRANSFER_POSITIONS;\n\n  if (bankAddresses.length === 0) {\n    throw TransactionBuildingError.transferPositionsInvalidSelection(\"no positions selected\", []);\n  }\n  if (bankAddresses.length > maxPositions) {\n    throw TransactionBuildingError.transferPositionsInvalidSelection(\n      `cannot transfer ${bankAddresses.length} positions in one transaction (max ${maxPositions}); select fewer and transfer in batches`,\n      bankAddresses.map((b) => b.toBase58())\n    );\n  }\n\n  const activeBalancesA = accountA.balances.filter((b) => b.active);\n  const positions: ClassifiedPosition[] = [];\n\n  for (const bankAddress of bankAddresses) {\n    const bank = requireBank(bankMap, bankAddress, invalidSelection(bankAddress));\n    const tokenProgram = requireTokenProgram(\n      tokenProgramsByBank,\n      bankAddress,\n      invalidSelection(bankAddress)\n    );\n\n    const balance = activeBalancesA.find((b) => b.bankPk.equals(bankAddress));\n    if (!balance) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        `source account has no active position in bank ${bankAddress.toBase58()}`,\n        [bankAddress.toBase58()]\n      );\n    }\n\n    const side: TransferPositionSide = balance.assetShares.gt(0) ? \"collateral\" : \"debt\";\n    const multiplier = assetShareValueMultiplierByBank.get(bankAddress.toBase58());\n    const qty = computeQuantityUi(balance, bank, multiplier);\n\n    positions.push({\n      bankAddress,\n      side,\n      uiAmount: side === \"collateral\" ? qty.assets : qty.liabilities,\n      bank,\n      tokenProgram,\n    });\n  }\n\n  // Isolated-tier debt must be the destination account's only liability.\n  const isolatedDebts = positions.filter(\n    (p) => p.side === \"debt\" && p.bank.config.riskTier === RiskTier.Isolated\n  );\n  if (isolatedDebts.length > 0) {\n    const otherDebts = positions.filter((p) => p.side === \"debt\").length > 1;\n    const destHasLiabilities = (accountB?.balances ?? []).some(\n      (b) => b.active && b.liabilityShares.gt(0)\n    );\n    if (isolatedDebts.length > 1 || otherDebts || destHasLiabilities) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        \"an isolated-tier debt can only be transferred as the destination account's sole liability\",\n        isolatedDebts.map((p) => p.bankAddress.toBase58())\n      );\n    }\n  }\n\n  // Destination account validation.\n  if (accountB) {\n    if (!accountB.group.equals(accountA.group)) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        \"destination account is in a different group\",\n        [accountB.address.toBase58()]\n      );\n    }\n    if (!accountB.authority.equals(accountA.authority)) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        \"destination account has a different authority\",\n        [accountB.address.toBase58()]\n      );\n    }\n    const overlap = positions.filter((p) =>\n      accountB.balances.some((b) => b.active && b.bankPk.equals(p.bankAddress))\n    );\n    if (overlap.length > 0) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        \"destination account already holds a position in a transferred bank\",\n        overlap.map((p) => p.bankAddress.toBase58())\n      );\n    }\n    const activeCountB = accountB.balances.filter((b) => b.active).length;\n    if (activeCountB + positions.length > MAX_BALANCES) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        `destination account cannot hold ${activeCountB + positions.length} positions (max ${MAX_BALANCES})`,\n        positions.map((p) => p.bankAddress.toBase58())\n      );\n    }\n  }\n\n  return positions;\n}\n\n// --------------------------------------------------------------------------------------\n// Integration reserve/rate refresh\n// --------------------------------------------------------------------------------------\n\n/**\n * On-chain reserve/rate refresh ixs the integration collateral legs depend on. Kamino has no\n * self-refresh, so its reserves must be re-derived and the bank-level obligations of the banks we\n * act on refreshed. JupLend deposit/withdraw self-refresh their own bank, so only *other* JupLend\n * banks that stay in a health pack need the permissionless rate crank.\n *\n * Following the swap-collateral / repay-with-collateral precedent these ride in a transaction that\n * precedes the flashloan rather than inside it: the builders return no signer keys, and keeping them\n * out of the flashloan preserves its byte/lock budget.\n */\nfunction buildIntegrationRefreshIxs(args: {\n  accountA: MarginfiAccountType;\n  destinationAccount?: MarginfiAccountType;\n  positions: ClassifiedPosition[];\n  bankMap: Map<string, BankType>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n}): TransactionInstruction[] {\n  const { accountA, destinationAccount, positions, bankMap, bankMetadataMap } = args;\n\n  const transferredKaminoPks = positions\n    .filter((p) => p.bank.config.assetTag === AssetTag.KAMINO)\n    .map((p) => p.bankAddress);\n  const transferredJupPks = positions\n    .filter((p) => p.bank.config.assetTag === AssetTag.JUPLEND)\n    .map((p) => p.bankAddress);\n\n  const ixs: TransactionInstruction[] = [];\n\n  // Kamino: refresh reserves for the source's active Kamino banks (covers the transferred ones,\n  // which are active on A) plus the obligations of the transferred banks.\n  ixs.push(\n    ...makeRefreshKaminoBanksIxs(accountA, bankMap, transferredKaminoPks, bankMetadataMap)\n      .instructions\n  );\n  // A pre-existing destination may hold its own Kamino collateral read by each borrow's health pack.\n  if (destinationAccount) {\n    ixs.push(\n      ...makeRefreshKaminoBanksIxs(destinationAccount, bankMap, [], bankMetadataMap).instructions\n    );\n  }\n\n  // JupLend: crank the rate on the source's *other* JupLend banks; transferred banks self-refresh\n  // through their own withdraw (A) and deposit (B).\n  ixs.push(\n    ...makeUpdateJupLendRateIxs(accountA, bankMap, transferredJupPks, bankMetadataMap).instructions\n  );\n  if (destinationAccount) {\n    ixs.push(\n      ...makeUpdateJupLendRateIxs(destinationAccount, bankMap, transferredJupPks, bankMetadataMap)\n        .instructions\n    );\n  }\n\n  return ixs;\n}\n\n// --------------------------------------------------------------------------------------\n// Instruction assembly\n// --------------------------------------------------------------------------------------\n\nfunction dedupeBanks(banks: BankType[]): BankType[] {\n  const seen = new Map<string, BankType>();\n  for (const bank of banks) seen.set(bank.address.toBase58(), bank);\n  return [...seen.values()];\n}\n\nexport interface BuildContext {\n  program: MarginfiProgram;\n  accountA: MarginfiAccountType;\n  accountB: MarginfiAccountType;\n  bankMap: Map<string, BankType>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  borrowPaddingBps: number;\n  groupRateLimiterEnabled: boolean;\n  overrideInferAccounts?: { group?: PublicKey; authority?: PublicKey };\n  /** Banks the destination account already holds before the transfer starts. */\n  destPreexistingBanks: BankType[];\n}\n\n/**\n * Build one collateral position's withdraw-from-A + deposit-into-B instructions, dispatching to the\n * right builder for the bank's asset tag. This is the single place that defines which banks the\n * action supports: `DEFAULT`/`SOL`/`STAKED` use the standard withdraw/deposit; `KAMINO`/`JUPLEND`\n * use their dedicated builders (which lock the integration's reserve/vault accounts and, for Kamino,\n * convert the underlying UI amount to cToken units); anything else throws\n * `TRANSFER_POSITIONS_UNSUPPORTED_BANK`. The reserve/rate state each integration builder needs is\n * read from `bankMetadataMap`; the on-chain refresh those reads depend on is emitted separately in\n * `buildIntegrationRefreshIxs`.\n *\n * `observationBanksOverride` controls the withdraw leg's health pack (empty while A is flashloaned\n * with the group limiter off; the withdrawn bank's oracle when it is on). The deposit leg runs no\n * health check, so it needs none.\n */\nexport async function buildCollateralLegIxs(\n  ctx: BuildContext,\n  position: ClassifiedPosition,\n  isSync: boolean,\n  observationBanksOverride: ReturnType<typeof computeHealthAccountMetas>\n): Promise<{ withdrawIxs: TransactionInstruction[]; depositIxs: TransactionInstruction[] }> {\n  const { bank, tokenProgram, uiAmount } = position;\n  const tag = bank.config.assetTag;\n  const key = bank.address.toBase58();\n\n  if (tag === AssetTag.KAMINO) {\n    const reserve = ctx.bankMetadataMap[key]?.kaminoStates?.reserveState;\n    if (!reserve) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        `kamino reserve state missing for bank ${key} (populate bankMetadataMap.kaminoStates)`,\n        [key]\n      );\n    }\n    const multiplier = ctx.assetShareValueMultiplierByBank.get(key) ?? new BigNumber(1);\n    const cTokenAmount = uiAmount.div(multiplier);\n    const withdraw = await makeKaminoWithdrawIx({\n      program: ctx.program,\n      bank,\n      bankMap: ctx.bankMap,\n      tokenProgram,\n      cTokenAmount,\n      marginfiAccount: ctx.accountA,\n      authority: ctx.accountA.authority,\n      reserve,\n      bankMetadataMap: ctx.bankMetadataMap,\n      withdrawAll: true,\n      isSync,\n      opts: {\n        createAtas: false,\n        wrapAndUnwrapSol: false,\n        overrideInferAccounts: ctx.overrideInferAccounts,\n        observationBanksOverride,\n      },\n    });\n    const deposit = await makeKaminoDepositIx({\n      program: ctx.program,\n      bank,\n      tokenProgram,\n      amount: uiAmount,\n      accountAddress: ctx.accountB.address,\n      authority: ctx.accountA.authority,\n      group: ctx.accountB.group,\n      reserve,\n      isSync,\n      opts: { wrapAndUnwrapSol: false, overrideInferAccounts: ctx.overrideInferAccounts },\n    });\n    return { withdrawIxs: withdraw.instructions, depositIxs: deposit.instructions };\n  }\n\n  if (tag === AssetTag.JUPLEND) {\n    const jupLendingState = ctx.bankMetadataMap[key]?.jupLendStates?.jupLendingState;\n    if (!jupLendingState) {\n      throw TransactionBuildingError.transferPositionsInvalidSelection(\n        `juplend lending state missing for bank ${key} (populate bankMetadataMap.jupLendStates)`,\n        [key]\n      );\n    }\n    const withdraw = await makeJuplendWithdrawIx({\n      program: ctx.program,\n      bank,\n      bankMap: ctx.bankMap,\n      tokenProgram,\n      amount: uiAmount,\n      marginfiAccount: ctx.accountA,\n      authority: ctx.accountA.authority,\n      jupLendingState,\n      bankMetadataMap: ctx.bankMetadataMap,\n      withdrawAll: true,\n      isSync,\n      opts: {\n        createAtas: false,\n        wrapAndUnwrapSol: false,\n        overrideInferAccounts: ctx.overrideInferAccounts,\n        observationBanksOverride,\n      },\n    });\n    const deposit = await makeJuplendDepositIx({\n      program: ctx.program,\n      bank,\n      tokenProgram,\n      amount: uiAmount,\n      accountAddress: ctx.accountB.address,\n      authority: ctx.accountA.authority,\n      group: ctx.accountB.group,\n      isSync,\n      opts: { wrapAndUnwrapSol: false, overrideInferAccounts: ctx.overrideInferAccounts },\n    });\n    return { withdrawIxs: withdraw.instructions, depositIxs: deposit.instructions };\n  }\n\n  // Standard banks (DEFAULT/SOL/STAKED) move with the plain lending ixs. Any other tag is an\n  // integration we don't yet have a collateral-leg builder for (DRIFT/SOLEND, or a future tag).\n  // Adding an integration means adding one branch above, nothing elsewhere.\n  if (tag !== AssetTag.DEFAULT && tag !== AssetTag.SOL && tag !== AssetTag.STAKED) {\n    throw TransactionBuildingError.transferPositionsUnsupportedBank(key, tag, bank.tokenSymbol);\n  }\n\n  const withdraw = await makeWithdrawIx({\n    program: ctx.program,\n    bank,\n    bankMap: ctx.bankMap,\n    tokenProgram,\n    amount: uiAmount,\n    marginfiAccount: ctx.accountA,\n    authority: ctx.accountA.authority,\n    withdrawAll: true,\n    bankMetadataMap: ctx.bankMetadataMap,\n    isSync,\n    opts: {\n      createAtas: false,\n      wrapAndUnwrapSol: false,\n      overrideInferAccounts: ctx.overrideInferAccounts,\n      observationBanksOverride,\n    },\n  });\n  const deposit = await makeDepositIx({\n    program: ctx.program,\n    bank,\n    tokenProgram,\n    amount: uiAmount,\n    accountAddress: ctx.accountB.address,\n    authority: ctx.accountA.authority,\n    group: ctx.accountB.group,\n    isSync,\n    opts: { wrapAndUnwrapSol: false, overrideInferAccounts: ctx.overrideInferAccounts },\n  });\n  return { withdrawIxs: withdraw.instructions, depositIxs: deposit.instructions };\n}\n\n/**\n * Build the flashloan's inner instructions for the whole selection:\n *   [cu…, withdraws(A)…, deposits(B)…, borrows(B)…, repays(A)…]\n * All deposits precede all borrows so every intermediate destination state is healthier than the\n * transaction-final one. Withdraws and repays carry no health accounts (A is inside the flashloan);\n * withdraws only gain the withdrawn bank's oracle when the group limiter is enabled. Each borrow\n * carries the destination's health pack for its banks active at that point.\n */\nasync function buildInnerIxs(\n  ctx: BuildContext,\n  positions: ClassifiedPosition[],\n  isSync: boolean\n): Promise<TransactionInstruction[]> {\n  const collateral = positions.filter((p) => p.side === \"collateral\");\n  const debts = positions.filter((p) => p.side === \"debt\");\n  const collateralBanks = collateral.map((p) => p.bank);\n\n  const withdrawIxs: TransactionInstruction[] = [];\n  const depositIxs: TransactionInstruction[] = [];\n  const borrowIxs: TransactionInstruction[] = [];\n  const repayIxs: TransactionInstruction[] = [];\n\n  for (const position of collateral) {\n    // A is flagged: no health pack. Group off ⇒ no oracle either. Group on ⇒ trailing bank oracle.\n    const observationBanksOverride = ctx.groupRateLimiterEnabled\n      ? computeHealthAccountMetas({ banksToInclude: [], trailingBanks: [position.bank] })\n      : [];\n\n    const legs = await buildCollateralLegIxs(ctx, position, isSync, observationBanksOverride);\n    withdrawIxs.push(...legs.withdrawIxs);\n    depositIxs.push(...legs.depositIxs);\n  }\n\n  // Klend re-marks an obligation stale on EVERY mutation, and marginfi's Kamino\n  // obligations are bank-level (pooled) — so a transferred Kamino bank's\n  // withdraw leg invalidates the refresh that preceded it, and the deposit leg\n  // on the same obligation then fails with ObligationStale (6017). Re-refresh\n  // the transferred Kamino banks' reserves + obligations between the two legs.\n  const transferredKaminoPks = collateral\n    .filter((p) => p.bank.config.assetTag === AssetTag.KAMINO)\n    .map((p) => p.bankAddress);\n  const kaminoReRefreshIxs =\n    transferredKaminoPks.length > 0\n      ? makeRefreshKaminoBanksIxs(\n          ctx.accountA,\n          ctx.bankMap,\n          transferredKaminoPks,\n          ctx.bankMetadataMap\n        ).instructions\n      : [];\n\n  const borrowedSoFar: BankType[] = [];\n  for (const position of debts) {\n    const { bank, tokenProgram } = position;\n    borrowedSoFar.push(bank);\n\n    // Destination banks active at this borrow: pre-existing + all collateral + debts so far.\n    const activeBanks = dedupeBanks([\n      ...ctx.destPreexistingBanks,\n      ...collateralBanks,\n      ...borrowedSoFar,\n    ]);\n    const observationBanksOverride = computeHealthAccountMetas({ banksToInclude: activeBanks });\n\n    const borrowUi = position.uiAmount.times(1 + ctx.borrowPaddingBps / 10_000);\n    const borrow = await makeBorrowIx({\n      program: ctx.program,\n      bank,\n      bankMap: ctx.bankMap,\n      tokenProgram,\n      amount: borrowUi,\n      marginfiAccount: ctx.accountB,\n      authority: ctx.accountA.authority,\n      isSync,\n      opts: {\n        createAtas: false,\n        wrapAndUnwrapSol: false,\n        overrideInferAccounts: ctx.overrideInferAccounts,\n        observationBanksOverride,\n      },\n    });\n    borrowIxs.push(...borrow.instructions);\n\n    const repay = await makeRepayIx({\n      program: ctx.program,\n      bank,\n      tokenProgram,\n      amount: position.uiAmount,\n      accountAddress: ctx.accountA.address,\n      authority: ctx.accountA.authority,\n      repayAll: true,\n      isSync,\n      opts: {\n        wrapAndUnwrapSol: false,\n        overrideInferAccounts: ctx.overrideInferAccounts,\n      },\n    });\n    repayIxs.push(...repay.instructions);\n  }\n\n  return [\n    ...CU_IXS(),\n    ...withdrawIxs,\n    ...kaminoReRefreshIxs,\n    ...depositIxs,\n    ...borrowIxs,\n    ...repayIxs,\n  ];\n}\n\n/**\n * Wrap the inner instructions in a single flashloan on the source account.\n * Order: `[preIxs…, beginFL(A), inner…, endFL(A)]`; the begin ix points at the end ix.\n */\nasync function buildTransferFlashloanTx(args: {\n  program: MarginfiProgram;\n  accountA: MarginfiAccountType;\n  projectedActiveBanksA: BankType[];\n  innerIxs: TransactionInstruction[];\n  preIxs: TransactionInstruction[];\n  blockhash: string;\n  luts: AddressLookupTableAccount[];\n}): Promise<ExtendedV0Transaction> {\n  const { program, accountA, projectedActiveBanksA, innerIxs, preIxs, blockhash, luts } = args;\n\n  const endIndex = preIxs.length + innerIxs.length + 1;\n  const begin = await makeBeginFlashLoanIx(program, accountA.address, endIndex, accountA.authority);\n  const end = await makeEndFlashLoanIx(\n    program,\n    accountA.address,\n    accountA.group,\n    projectedActiveBanksA,\n    accountA.authority\n  );\n\n  const message = new TransactionMessage({\n    payerKey: accountA.authority,\n    recentBlockhash: blockhash,\n    instructions: [...preIxs, ...begin.instructions, ...innerIxs, ...end.instructions],\n  }).compileToV0Message(luts);\n\n  return addTransactionMetadata(new VersionedTransaction(message), {\n    addressLookupTables: luts,\n    type: TransactionType.FLASHLOAN,\n  });\n}\n\nfunction destPreexistingBanksOf(\n  account: MarginfiAccountType | undefined,\n  bankMap: Map<string, BankType>\n): BankType[] {\n  if (!account) return [];\n  return dedupeBanks(\n    account.balances\n      .filter((b) => b.active)\n      .map((b) => bankMap.get(b.bankPk.toBase58()))\n      .filter((b): b is BankType => Boolean(b))\n  );\n}\n\n// --------------------------------------------------------------------------------------\n// Public: build the transfer\n// --------------------------------------------------------------------------------------\n\n/**\n * Atomically move a selected set of positions from account A to account B in a single flashloan.\n * Per position: collateral → `withdraw(A)` + `deposit(B)`; debt → `borrow(B)` + `repay(A)`. Returns\n * unsigned transactions ordered for sequential execution (setup/refresh + crank first, then the\n * flashloan); the caller signs and sends them.\n *\n * The whole transfer must fit one v0 transaction — the selection is capped at `maxPositions`\n * (default 5), and the built flashloan is size-checked, throwing `TRANSFER_POSITIONS_UNSPLITTABLE`\n * if it still overflows (possible with several integration positions). Transfer larger sets in\n * batches. Correctness (both accounts staying healthy) is enforced on-chain: `endFL(A)` checks A's\n * remainder and each `borrow(B)` checks B — no client-side health prediction.\n *\n * Supported asset tags: `DEFAULT`/`SOL`/`STAKED` on either leg, and the collateral-only integrations\n * `KAMINO`/`JUPLEND` on the collateral leg (dedicated builders + a preceding reserve/rate refresh).\n * `DRIFT`/`SOLEND` are rejected.\n *\n * Runtime notes:\n *  - Each borrow-before-repay transiently spikes the debt bank's rate-limit window; a bank near its\n *    cap can revert with `BankHourly/DailyRateLimitExceeded`. The whole flashloan reverts atomically,\n *    so this is safe and retryable — treat it as such.\n *  - Integration (Kamino/JupLend) reserve/rate refresh rides in the prelude transaction and requires\n *    `bankMetadataMap` to carry fresh `kaminoStates`/`jupLendStates`.\n *  - All transactions share one blockhash; execute them in order within its validity window. When\n *    `mustBeAtomicBundle` is true, they must also land atomically in one bundle.\n *  - Dust (borrow padding minus accrued interest; withdraw-all/cToken-conversion excess) remains in\n *    the wallet ATAs.\n */\nexport async function makeTransferPositionsTx(\n  params: MakeTransferPositionsTxParams\n): Promise<TransferPositionsResult> {\n  const {\n    program,\n    connection,\n    marginfiAccount: accountA,\n    bankMap,\n    bankMetadataMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    addressLookupTableAccounts,\n    crossbarUrl,\n    overrideInferAccounts,\n  } = params;\n\n  const luts = addressLookupTableAccounts ?? [];\n  const borrowPaddingBps = params.borrowPaddingBps ?? DEFAULT_BORROW_PADDING_BPS;\n  const groupRateLimiterEnabled = params.groupRateLimiterEnabled ?? false;\n\n  const positions = classifyAndValidate(params);\n\n  // Resolve / create the destination account.\n  let accountB = params.destinationAccount;\n  let createIx: TransactionInstruction | undefined;\n  if (!accountB) {\n    const accountIndex =\n      params.createDestinationOpts?.accountIndex ??\n      (await findRandomAvailableAccountIndex(\n        connection,\n        program.programId,\n        accountA.group,\n        accountA.authority\n      ));\n    const created = await makeCreateAccountIxWithProjection({\n      program,\n      authority: accountA.authority,\n      group: accountA.group,\n      accountIndex,\n      thirdPartyId: params.createDestinationOpts?.thirdPartyId,\n    });\n    accountB = created.account;\n    createIx = created.ix;\n  }\n\n  const ctx: BuildContext = {\n    program,\n    accountA,\n    accountB,\n    bankMap,\n    bankMetadataMap,\n    assetShareValueMultiplierByBank,\n    borrowPaddingBps,\n    groupRateLimiterEnabled,\n    overrideInferAccounts,\n    destPreexistingBanks: destPreexistingBanksOf(params.destinationAccount, bankMap),\n  };\n\n  const innerIxs = await buildInnerIxs(ctx, positions, false);\n\n  // endFL(A) health pack: A's remaining active banks after the whole selection leaves.\n  const transferred = new Set(positions.map((p) => p.bankAddress.toBase58()));\n  const projectedActiveBanksA = dedupeBanks(\n    accountA.balances\n      .filter((b) => b.active && !transferred.has(b.bankPk.toBase58()))\n      .map((b) => requireBank(bankMap, b.bankPk, invalidSelection(b.bankPk)))\n  );\n\n  const blockhash = (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const preIxs = createIx ? [createIx] : [];\n  const flashloanTx = await buildTransferFlashloanTx({\n    program,\n    accountA,\n    projectedActiveBanksA,\n    innerIxs,\n    preIxs,\n    blockhash,\n    luts,\n  });\n\n  const size = getTxSize(flashloanTx);\n  const keys = getTotalAccountKeys(flashloanTx);\n  if (size > MAX_TX_SIZE || keys > MAX_ACCOUNT_LOCKS) {\n    throw TransactionBuildingError.transferPositionsUnsplittable(\n      `built transaction exceeds size limits (${size} bytes, ${keys} accounts); transfer fewer positions`,\n      size,\n      keys\n    );\n  }\n\n  // Setup ATAs for every transferred mint, then refresh integration reserves/rates. Both must land\n  // before the flashloan (the withdraw legs send to these ATAs and read the refreshed state).\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority: accountA.authority,\n    tokens: positions.map((p) => ({ mint: p.bank.mint, tokenProgram: p.tokenProgram })),\n  });\n  const refreshIxs = buildIntegrationRefreshIxs({\n    accountA,\n    destinationAccount: params.destinationAccount,\n    positions,\n    bankMap,\n    bankMetadataMap,\n  });\n\n  const additionalTxs: ExtendedV0Transaction[] = [];\n  const preludeIxs = [...setupIxs, ...refreshIxs];\n  if (preludeIxs.length > 0) {\n    const txs = splitInstructionsToFitTransactions([], preludeIxs, {\n      blockhash,\n      payerKey: accountA.authority,\n      luts,\n    });\n    additionalTxs.push(\n      ...txs.map((tx) =>\n        addTransactionMetadata(tx, { type: TransactionType.CREATE_ATA, addressLookupTables: luts })\n      )\n    );\n  }\n\n  // Crank switchboard feeds for the banks priced by the health checks. The borrow\n  // legs run health checks on the DESTINATION account, so both accounts are\n  // cranked: A against its withdraws/repays, B against its projected post-transfer\n  // balances (deposits/borrows) — the projection scopes each account to its own\n  // instructions, and overlapping feeds are cranked once.\n  const { instructions: updateFeedIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIxForAccounts({\n    marginfiAccounts: [accountA, accountB],\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    instructions: innerIxs,\n    program,\n    connection,\n    groupRateLimiterEnabled,\n    crossbarUrl,\n  });\n  if (updateFeedIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: accountA.authority,\n      recentBlockhash: blockhash,\n      instructions: updateFeedIxs,\n    }).compileToV0Message(feedLuts);\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  const transactions = [...additionalTxs, flashloanTx];\n  return {\n    transactions,\n    actionTxIndex: additionalTxs.length,\n    destinationAccount: accountB,\n    mustBeAtomicBundle: refreshIxs.length > 0,\n  };\n}\n","import {\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { MakeBulkRepayTxParams, MakeBulkWithdrawTxParams, BulkLendTxsResult } from \"../types\";\nimport { computeHealthAccountMetas, computeHealthCheckAccounts, computeQuantityUi } from \"../utils\";\n\nimport { makeSetupIx } from \"./account-lifecycle\";\nimport { makeRepayIx } from \"./repay\";\nimport {\n  makeWithdrawIx,\n  makeKaminoWithdrawIx,\n  makeJuplendWithdrawIx,\n  makeDriftWithdrawIx,\n} from \"./withdraw\";\n\nimport { MAX_ACCOUNT_LOCKS } from \"~/constants\";\nimport { AssetTag, requireBank, requireTokenProgram } from \"~/services/bank\";\nimport { makeRefreshIntegrationBanksIxs, makeSmartCrankSwbFeedIx } from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  makeUnwrapSolIx,\n  selectLutsForBanks,\n  splitInstructionsToFitTransactions,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { NATIVE_MINT } from \"~/vendor/spl\";\n\n/** Safety margin (bytes) below the hard cap, reserving room for the send\n *  pipeline's compute-budget / priority-fee instructions. */\nconst BULK_TX_SIZE_MARGIN = 128;\n\n/**\n * Withdraw the FULL position of every given bank, packing as many withdraws\n * per transaction as fit the size/lock limits. Venue dispatch (Kamino /\n * JupLend / Drift / standard) and the per-instruction health packs live here:\n * each withdraw's remaining accounts exclude every bank already closed by the\n * withdraws before it — across the whole ordered batch — because the on-chain\n * health check runs against the account's live (shrinking) balance set.\n *\n * The returned transactions MUST land as one atomic Jito bundle (same slot,\n * sequential): the integration refreshes (Kamino reserves + obligations, rate\n * cranks) live in a single prelude tx rather than in each withdraw tx, and\n * Klend's slot-based staleness checks only stay satisfied when the withdraws\n * execute in the refresh's slot.\n *\n * Returns `[ATA setup txs…, crank tx?, refresh tx?, withdraw txs…]`;\n * `actionTxIndex` points at the first withdraw tx.\n */\nexport async function makeBulkWithdrawTx(\n  params: MakeBulkWithdrawTxParams\n): Promise<BulkLendTxsResult> {\n  const {\n    program,\n    connection,\n    marginfiAccount,\n    bankAddresses,\n    bankMap,\n    bankMetadataMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    tokenProgramsByBank,\n    groupRateLimiterEnabled = false,\n    overrideInferAccounts,\n    luts,\n  } = params;\n\n  const authority = marginfiAccount.authority;\n\n  if (bankAddresses.length === 0) throw new Error(\"no banks to withdraw\");\n\n  const activeBalances = marginfiAccount.balances.filter((b) => b.active);\n\n  // Every bank the withdraw txs touch: the withdrawn banks + the account's active positions\n  const involvedBanks = [\n    ...bankAddresses.map((pk) => requireBank(bankMap, pk)),\n    ...activeBalances.flatMap((b) => bankMap.get(b.bankPk.toBase58()) ?? []),\n  ];\n  const selectedLuts = selectLutsForBanks(luts, involvedBanks);\n\n  // Build every position's instructions once. The health pack of withdraw N\n  // excludes every bank withdrawn before it (plus itself — full withdrawals\n  // close the balance), mirroring what the account looks like on-chain when\n  // that instruction executes. Tx boundaries don't change the packs.\n  const withdrawIxs: TransactionInstruction[] = [];\n  const setupTokens: { mint: PublicKey; tokenProgram: PublicKey }[] = [];\n  const withdrawnSoFar: PublicKey[] = [];\n\n  for (const bankAddress of bankAddresses) {\n    const bank = requireBank(bankMap, bankAddress);\n    const tokenProgram = requireTokenProgram(tokenProgramsByBank, bankAddress);\n    const balance = activeBalances.find((b) => b.bankPk.equals(bankAddress));\n    if (!balance || !balance.assetShares.gt(0)) {\n      throw new Error(`no active deposit for bank ${bankAddress.toBase58()}`);\n    }\n\n    const packBanks = computeHealthCheckAccounts({\n      account: marginfiAccount,\n      banksMap: bankMap,\n      excludedBanks: [...withdrawnSoFar, bankAddress],\n    });\n    const observationBanksOverride = computeHealthAccountMetas({\n      banksToInclude: packBanks,\n      trailingBanks: [bank],\n    });\n\n    const shared = {\n      program,\n      bank,\n      bankMap,\n      tokenProgram,\n      marginfiAccount,\n      authority,\n      bankMetadataMap,\n      // every venue's withdraw ix ignores the amount when the withdraw-all flag is\n      // set and derives the full position on-chain, so all legs pass amount 0\n      withdrawAll: true,\n      opts: {\n        createAtas: false, // ATAs are created in the prelude txs\n        wrapAndUnwrapSol: false, // one unwrap ix is appended after the last withdraw\n        overrideInferAccounts,\n        observationBanksOverride,\n      },\n    };\n\n    let instructions: TransactionInstruction[];\n    switch (bank.config.assetTag) {\n      case AssetTag.KAMINO: {\n        const reserve = bankMetadataMap[bankAddress.toBase58()]?.kaminoStates?.reserveState;\n        if (!reserve) {\n          throw new Error(`kamino reserve state missing for bank ${bankAddress.toBase58()}`);\n        }\n        const withdraw = await makeKaminoWithdrawIx({\n          ...shared,\n          cTokenAmount: 0,\n          reserve,\n        });\n        instructions = withdraw.instructions;\n        break;\n      }\n      case AssetTag.JUPLEND: {\n        const jupLendingState =\n          bankMetadataMap[bankAddress.toBase58()]?.jupLendStates?.jupLendingState;\n        if (!jupLendingState) {\n          throw new Error(`juplend lending state missing for bank ${bankAddress.toBase58()}`);\n        }\n        const withdraw = await makeJuplendWithdrawIx({\n          ...shared,\n          amount: 0,\n          jupLendingState,\n        });\n        instructions = withdraw.instructions;\n        break;\n      }\n      case AssetTag.DRIFT: {\n        const driftState = bankMetadataMap[bankAddress.toBase58()]?.driftStates;\n        if (!driftState) {\n          throw new Error(`drift state missing for bank ${bankAddress.toBase58()}`);\n        }\n        const withdraw = await makeDriftWithdrawIx({\n          ...shared,\n          amount: 0,\n          driftSpotMarket: driftState.spotMarketState,\n          userRewards: driftState.userRewards,\n        });\n        instructions = withdraw.instructions;\n        break;\n      }\n      default: {\n        const withdraw = await makeWithdrawIx({\n          ...shared,\n          amount: 0,\n        });\n        instructions = withdraw.instructions;\n        break;\n      }\n    }\n\n    withdrawIxs.push(...instructions);\n    setupTokens.push({ mint: bank.mint, tokenProgram });\n    withdrawnSoFar.push(bankAddress);\n  }\n\n  // One unwrap after the last withdraw covers every SOL position (closes the wSOL ata)\n  if (setupTokens.some((t) => t.mint.equals(NATIVE_MINT))) {\n    withdrawIxs.push(makeUnwrapSolIx(authority));\n  }\n\n  const { blockhash } = await connection.getLatestBlockhash(\"confirmed\");\n\n  const withdrawTxs: ExtendedV0Transaction[] = splitInstructionsToFitTransactions([], withdrawIxs, {\n    blockhash,\n    payerKey: authority,\n    luts: selectedLuts,\n    sizeMargin: BULK_TX_SIZE_MARGIN,\n    maxAccountLocks: MAX_ACCOUNT_LOCKS,\n  }).map((tx) =>\n    addTransactionMetadata(tx, {\n      addressLookupTables: selectedLuts,\n      type: TransactionType.WITHDRAW,\n    })\n  );\n\n  // Prelude: ATAs for every withdrawn mint, then one deduped smart crank for\n  // every switchboard feed the withdraws' health packs (and, with the group\n  // rate limiter, the withdrawn banks themselves) require, then one shared\n  // integration-refresh tx for the whole batch (see the atomic-bundle note\n  // in the doc comment).\n  const additionalTxs: ExtendedV0Transaction[] = [];\n\n  const setupIxs = await makeSetupIx({\n    connection,\n    authority,\n    tokens: setupTokens,\n  });\n  if (setupIxs.length > 0) {\n    const setupTxs = splitInstructionsToFitTransactions([], setupIxs, {\n      blockhash,\n      payerKey: authority,\n      luts: selectedLuts,\n    });\n    additionalTxs.push(\n      ...setupTxs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CREATE_ATA,\n          addressLookupTables: selectedLuts,\n        })\n      )\n    );\n  }\n\n  const { instructions: crankIxs, luts: feedLuts } = await makeSmartCrankSwbFeedIx({\n    marginfiAccount,\n    bankMap,\n    oraclePrices,\n    assetShareValueMultiplierByBank,\n    instructions: withdrawIxs,\n    program,\n    connection,\n    groupRateLimiterEnabled,\n    crossbarUrl: params.crossbarUrl,\n  });\n  if (crankIxs.length > 0) {\n    const message = new TransactionMessage({\n      payerKey: authority,\n      recentBlockhash: blockhash,\n      instructions: crankIxs,\n    }).compileToV0Message(feedLuts);\n    additionalTxs.push(\n      addTransactionMetadata(new VersionedTransaction(message), {\n        addressLookupTables: feedLuts,\n        type: TransactionType.CRANK,\n      })\n    );\n  }\n\n  // One shared refresh for the whole batch: kamino reserves + obligations for\n  // the withdrawn kamino banks, rate cranks for the account's other jup/drift\n  // banks (the withdrawn ones self-update via CPI in their withdraw ix).\n  const refreshIxs = makeRefreshIntegrationBanksIxs(\n    marginfiAccount,\n    bankMap,\n    bankAddresses,\n    bankMetadataMap\n  ).instructions;\n  if (refreshIxs.length > 0) {\n    const refreshTxs = splitInstructionsToFitTransactions([], refreshIxs, {\n      blockhash,\n      payerKey: authority,\n      luts: selectedLuts,\n    });\n    additionalTxs.push(\n      ...refreshTxs.map((tx) =>\n        addTransactionMetadata(tx, {\n          type: TransactionType.CRANK,\n          addressLookupTables: selectedLuts,\n        })\n      )\n    );\n  }\n\n  return {\n    transactions: [...additionalTxs, ...withdrawTxs],\n    actionTxIndex: additionalTxs.length,\n    mustBeAtomicBundle: refreshIxs.length > 0,\n  };\n}\n\n/**\n * Repay the FULL debt of every given bank from the wallet, packing as many\n * repays per transaction as fit. Repays carry no health pack and need no\n * oracle cranks, so most batches are a single transaction.\n */\nexport async function makeBulkRepayTx(params: MakeBulkRepayTxParams): Promise<BulkLendTxsResult> {\n  const {\n    program,\n    connection,\n    marginfiAccount,\n    bankAddresses,\n    bankMap,\n    tokenProgramsByBank,\n    overrideInferAccounts,\n  } = params;\n  const luts = params.addressLookupTableAccounts ?? [];\n  const authority = marginfiAccount.authority;\n\n  if (bankAddresses.length === 0) throw new Error(\"no banks to repay\");\n\n  const activeBalances = marginfiAccount.balances.filter((b) => b.active);\n\n  const repayIxs: TransactionInstruction[] = [];\n  for (const bankAddress of bankAddresses) {\n    const bank = requireBank(bankMap, bankAddress);\n    const tokenProgram = requireTokenProgram(tokenProgramsByBank, bankAddress);\n    const balance = activeBalances.find((b) => b.bankPk.equals(bankAddress));\n    if (!balance || !balance.liabilityShares.gt(0)) {\n      throw new Error(`no active debt for bank ${bankAddress.toBase58()}`);\n    }\n    const uiAmount = computeQuantityUi(balance, bank).liabilities;\n\n    const repay = await makeRepayIx({\n      program,\n      bank,\n      tokenProgram,\n      amount: uiAmount,\n      accountAddress: marginfiAccount.address,\n      authority,\n      repayAll: true,\n      opts: {\n        wrapAndUnwrapSol: true,\n        overrideInferAccounts,\n      },\n    });\n    repayIxs.push(...repay.instructions);\n  }\n\n  const { blockhash } = await connection.getLatestBlockhash(\"confirmed\");\n\n  const transactions = splitInstructionsToFitTransactions([], repayIxs, {\n    blockhash,\n    payerKey: authority,\n    luts,\n    sizeMargin: BULK_TX_SIZE_MARGIN,\n    maxAccountLocks: MAX_ACCOUNT_LOCKS,\n  }).map((tx) =>\n    addTransactionMetadata(tx, {\n      addressLookupTables: luts,\n      type: TransactionType.REPAY,\n    })\n  );\n\n  return { transactions, actionTxIndex: 0, mustBeAtomicBundle: false };\n}\n","import {\n  AddressLookupTableAccount,\n  ComputeBudgetProgram,\n  PublicKey,\n  SystemProgram,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { makePulseHealthIx } from \"../actions\";\nimport {\n  HealthCacheSimulationError,\n  HealthCacheStatus,\n  MarginfiAccountRaw,\n  MarginfiAccountType,\n  MarginRequirementType,\n} from \"../types\";\nimport {\n  decodeAccountRaw,\n  parseMarginfiAccountRaw,\n  computeHealthComponentsFromBalances,\n} from \"../utils\";\n\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\nimport { AssetTag, BankType } from \"~/services/bank\";\nimport {\n  getOracleSourceFromOracleSetup,\n  makeCrankSwbFeedIx,\n  makeUpdateSwbFeedIx,\n  makeUpdateJupLendRateIxs,\n  OraclePrice,\n} from \"~/services/price\";\nimport {\n  addTransactionMetadata,\n  simulateBundle,\n  SolanaTransaction,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { BankIntegrationMetadataMap, MarginfiProgram } from \"~/types\";\nimport { bigNumberToWrappedI80F48, wrappedI80F48toBigNumber } from \"~/utils\";\nimport { DriftSpotMarket, makeUpdateSpotMarketIx } from \"~/vendor/drift\";\nimport klendInstructions from \"~/vendor/klend/instructions\";\n\n/**\n * Configuration for simulating account health cache with fallback\n */\nexport interface SimulateAccountHealthCacheWithFallbackParams {\n  /** The marginfi program instance */\n  program: MarginfiProgram;\n  /** Map of banks by their address */\n  banksMap: Map<string, BankType>;\n  /** Map of oracle prices by bank address */\n  oraclePricesByBank: Map<string, OraclePrice>;\n  /** The marginfi account to simulate health cache for */\n  marginfiAccount: MarginfiAccountType;\n  /** Bank integration metadata map (for Kamino, Drift, etc.) */\n  bankIntegrationMap: BankIntegrationMetadataMap;\n  /** Asset share value multipliers by bank address (for integrated protocols) */\n  assetShareValueMultiplierByBank?: Map<string, BigNumber>;\n  /** Optional emode weight overrides by bank address */\n  activeEmodeWeightsByBank?: Map<\n    string,\n    {\n      assetWeightMaint: BigNumber;\n      assetWeightInit: BigNumber;\n    }\n  >;\n}\n\n/**\n * Simulates the health cache for a marginfi account with fallback computation.\n *\n * This function attempts to simulate the on-chain health cache calculation, which provides\n * accurate health metrics for the account. If simulation fails (e.g., due to RPC issues),\n * it falls back to computing health components locally.\n *\n * **Primary Method (Simulation):**\n * - Simulates on-chain health pulse instruction\n * - Returns the health cache as it would exist on-chain\n * - Most accurate but requires RPC simulation support\n *\n * **Fallback Method (Computation):**\n * - Computes health components locally using balance data\n * - Calculates Initial, Maintenance, and Equity values\n * - Used when simulation fails or is unavailable\n *\n * **Health Cache Values:**\n * - **Initial**: For opening new positions (most conservative)\n * - **Maintenance**: For liquidation threshold\n * - **Equity**: Actual account value (no risk weighting)\n *\n * @param params - Configuration object for health cache simulation\n * @returns Promise resolving to account with updated health cache and optional error\n *\n * @example\n * ```typescript\n * const { marginfiAccount, error } = await simulateAccountHealthCacheWithFallback({\n *   program: client.program,\n *   bankMap: client.bankMap,\n *   oraclePrices: client.oraclePriceByBank,\n *   marginfiAccount: account,\n *   bankMetadataMap: client.bankIntegrationMap,\n *   assetShareValueMultiplierByBank: client.assetShareMultiplierByBank,\n * });\n *\n * if (error) {\n *   console.warn(\"Simulation failed, using computed values:\", error);\n * }\n *\n * console.log(\"Health:\", marginfiAccount.healthCache);\n * ```\n */\nexport async function simulateAccountHealthCacheWithFallback(\n  params: SimulateAccountHealthCacheWithFallbackParams\n): Promise<{\n  marginfiAccount: MarginfiAccountType;\n  error?: HealthCacheSimulationError;\n}> {\n  const {\n    program,\n    banksMap,\n    oraclePricesByBank,\n    bankIntegrationMap,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  } = params;\n\n  let marginfiAccount = params.marginfiAccount;\n\n  const activeBalances = marginfiAccount.balances.filter((b) => b.active);\n\n  // Equity health-cache values mirror the program (biased + time-weighted price), matching\n  // computeHealthCacheStatus. Not the UI \"neutral value\" helper.\n  const { assets: assetValueEquity, liabilities: liabilityValueEquity } =\n    computeHealthComponentsFromBalances({\n      activeBalances,\n      banksMap,\n      oraclePricesByBank,\n      marginRequirement: MarginRequirementType.Equity,\n      assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank,\n    });\n\n  try {\n    const simulatedAccount = await simulateAccountHealthCache({\n      program,\n      banksMap,\n      marginfiAccount,\n      bankIntegrationMap,\n    });\n\n    simulatedAccount.healthCache.assetValueEquity = bigNumberToWrappedI80F48(assetValueEquity);\n    simulatedAccount.healthCache.liabilityValueEquity =\n      bigNumberToWrappedI80F48(liabilityValueEquity);\n\n    marginfiAccount = parseMarginfiAccountRaw(params.marginfiAccount.address, simulatedAccount);\n  } catch (e) {\n    console.log(\"e\", e);\n    const { assets: assetValueMaint, liabilities: liabilityValueMaint } =\n      computeHealthComponentsFromBalances({\n        activeBalances,\n        banksMap,\n        oraclePricesByBank,\n        marginRequirement: MarginRequirementType.Maintenance,\n        assetShareValueMultiplierByBank,\n        activeEmodeWeightsByBank,\n      });\n\n    const { assets: assetValueInitial, liabilities: liabilityValueInitial } =\n      computeHealthComponentsFromBalances({\n        activeBalances,\n        banksMap,\n        oraclePricesByBank,\n        marginRequirement: MarginRequirementType.Initial,\n        assetShareValueMultiplierByBank,\n        activeEmodeWeightsByBank,\n      });\n\n    marginfiAccount.healthCache = {\n      assetValue: assetValueInitial,\n      liabilityValue: liabilityValueInitial,\n      assetValueMaint: assetValueMaint,\n      liabilityValueMaint: liabilityValueMaint,\n      assetValueEquity: assetValueEquity,\n      liabilityValueEquity: liabilityValueEquity,\n      timestamp: new BigNumber(0),\n      flags: [],\n      prices: [],\n      simulationStatus: HealthCacheStatus.COMPUTED,\n    };\n\n    // Return the error if it's a HealthCacheSimulationError\n    if (e instanceof HealthCacheSimulationError) {\n      return { marginfiAccount, error: e };\n    }\n  }\n\n  return { marginfiAccount };\n}\n\nexport async function simulateAccountHealthCache(params: {\n  program: MarginfiProgram;\n  banksMap: Map<string, BankType>;\n  marginfiAccount: MarginfiAccountType;\n  bankIntegrationMap?: BankIntegrationMetadataMap;\n}): Promise<MarginfiAccountRaw> {\n  const { program, banksMap, marginfiAccount, bankIntegrationMap } = params;\n\n  const activeBalances = marginfiAccount.balances.filter((b) => b.active);\n\n  // this will always return swb oracles regardless of staleness\n  // stale functionality should be re-added once we increase amount of swb oracles\n  const activeBanks = activeBalances\n    .map((balance) => banksMap.get(balance.bankPk.toBase58()))\n    .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n  const kaminoBanks = activeBanks.filter((bank) => bank.config.assetTag === AssetTag.KAMINO);\n\n  const driftBanks = activeBanks.filter((bank) => bank.config.assetTag === AssetTag.DRIFT);\n\n  const staleSwbOracles = activeBanks\n    .filter((bank) => getOracleSourceFromOracleSetup(bank.config.oracleSetup).key === \"switchboard\")\n    .filter((bank) => !bank.oracleKey.equals(new PublicKey(ZERO_ORACLE_KEY)));\n\n  const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n    units: 1_400_000,\n  });\n  const blockhash = (await program.provider.connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const fundAccountIx = SystemProgram.transfer({\n    fromPubkey: new PublicKey(\"DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD\"), // marginfi SOL VAULT\n    toPubkey: marginfiAccount.authority,\n    lamports: 100_000_000, // 0.1 SOL\n  });\n\n  const updateDriftMarketData = driftBanks\n    .map((bank) => {\n      const bankMetadata = bankIntegrationMap?.[bank.address.toBase58()];\n      if (!bankMetadata?.driftStates) {\n        console.error(`Bank metadata for drift bank ${bank.address.toBase58()} not found`);\n        return;\n      }\n\n      const driftMarket = bankMetadata.driftStates.spotMarketState;\n      return driftMarket;\n    })\n    .filter((state): state is NonNullable<typeof state> => !!state);\n\n  const refreshReserveData = kaminoBanks\n    .map((bank) => {\n      const bankMetadata = bankIntegrationMap?.[bank.address.toBase58()];\n      if (!bankMetadata?.kaminoStates) {\n        console.error(`Bank metadata for kamino bank ${bank.address.toBase58()} not found`);\n        return;\n      }\n      if (!bankMetadata?.kaminoStates || !bank.kaminoIntegrationAccounts) {\n        console.error(`Integration data for kamino bank ${bank.address.toBase58()} not found`);\n        return;\n      }\n\n      const kaminoReserve = bank.kaminoIntegrationAccounts.kaminoReserve;\n      const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n      return {\n        reserve: kaminoReserve,\n        lendingMarket,\n      };\n    })\n    .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n  const refreshReservesIxs = [];\n  if (refreshReserveData.length > 0) {\n    const refreshIx = klendInstructions.makeRefreshReservesBatchIx(refreshReserveData);\n    refreshReservesIxs.push(refreshIx);\n  }\n\n  const crankSwbIxs =\n    staleSwbOracles.length > 0\n      ? await makeUpdateSwbFeedIx({\n          swbPullOracles: staleSwbOracles.map((oracle) => ({\n            key: oracle.oracleKey,\n          })),\n          feePayer: marginfiAccount.authority,\n          connection: program.provider.connection,\n        })\n      : { instructions: [], luts: [] };\n\n  const updateDriftMarketIxs = updateDriftMarketData.map((market) => ({\n    ix: makeUpdateSpotMarketIx({\n      spotMarket: market,\n    }),\n  }));\n\n  const updateJupLendRateIxs = makeUpdateJupLendRateIxs(\n    marginfiAccount,\n    banksMap,\n    [],\n    bankIntegrationMap ?? {}\n  );\n\n  const healthPulseIxs = await makePulseHealthIx(\n    program,\n    marginfiAccount,\n    banksMap,\n    activeBalances.map((b) => b.bankPk),\n    []\n  );\n\n  const txs = [];\n\n  const additionalTx = new VersionedTransaction(\n    new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: [\n        computeIx,\n        fundAccountIx,\n        ...refreshReservesIxs,\n        ...updateDriftMarketIxs.map((ix) => ix.ix),\n        ...updateJupLendRateIxs.instructions,\n      ],\n    }).compileToV0Message()\n  );\n\n  txs.push(additionalTx);\n\n  const swbTx = new VersionedTransaction(\n    new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: [...crankSwbIxs.instructions],\n    }).compileToV0Message([...crankSwbIxs.luts])\n  );\n\n  txs.push(swbTx);\n\n  const healthTx = new VersionedTransaction(\n    new TransactionMessage({\n      payerKey: marginfiAccount.authority,\n      recentBlockhash: blockhash,\n      instructions: [computeIx, ...healthPulseIxs.instructions],\n    }).compileToV0Message([])\n  );\n\n  txs.push(healthTx);\n\n  if (txs.length > 5) {\n    console.error(\"Too many transactions\", txs.length);\n    throw new Error(\"Too many transactions\");\n  }\n\n  const simulationResult = await simulateBundle(program.provider.connection.rpcEndpoint, txs, [\n    marginfiAccount.address,\n  ]);\n\n  const postExecutionAccount = simulationResult.find(\n    (result) => result.postExecutionAccounts.length > 0\n  );\n\n  if (!postExecutionAccount) {\n    throw new Error(\"Account not found\");\n  }\n\n  const marginfiAccountPost = decodeAccountRaw(\n    Buffer.from(postExecutionAccount.postExecutionAccounts[0].data[0], \"base64\"),\n    program.idl\n  );\n\n  if (marginfiAccountPost.healthCache.mrgnErr || marginfiAccountPost.healthCache.internalErr) {\n    console.log(\n      \"cranked swb oracles\",\n      staleSwbOracles.map((oracle) => oracle.oracleKey)\n    );\n    console.log(\n      \"MarginfiAccountPost healthCache internalErr\",\n      marginfiAccountPost.healthCache.internalErr\n    );\n    console.log(\"MarginfiAccountPost healthCache mrgnErr\", marginfiAccountPost.healthCache.mrgnErr);\n\n    if (marginfiAccountPost.healthCache.mrgnErr === 6009) {\n      const assetValue = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.assetValue\n      ).isZero();\n      const liabilityValue = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.liabilityValue\n      ).isZero();\n      const assetValueEquity = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.assetValueEquity\n      ).isZero();\n      const liabilityValueEquity = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.liabilityValueEquity\n      ).isZero();\n      const assetValueMaint = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.assetValueMaint\n      ).isZero();\n      const liabilityValueMaint = !wrappedI80F48toBigNumber(\n        marginfiAccountPost.healthCache.liabilityValueMaint\n      ).isZero();\n\n      if (\n        assetValue &&\n        liabilityValue &&\n        assetValueEquity &&\n        liabilityValueEquity &&\n        assetValueMaint &&\n        liabilityValueMaint\n      ) {\n        return marginfiAccountPost;\n      }\n    }\n    console.error(\"Account health cache simulation failed\", {\n      mrgnErr: marginfiAccountPost.healthCache.mrgnErr,\n      internalErr: marginfiAccountPost.healthCache.internalErr,\n    });\n    throw new HealthCacheSimulationError(\n      \"Account health cache simulation failed\",\n      marginfiAccountPost.healthCache.mrgnErr,\n      marginfiAccountPost.healthCache.internalErr\n    );\n  }\n\n  return marginfiAccountPost;\n}\n\nexport async function getHealthSimulationTransactions({\n  projectedActiveBanks,\n  bankMap,\n  bankMetadataMap,\n  marginfiAccount,\n  program,\n  authority,\n  luts,\n  includeCrankTx,\n  blockhash,\n  crossbarUrl,\n}: {\n  projectedActiveBanks: PublicKey[];\n  bankMap: Map<string, BankType>;\n  bankMetadataMap: BankIntegrationMetadataMap;\n  marginfiAccount: MarginfiAccountType;\n  program: MarginfiProgram;\n  authority: PublicKey;\n  luts: AddressLookupTableAccount[];\n  includeCrankTx: boolean;\n  blockhash: string;\n  crossbarUrl?: string;\n}) {\n  const additionalTxs: SolanaTransaction[] = [];\n\n  const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n    units: 1_400_000,\n  });\n\n  let updateFeedIx: {\n    instructions: TransactionInstruction[];\n    luts: AddressLookupTableAccount[];\n  } | null = null;\n\n  if (includeCrankTx) {\n    updateFeedIx = await makeCrankSwbFeedIx(\n      marginfiAccount,\n      bankMap,\n      projectedActiveBanks,\n      program.provider,\n      crossbarUrl\n    );\n  }\n\n  const activeBanks: PublicKey[] = marginfiAccount.balances\n    .filter((b) => b.active)\n    .map((b) => b.bankPk);\n\n  // Convert to string sets for easier comparison\n  const activeBankStrings = new Set(activeBanks.map((pk) => pk.toString()));\n  const projectedActiveBankStrings = new Set(projectedActiveBanks.map((pk) => pk.toString()));\n\n  // if active bank is not in projectedActiveBanks, it should be excluded\n  const excludedBanks: PublicKey[] = activeBanks.filter(\n    (pk) => !projectedActiveBankStrings.has(pk.toString())\n  );\n\n  // if projectedActiveBanks is not in activeBanks, it should be added\n  const mandatoryBanks: PublicKey[] = projectedActiveBanks.filter(\n    (pk) => !activeBankStrings.has(pk.toString())\n  );\n\n  // todo only refresh reserves if not present\n  const refreshReserveData: { reserve: PublicKey; lendingMarket: PublicKey }[] = [];\n  const updateDriftMarketData: DriftSpotMarket[] = [];\n\n  projectedActiveBanks.forEach((bankPk) => {\n    const bankMetadata = bankMetadataMap?.[bankPk.toBase58()];\n    const bank = bankMap.get(bankPk.toBase58());\n\n    if (!bank) {\n      console.error(`Bank ${bankPk.toBase58()} not found in bankMap`);\n      return;\n    }\n\n    if (!bankMetadata) {\n      console.error(`Bank metadata not found for bank ${bankPk.toBase58()}`);\n      return;\n    }\n\n    switch (bank.config.assetTag) {\n      case AssetTag.KAMINO: {\n        if (!bankMetadata.kaminoStates || !bank.kaminoIntegrationAccounts) {\n          console.error(\n            `Bank ${bankPk.toBase58()} is missing kamino states or integration accounts`\n          );\n          return;\n        }\n        const kaminoReserve = bank.kaminoIntegrationAccounts.kaminoReserve;\n        const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n        refreshReserveData.push({\n          reserve: kaminoReserve,\n          lendingMarket,\n        });\n        break;\n      }\n      case AssetTag.DRIFT: {\n        if (!bankMetadata?.driftStates) {\n          console.error(`Bank metadata for drift bank ${bank.address.toBase58()} not found`);\n          return;\n        }\n        const driftMarket = bankMetadata.driftStates.spotMarketState;\n        updateDriftMarketData.push(driftMarket);\n\n        break;\n      }\n\n      case AssetTag.SOLEND:\n        break;\n\n      case AssetTag.JUPLEND:\n        // JupLend rate updates handled by makeUpdateJupLendRateIxs below\n        break;\n\n      default:\n        break;\n    }\n  });\n\n  const refreshReservesIx: TransactionInstruction[] = [];\n  if (refreshReserveData.length > 0) {\n    const refreshIx = klendInstructions.makeRefreshReservesBatchIx(refreshReserveData);\n    refreshReservesIx.push(refreshIx);\n  }\n\n  const updateDriftMarketIxs = updateDriftMarketData.map((market) => ({\n    ix: makeUpdateSpotMarketIx({\n      spotMarket: market,\n    }),\n  }));\n\n  const updateJupLendRateIxs = makeUpdateJupLendRateIxs(\n    marginfiAccount,\n    bankMap,\n    [],\n    bankMetadataMap\n  );\n\n  const healthPulseIx = await makePulseHealthIx(\n    program,\n    marginfiAccount,\n    bankMap,\n    mandatoryBanks,\n    excludedBanks\n  );\n\n  const refreshReservesTx = new VersionedTransaction(\n    new TransactionMessage({\n      instructions: [\n        computeIx,\n        ...refreshReservesIx,\n        ...updateDriftMarketIxs.map((ix) => ix.ix),\n        ...updateJupLendRateIxs.instructions,\n      ],\n      payerKey: authority,\n      recentBlockhash: blockhash,\n    }).compileToV0Message([...luts])\n  );\n\n  additionalTxs.push(\n    addTransactionMetadata(refreshReservesTx, {\n      type: TransactionType.CRANK,\n      signers: [],\n      addressLookupTables: luts,\n    })\n  );\n\n  const healthCrankTx = new VersionedTransaction(\n    new TransactionMessage({\n      instructions: [computeIx, ...healthPulseIx.instructions],\n      payerKey: authority,\n      recentBlockhash: blockhash,\n    }).compileToV0Message([...luts])\n  );\n\n  if (updateFeedIx) {\n    const oracleCrankTx = new VersionedTransaction(\n      new TransactionMessage({\n        instructions: [...updateFeedIx.instructions],\n        payerKey: authority,\n        recentBlockhash: blockhash,\n      }).compileToV0Message([...updateFeedIx.luts])\n    );\n\n    additionalTxs.push(\n      addTransactionMetadata(oracleCrankTx, {\n        type: TransactionType.CRANK,\n        signers: [],\n        addressLookupTables: updateFeedIx.luts,\n      })\n    );\n  }\n\n  additionalTxs.push(\n    addTransactionMetadata(healthCrankTx, {\n      type: TransactionType.CRANK,\n      signers: [],\n      addressLookupTables: luts,\n    })\n  );\n\n  return additionalTxs;\n}\n","import { PublicKey, TransactionInstruction, Connection } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { OraclePrice } from \"../types\";\n\nimport {\n  checkMultipleOraclesCrankability,\n  partitionBanksByCrankability,\n} from \"./crankability.utils\";\nimport { getOracleSourceFromBank } from \"./detection.utils\";\n\nimport { computeProjectedActiveBalancesNoCpi, MarginRequirementType } from \"~/services/account\";\nimport { MarginfiAccountType } from \"~/services/account/types\";\nimport {\n  computeAssetHealthComponent,\n  computeLiabilityHealthComponent,\n  computeActiveEmodePairs,\n  computeLowestEmodeWeights,\n  getEmodePairs,\n} from \"~/services/account/utils\";\nimport { BankType } from \"~/services/bank\";\nimport { MarginfiProgram } from \"~/types\";\n\n/**\n * A combination of banks that need to be cranked\n */\nexport interface CrankCombination {\n  banks: PublicKey[];\n  oracleKeys: Array<{ key: PublicKey; price: OraclePrice }>; // Deduplicated oracle keys with prices that need to be cranked\n  healthAfter: BigNumber;\n}\n\n/**\n * Parameters for smart crank calculation\n */\nexport interface SmartCrankParams {\n  marginfiAccount: MarginfiAccountType;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  instructions: TransactionInstruction[];\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  program: MarginfiProgram;\n  connection?: Connection;\n  crossbarUrl?: string;\n  /**\n   * Whether the group's net-outflow rate limiter is enabled (see\n   * `isGroupRateLimiterEnabled(group.rateLimiter)`). While enabled, the program\n   * requires a fresh oracle for every withdrawn bank in the withdraw instruction's\n   * remaining accounts — including withdraw-all, where the bank drops out of the\n   * health pack. When set, those oracles are always cranked and block if\n   * uncrankable. Defaults to false (no behavior change).\n   */\n  groupRateLimiterEnabled?: boolean;\n}\n\n/**\n * Result of smart crank analysis\n */\nexport interface SmartCrankResult {\n  requiredOracles: Array<{ key: PublicKey; price: OraclePrice }>;\n  /** Banks with liabilities that cannot be cranked - BLOCKS ALL TRANSACTIONS */\n  uncrankableLiabilities: Array<{ bank: BankType; reason: string }>;\n  /** Banks with assets that cannot be cranked */\n  uncrankableAssets: Array<{ bank: BankType; reason: string }>;\n  isCrankable: boolean;\n}\n\n/**\n * Determines which oracles need to be cranked for a transaction to succeed.\n *\n * Algorithm:\n * 1. Parse instructions to determine projected active banks after transaction\n * 2. Check crankability of all relevant oracles\n * 3. If any liability oracle is uncrankable, throw error (transaction blocked)\n * 4. Identify required cranks (liabilities + interaction banks)\n * 5. Calculate health with only required banks cranked\n * 6. If healthy, return just required banks\n * 7. If not healthy, find minimal asset combinations to achieve health\n *\n * @param params - Smart crank parameters\n * @returns Smart crank result with ordered combinations\n */\nexport async function computeSmartCrank({\n  marginfiAccount,\n  bankMap,\n  oraclePrices,\n  instructions,\n  program,\n  connection,\n  crossbarUrl,\n  assetShareValueMultiplierByBank,\n  groupRateLimiterEnabled = false,\n}: SmartCrankParams): Promise<SmartCrankResult> {\n  // Step 0: Determine projected active balances after transaction\n  const { projectedBalances, withdrawnBanks } = computeProjectedActiveBalancesNoCpi({\n    account: marginfiAccount,\n    instructions,\n    program,\n    banksMap: bankMap,\n    assetShareValueMultiplierByBank,\n  });\n\n  // Helper to check if bank is Switchboard\n  const isSwitchboard = (bank: BankType) => getOracleSourceFromBank(bank).key === \"switchboard\";\n\n  // While the group rate limiter is enabled, every withdraw (partial or final) needs a\n  // fresh oracle for the withdrawn bank in remaining accounts — independent of health.\n  // These oracles must always be cranked, and an uncrankable one blocks the transaction\n  // outright (the on-chain price fetch would fail).\n  const rateLimitBanks = groupRateLimiterEnabled\n    ? withdrawnBanks\n        .map((pk) => bankMap.get(pk))\n        .filter((bank): bank is BankType => bank !== undefined)\n        .filter(isSwitchboard)\n    : [];\n\n  let rateLimitOracles: Array<{ key: PublicKey; price: OraclePrice }> = [];\n  let uncrankableRateLimitBanks: Array<{ bank: BankType; reason: string }> = [];\n  if (rateLimitBanks.length > 0) {\n    const rateLimitCrankability = await checkMultipleOraclesCrankability(\n      rateLimitBanks,\n      oraclePrices,\n      connection,\n      crossbarUrl\n    );\n    const partitioned = partitionBanksByCrankability(rateLimitBanks, rateLimitCrankability);\n    uncrankableRateLimitBanks = partitioned.uncrankable.map(({ bank, reason }) => ({\n      bank,\n      reason: `Rate-limited withdraw requires a fresh oracle: ${reason}`,\n    }));\n    const seenOracles = new Set<string>();\n    rateLimitOracles = partitioned.crankable\n      .map((bank) => ({\n        key: bank.oracleKey,\n        price: oraclePrices.get(bank.address.toBase58()),\n      }))\n      .filter((o): o is { key: PublicKey; price: OraclePrice } => o.price !== undefined)\n      .filter((o) => {\n        const key = o.key.toBase58();\n        if (seenOracles.has(key)) return false;\n        seenOracles.add(key);\n        return true;\n      });\n  }\n\n  /** Merges rate-limit oracle requirements into a result, forcing a block if any are uncrankable */\n  const withRateLimitCranks = (result: SmartCrankResult): SmartCrankResult => {\n    if (rateLimitBanks.length === 0) return result;\n    const existingKeys = new Set(result.requiredOracles.map((o) => o.key.toBase58()));\n    return {\n      ...result,\n      requiredOracles: [\n        ...result.requiredOracles,\n        ...rateLimitOracles.filter((o) => !existingKeys.has(o.key.toBase58())),\n      ],\n      uncrankableAssets: [...result.uncrankableAssets, ...uncrankableRateLimitBanks],\n      isCrankable: result.isCrankable && uncrankableRateLimitBanks.length === 0,\n    };\n  };\n\n  const liabilityBalances = projectedBalances.filter((b) => b.liabilityShares.gt(0));\n  const assetBalances = projectedBalances.filter((b) => b.assetShares.gt(0));\n\n  // No liabilities means no risk, no cranking needed (beyond rate-limit oracles)\n  if (liabilityBalances.length === 0) {\n    return withRateLimitCranks({\n      requiredOracles: [],\n      uncrankableLiabilities: [],\n      uncrankableAssets: [],\n      isCrankable: true,\n    });\n  }\n\n  // The on-chain health check applies emode asset weights whenever the account's\n  // projected positions activate an emode pair. Derive them from the projected\n  // balances (not the pre-transaction account state) so the health estimates below\n  // match the program — otherwise emode-dependent accounts look under-collateralized\n  // and the crank aborts with a false \"assets don't cover liabilities\".\n  const activeEmodeWeightsByBank = computeLowestEmodeWeights(\n    computeActiveEmodePairs(\n      getEmodePairs(Array.from(bankMap.values())),\n      liabilityBalances.map((b) => b.bankPk),\n      assetBalances.map((b) => b.bankPk)\n    )\n  );\n\n  // Get banks from balances\n  const getBanks = (balances: typeof projectedBalances) =>\n    balances\n      .map((b) => bankMap.get(b.bankPk.toBase58()))\n      .filter((bank): bank is BankType => bank !== undefined);\n\n  const projectedAssetBanks = getBanks(assetBalances);\n  const liabilityBanks = getBanks(liabilityBalances);\n\n  // SVSP transition (0.1.9): staked banks with oracle pricing disabled (flags bit 9)\n  // cannot be priced on-chain, so their collateral cannot back the health check.\n  // Exclude them from priceable assets and surface them as uncrankable assets.\n  const assetBanks = projectedAssetBanks.filter((bank) => !bank.stakedOracleDisabled);\n  const disabledStakedAssets = projectedAssetBanks\n    .filter((bank) => bank.stakedOracleDisabled)\n    .map((bank) => ({\n      bank,\n      reason: \"Staked oracle pricing disabled (SVSP transition)\",\n    }));\n\n  const allActiveBanks = [...liabilityBanks, ...assetBanks];\n\n  // Only Switchboard Pull oracles need cranking\n  const allActiveSwbBanks = allActiveBanks.filter(isSwitchboard);\n\n  if (allActiveSwbBanks.length === 0) {\n    return withRateLimitCranks({\n      requiredOracles: [],\n      uncrankableLiabilities: [],\n      uncrankableAssets: disabledStakedAssets,\n      isCrankable: true,\n    });\n  }\n\n  // Check crankability for all Switchboard banks\n  const crankabilityResults = await checkMultipleOraclesCrankability(\n    allActiveSwbBanks,\n    oraclePrices,\n    connection,\n    crossbarUrl\n  );\n\n  const { crankable, uncrankable } = partitionBanksByCrankability(\n    allActiveSwbBanks,\n    crankabilityResults\n  );\n\n  // Separate uncrankable banks into liabilities and assets\n  const uncrankableLiabilities = uncrankable.filter((uc) =>\n    liabilityBanks.some((lb) => lb.address.equals(uc.bank.address))\n  );\n  const uncrankableAssets = [\n    ...uncrankable.filter((uc) => assetBanks.some((ab) => ab.address.equals(uc.bank.address))),\n    ...disabledStakedAssets,\n  ];\n\n  // Get all available assets (both Switchboard and non-Switchboard)\n  const allAvailableAssets = assetBanks.filter(\n    (ab) => crankable.some((c) => c.address.equals(ab.address)) || !isSwitchboard(ab)\n  );\n\n  // If any liability oracle is uncrankable, transaction is blocked\n  if (uncrankableLiabilities.length > 0) {\n    console.log(\n      \"\\n✗ BLOCKED: Uncrankable liabilities:\",\n      uncrankableLiabilities.map((l) => l.bank.tokenSymbol)\n    );\n    return withRateLimitCranks({\n      requiredOracles: [],\n      uncrankableLiabilities,\n      uncrankableAssets,\n      isCrankable: false,\n    });\n  }\n  // Helper to collect unique oracle keys with prices from banks\n  const getOracleKeys = (banks: PublicKey[]): Array<{ key: PublicKey; price: OraclePrice }> => {\n    const oracleMap = new Map<string, OraclePrice>();\n    banks.forEach((addr) => {\n      const bank = bankMap.get(addr.toBase58());\n      if (bank) {\n        const oracleKeyStr = bank.oracleKey.toBase58();\n        const price = oraclePrices.get(bank.address.toBase58());\n        if (price && !oracleMap.has(oracleKeyStr)) {\n          oracleMap.set(oracleKeyStr, price);\n        }\n      }\n    });\n    return Array.from(oracleMap.entries()).map(([keyStr, price]) => ({\n      key: new PublicKey(keyStr),\n      price,\n    }));\n  };\n\n  // Get total liability health\n  const totalLiabilitiesInitHealth = computeLiabilityHealthComponent({\n    balances: projectedBalances,\n    banksMap: bankMap,\n    oraclePricesByBank: oraclePrices,\n    liabilityBanks: liabilityBanks.map((b) => b.address),\n    marginRequirement: MarginRequirementType.Initial,\n  });\n\n  const liabilityBankAddresses = liabilityBanks.filter(isSwitchboard).map((b) => b.address);\n  const nonSWBAssets = assetBanks.filter((bank) => !isSwitchboard(bank));\n  const swbAssets = assetBanks.filter(isSwitchboard);\n\n  // If non-Switchboard assets (Pyth) cover liabilities, only crank liabilities\n  if (nonSWBAssets.length > 0) {\n    const nonSWBAssetsHealth = computeAssetHealthComponent({\n      balances: projectedBalances,\n      banksMap: bankMap,\n      oraclePricesByBank: oraclePrices,\n      assetBanks: nonSWBAssets.map((b) => b.address),\n      marginRequirement: MarginRequirementType.Initial,\n      assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank,\n    });\n\n    const healthDiff = nonSWBAssetsHealth.minus(totalLiabilitiesInitHealth);\n\n    if (healthDiff.gt(0)) {\n      console.log(\"\\n✓ Pyth assets cover liabilities, cranking only liability SWB banks\");\n      return withRateLimitCranks({\n        requiredOracles: getOracleKeys(liabilityBankAddresses),\n        uncrankableLiabilities: [],\n        uncrankableAssets,\n        isCrankable: true,\n      });\n    }\n  }\n\n  // Filter to only crankable Switchboard assets\n  const crankableSWBAssets = swbAssets.filter((bank) =>\n    crankable.some((cb) => cb.address.equals(bank.address))\n  );\n\n  const combinations: CrankCombination[] = [];\n\n  // Generate combinations of a specific size\n  const getCombinations = <T>(arr: T[], size: number): T[][] => {\n    if (size === 0) return [[]];\n    if (size > arr.length) return [];\n\n    const result: T[][] = [];\n    const combine = (start: number, current: T[]) => {\n      if (current.length === size) {\n        result.push([...current]);\n        return;\n      }\n      for (let i = start; i < arr.length; i++) {\n        combine(i + 1, [...current, arr[i]]);\n      }\n    };\n    combine(0, []);\n    return result;\n  };\n\n  // Calculate health with ALL available assets (both Switchboard and non-Switchboard)\n  const allAvailableAssetAddresses = allAvailableAssets.map((bank) => bank.address);\n  const allAssetsHealth = computeAssetHealthComponent({\n    balances: projectedBalances,\n    banksMap: bankMap,\n    oraclePricesByBank: oraclePrices,\n    assetBanks: allAvailableAssetAddresses,\n    marginRequirement: MarginRequirementType.Initial,\n    assetShareValueMultiplierByBank,\n    activeEmodeWeightsByBank,\n  });\n  const healthWithAllAssets = allAssetsHealth.minus(totalLiabilitiesInitHealth);\n\n  // If assets don't cover liabilities even with all available cranked\n  if (!healthWithAllAssets.gt(0)) {\n    console.log(\"✗ Assets don't cover liabilities even with all cranked\");\n    // If there are uncrankable assets, they're blocking a potentially healthy transaction\n    if (uncrankableAssets.length > 0) {\n      return withRateLimitCranks({\n        requiredOracles: [],\n        uncrankableLiabilities: [],\n        uncrankableAssets,\n        isCrankable: false,\n      });\n    }\n\n    // If no uncrankable assets, this is a bug - fallback to cranking everything\n    return withRateLimitCranks({\n      requiredOracles: getOracleKeys(allActiveSwbBanks.map((bank) => bank.address)),\n      uncrankableLiabilities: [],\n      uncrankableAssets: [],\n      isCrankable: true,\n    });\n  }\n\n  // Add full crank combination as fallback\n  combinations.push({\n    banks: crankable.map((cb) => cb.address),\n    oracleKeys: getOracleKeys(crankable.map((cb) => cb.address)),\n    healthAfter: healthWithAllAssets,\n  });\n\n  // Find minimal asset combinations needed for positive health\n  const nonSWBAssetAddresses = nonSWBAssets.map((b) => b.address);\n  const liabilityOracleKeySet = new Set(liabilityBanks.map((lb) => lb.oracleKey.toBase58()));\n\n  for (let comboSize = 1; comboSize < crankableSWBAssets.length; comboSize++) {\n    const assetCombos = getCombinations(crankableSWBAssets, comboSize);\n\n    for (const assetCombo of assetCombos) {\n      const comboAddresses = assetCombo.map((bank) => bank.address);\n      const comboHealth = computeAssetHealthComponent({\n        balances: projectedBalances,\n        banksMap: bankMap,\n        oraclePricesByBank: oraclePrices,\n        assetBanks: [...nonSWBAssetAddresses, ...comboAddresses],\n        marginRequirement: MarginRequirementType.Initial,\n        assetShareValueMultiplierByBank,\n        activeEmodeWeightsByBank,\n      });\n\n      const health = comboHealth.minus(totalLiabilitiesInitHealth);\n      if (!health.gt(0)) continue;\n\n      // Collect banks that need new oracle cranks (not already in liability oracles)\n      const additionalBanks = comboAddresses.filter((addr) => {\n        const bank = bankMap.get(addr.toBase58());\n        return bank && !liabilityOracleKeySet.has(bank.oracleKey.toBase58());\n      });\n\n      const allBanks = [...liabilityBankAddresses, ...additionalBanks];\n      const uniqueBanks = Array.from(new Set(allBanks.map((b) => b.toBase58()))).map(\n        (addr) => new PublicKey(addr)\n      );\n\n      combinations.push({\n        banks: uniqueBanks,\n        oracleKeys: getOracleKeys(uniqueBanks),\n        healthAfter: health,\n      });\n    }\n  }\n\n  // Sort by: (1) fewest oracle cranks, (2) best health\n  combinations.sort((a, b) =>\n    a.oracleKeys.length !== b.oracleKeys.length\n      ? a.oracleKeys.length - b.oracleKeys.length\n      : b.healthAfter.minus(a.healthAfter).toNumber()\n  );\n\n  const bestCombination = combinations[0];\n  if (!bestCombination) {\n    // No valid combination found - this shouldn't happen as we always add the full crank combo\n    // Fallback to cranking all available oracles\n    console.error(\n      \"BUG: No valid crank combination found. Falling back to crank all available oracles.\"\n    );\n    return withRateLimitCranks({\n      requiredOracles: getOracleKeys(crankable.map((bank) => bank.address)),\n      uncrankableLiabilities: [],\n      uncrankableAssets: [],\n      isCrankable: true,\n    });\n  }\n\n  return withRateLimitCranks({\n    requiredOracles: bestCombination.oracleKeys,\n    uncrankableLiabilities: [],\n    uncrankableAssets,\n    isCrankable: true,\n  });\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport const MARINADE_PROGRAM_ID = new PublicKey(\"MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD\");\n\n// sha256(\"account:State\")[..8]\nexport const MARINADE_STATE_DISCRIMINATOR = Buffer.from([216, 146, 107, 94, 104, 75, 182, 177]);\n\n// Absolute byte offsets in Marinade's State account, including the 8-byte Anchor discriminator.\n// These are the fields used by Marinade's `total_virtual_staked_lamports` calculation and by the\n// marginfi program's canonical mSOL/SOL multiplier.\nconst DELAYED_UNSTAKE_COOLING_DOWN_OFFSET = 226;\nconst TOTAL_ACTIVE_BALANCE_OFFSET = 376;\nconst AVAILABLE_RESERVE_BALANCE_OFFSET = 496;\nconst MSOL_SUPPLY_OFFSET = 504;\nconst CIRCULATING_TICKET_BALANCE_OFFSET = 528;\nconst EMERGENCY_COOLING_DOWN_OFFSET = 568;\nexport const MARINADE_STATE_MIN_SIZE = EMERGENCY_COOLING_DOWN_OFFSET + 8;\nconst U64_MAX = (1n << 64n) - 1n;\n\n// Same sanity ceiling as the program's MAX_LST_SOL_RATE\nconst MAX_MSOL_SOL_RATE = 3;\n\nexport interface MarinadeState {\n  /** mSOL/SOL exchange rate */\n  msolPrice: BigNumber;\n}\n\nexport function decodeMarinadeState(data: Buffer): MarinadeState {\n  if (data.length < MARINADE_STATE_MIN_SIZE) {\n    throw new Error(`Invalid Marinade State account size: ${data.length}`);\n  }\n  if (!data.subarray(0, 8).equals(MARINADE_STATE_DISCRIMINATOR)) {\n    throw new Error(\"Invalid Marinade State discriminator\");\n  }\n\n  const delayedUnstakeCoolingDown = data.readBigUInt64LE(DELAYED_UNSTAKE_COOLING_DOWN_OFFSET);\n  const totalActiveBalance = data.readBigUInt64LE(TOTAL_ACTIVE_BALANCE_OFFSET);\n  const availableReserveBalance = data.readBigUInt64LE(AVAILABLE_RESERVE_BALANCE_OFFSET);\n  const msolSupply = data.readBigUInt64LE(MSOL_SUPPLY_OFFSET);\n  const circulatingTicketBalance = data.readBigUInt64LE(CIRCULATING_TICKET_BALANCE_OFFSET);\n  const emergencyCoolingDown = data.readBigUInt64LE(EMERGENCY_COOLING_DOWN_OFFSET);\n\n  if (msolSupply === 0n) {\n    throw new Error(\"Marinade State has zero mSOL supply\");\n  }\n\n  const underControl =\n    totalActiveBalance + delayedUnstakeCoolingDown + emergencyCoolingDown + availableReserveBalance;\n  if (underControl > U64_MAX) {\n    throw new Error(\"Marinade virtual staked balance overflow\");\n  }\n\n  // Marinade uses saturating subtraction for outstanding delayed-unstake tickets.\n  const totalVirtualStakedLamports =\n    underControl > circulatingTicketBalance ? underControl - circulatingTicketBalance : 0n;\n  const msolPrice = new BigNumber(totalVirtualStakedLamports.toString()).div(msolSupply.toString());\n\n  if (!msolPrice.gt(0) || msolPrice.gte(MAX_MSOL_SOL_RATE)) {\n    throw new Error(`Marinade mSOL/SOL rate out of bounds: ${msolPrice.toString()}`);\n  }\n\n  return { msolPrice };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport const SPL_STAKE_POOL_PROGRAM_ID = new PublicKey(\n  \"SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy\"\n);\nexport const SANCTUM_SPL_STAKE_POOL_PROGRAM_ID = new PublicKey(\n  \"SP12tWFxD9oJsVWNavTTBZvMbA6gkAmxtVgxdqvyvhY\"\n);\nexport const SANCTUM_SPL_MULTI_STAKE_POOL_PROGRAM_ID = new PublicKey(\n  \"SPMBzsVUuoHA4Jm6KunbsotaahvVikZs1JyTW6iJvbn\"\n);\n\n// StakePool is borsh-serialized from byte 0: account_type u8 @0, then 8 pubkeys + a bump byte,\n// then total_lamports u64 @258, pool_token_supply u64 @266, last_update_epoch u64 @274.\nconst ACCOUNT_TYPE_STAKE_POOL = 1;\nconst TOTAL_LAMPORTS_OFFSET = 258;\nconst POOL_TOKEN_SUPPLY_OFFSET = 266;\nconst LAST_UPDATE_EPOCH_OFFSET = 274;\nconst MAX_LST_SOL_RATE = 3;\n\nexport interface StakePool {\n  totalLamports: bigint;\n  poolTokenSupply: bigint;\n  lastUpdateEpoch: number;\n  /** LST/SOL exchange rate, i.e. `total_lamports / pool_token_supply` */\n  exchangeRate: BigNumber;\n}\n\nexport function decodeStakePool(data: Buffer): StakePool {\n  if (data.length < LAST_UPDATE_EPOCH_OFFSET + 8) {\n    throw new Error(`Invalid StakePool account size: ${data.length}`);\n  }\n  if (data[0] !== ACCOUNT_TYPE_STAKE_POOL) {\n    throw new Error(`Invalid StakePool account type: ${data[0]}`);\n  }\n\n  const totalLamports = data.readBigUInt64LE(TOTAL_LAMPORTS_OFFSET);\n  const poolTokenSupply = data.readBigUInt64LE(POOL_TOKEN_SUPPLY_OFFSET);\n  const lastUpdateEpoch = Number(data.readBigUInt64LE(LAST_UPDATE_EPOCH_OFFSET));\n\n  if (poolTokenSupply === 0n) {\n    throw new Error(\"StakePool has zero token supply\");\n  }\n\n  const exchangeRate = new BigNumber(totalLamports.toString()).div(\n    new BigNumber(poolTokenSupply.toString())\n  );\n\n  // Same sanity bounds as the program's MAX_LST_SOL_RATE\n  if (!exchangeRate.gt(0) || exchangeRate.gte(MAX_LST_SOL_RATE)) {\n    throw new Error(`StakePool LST/SOL rate out of bounds: ${exchangeRate.toString()}`);\n  }\n\n  return {\n    totalLamports,\n    poolTokenSupply,\n    lastUpdateEpoch,\n    exchangeRate,\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  MultiplierAccountState,\n  MultiplierAccountStates,\n  OracleMultiplierBankInput,\n} from \"../types\";\n\nimport { BankType, OracleSetup } from \"~/services/bank\";\nimport { decodeExponentVault, ExponentVault } from \"~/vendor/exponent\";\nimport { decodeMarinadeState } from \"~/vendor/marinade\";\nimport { decodeStakePool } from \"~/vendor/spl-stake-pool\";\n\nconst PT_MAX_MATURITY_HORIZON_SECONDS = 5 * 365 * 24 * 60 * 60;\n// u64::MAX / 1e12, the largest SY exchange rate the program can represent\nconst MAX_SY_EXCHANGE_RATE = new BigNumber(\"18446744073709551615\").div(1e12);\n// Same staleness slack as the program: one epoch of crank lag is tolerated\nconst MAX_STAKE_POOL_EPOCH_LAG = 1;\n\ntype PtVaultFields = Pick<\n  ExponentVault,\n  | \"startTs\"\n  | \"duration\"\n  | \"syForPt\"\n  | \"ptSupply\"\n  | \"lastSeenSyExchangeRate\"\n  | \"allTimeHighSyExchangeRate\"\n>;\n\n// ─── Bank → input ────────────────────────────────────────────\n\n/**\n * The account holding the exchange rate for a multiplier-priced bank. Venue variants carry their\n * reserve/lending account in oracleKeys[1], pushing the pricing account to oracleKeys[2].\n */\nfunction multiplierAccountKey(bank: BankType): PublicKey | undefined {\n  switch (bank.config.oracleSetup) {\n    case OracleSetup.PythMSOL:\n    case OracleSetup.PythLST:\n    case OracleSetup.PTPyth:\n      return bank.config.oracleKeys[1];\n    case OracleSetup.KaminoMSOL:\n    case OracleSetup.JuplendMSOL:\n    case OracleSetup.KaminoLST:\n    case OracleSetup.JuplendLST:\n      return bank.config.oracleKeys[2];\n    case OracleSetup.PTFixed:\n      return bank.config.oracleKeys[0];\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Builds the multiplier input for a bank, or undefined when the bank is not multiplier-priced.\n */\nexport function getOracleMultiplierBankInput(\n  bank: BankType\n): OracleMultiplierBankInput | undefined {\n  const accountKey = multiplierAccountKey(bank);\n  if (!accountKey) return undefined;\n\n  const isPt =\n    bank.config.oracleSetup === OracleSetup.PTPyth ||\n    bank.config.oracleSetup === OracleSetup.PTFixed;\n\n  return {\n    bankAddress: bank.address.toBase58(),\n    oracleSetup: bank.config.oracleSetup,\n    multiplierAccountKey: accountKey.toBase58(),\n    fixedPrice: isPt ? bank.config.fixedPrice : undefined,\n  };\n}\n\n// ─── Account decoding ────────────────────────────────────────\n\n/**\n * Decodes a multiplier account without knowing its type up front: Exponent vault (Anchor\n * discriminator), then Marinade state (discriminator), then SPL stake pool (account-type byte).\n * Returns undefined when none match.\n */\nexport function decodeMultiplierAccount(data: Buffer): MultiplierAccountState | undefined {\n  try {\n    const vault = decodeExponentVault(data);\n    return {\n      kind: \"exponentVault\",\n      startTs: vault.startTs,\n      duration: vault.duration,\n      syForPt: vault.syForPt.toString(),\n      ptSupply: vault.ptSupply.toString(),\n      lastSeenSyExchangeRate: vault.lastSeenSyExchangeRate.toString(),\n      allTimeHighSyExchangeRate: vault.allTimeHighSyExchangeRate.toString(),\n    };\n  } catch {\n    // not an Exponent vault\n  }\n  try {\n    return { kind: \"marinade\", msolPrice: decodeMarinadeState(data).msolPrice.toString() };\n  } catch {\n    // not a Marinade state\n  }\n  try {\n    const pool = decodeStakePool(data);\n    return {\n      kind: \"stakePool\",\n      exchangeRate: pool.exchangeRate.toString(),\n      lastUpdateEpoch: pool.lastUpdateEpoch,\n    };\n  } catch {\n    // not a stake pool\n  }\n  return undefined;\n}\n\n// ─── Multiplier computation ──────────────────────────────────\n\n/**\n * PT linear rate: accretion from the bank's fixed_price (start price) to par (1.0) over the\n * vault's [startTs, startTs + duration], clamped at both ends, then capped by the redemption\n * backing so an under-backed vault cannot mark above what its PT redeems for. Mirrors the\n * program's `pt_linear_multiplier`.\n */\nexport function computePtMultiplier(\n  vault: PtVaultFields,\n  startPrice: BigNumber,\n  nowSeconds: number\n): BigNumber {\n  const maturity = vault.startTs + vault.duration;\n\n  // Mirror the program's rejection of malformed vaults: the schedule must be a real forward\n  // window (<= ~5 years out) and the SY exchange rate a positive in-range u64.\n  if (vault.duration <= 0 || maturity > nowSeconds + PT_MAX_MATURITY_HORIZON_SECONDS) {\n    throw new Error(\"Exponent vault has an invalid maturity schedule\");\n  }\n  if (\n    !vault.lastSeenSyExchangeRate.gt(0) ||\n    vault.lastSeenSyExchangeRate.gt(MAX_SY_EXCHANGE_RATE)\n  ) {\n    throw new Error(\"Exponent vault SY exchange rate out of bounds\");\n  }\n  if (vault.ptSupply === 0n) {\n    throw new Error(\"Exponent vault has zero PT supply\");\n  }\n  // The program refuses to price a vault in emergency mode (SY rate fell below its all-time high).\n  if (vault.lastSeenSyExchangeRate.lt(vault.allTimeHighSyExchangeRate)) {\n    throw new Error(\"Exponent vault is in emergency mode\");\n  }\n\n  let expectedRate: BigNumber;\n  if (nowSeconds <= vault.startTs) {\n    expectedRate = startPrice;\n  } else if (nowSeconds >= maturity) {\n    expectedRate = new BigNumber(1);\n  } else {\n    const progress = new BigNumber(nowSeconds - vault.startTs).div(vault.duration);\n    expectedRate = startPrice.plus(new BigNumber(1).minus(startPrice).times(progress));\n  }\n\n  const syPerPt = new BigNumber(vault.syForPt.toString()).div(\n    new BigNumber(vault.ptSupply.toString())\n  );\n  const redemptionCap = syPerPt.times(vault.lastSeenSyExchangeRate);\n\n  return BigNumber.min(expectedRate, redemptionCap);\n}\n\n/**\n * The multiplier for one bank given its decoded multiplier account. Throws when the account\n * type does not match the bank's oracle setup or the rate is unusable.\n */\nexport function computeOracleMultiplier(\n  input: OracleMultiplierBankInput,\n  state: MultiplierAccountState,\n  ctx: { currentEpoch: number; nowSeconds: number }\n): number {\n  switch (input.oracleSetup) {\n    case OracleSetup.PythMSOL:\n    case OracleSetup.KaminoMSOL:\n    case OracleSetup.JuplendMSOL:\n      if (state.kind !== \"marinade\") throw new Error(`Expected Marinade state, got ${state.kind}`);\n      return Number(state.msolPrice);\n\n    case OracleSetup.PythLST:\n    case OracleSetup.KaminoLST:\n    case OracleSetup.JuplendLST:\n      if (state.kind !== \"stakePool\") throw new Error(`Expected stake pool, got ${state.kind}`);\n      // Same staleness rule as the program: an uncranked pool one epoch behind is fine,\n      // anything older is unpriceable\n      if (ctx.currentEpoch - state.lastUpdateEpoch > MAX_STAKE_POOL_EPOCH_LAG) {\n        throw new Error(\n          `Stale stake pool (last updated epoch ${state.lastUpdateEpoch}, current ${ctx.currentEpoch})`\n        );\n      }\n      return Number(state.exchangeRate);\n\n    case OracleSetup.PTPyth:\n    case OracleSetup.PTFixed:\n      if (state.kind !== \"exponentVault\") {\n        throw new Error(`Expected Exponent vault, got ${state.kind}`);\n      }\n      if (!input.fixedPrice) throw new Error(\"Missing fixedPrice for PT bank\");\n      return computePtMultiplier(\n        {\n          startTs: state.startTs,\n          duration: state.duration,\n          syForPt: BigInt(state.syForPt),\n          ptSupply: BigInt(state.ptSupply),\n          lastSeenSyExchangeRate: new BigNumber(state.lastSeenSyExchangeRate),\n          allTimeHighSyExchangeRate: new BigNumber(state.allTimeHighSyExchangeRate),\n        },\n        input.fixedPrice,\n        ctx.nowSeconds\n      ).toNumber();\n\n    default:\n      throw new Error(`Oracle setup ${input.oracleSetup} is not multiplier-priced`);\n  }\n}\n\n/**\n * Maps decoded multiplier accounts back onto banks. Banks whose account is missing or unusable\n * are left out (and end up unpriced downstream).\n */\nexport function computeOracleMultipliers(\n  inputs: OracleMultiplierBankInput[],\n  accountStates: MultiplierAccountStates,\n  nowSeconds: number = Math.floor(Date.now() / 1000)\n): Record<string, number> {\n  const multiplierByBank: Record<string, number> = {};\n  const ctx = { currentEpoch: accountStates.currentEpoch, nowSeconds };\n\n  for (const input of inputs) {\n    const state = accountStates.states[input.multiplierAccountKey];\n    if (!state) {\n      console.error(`Missing multiplier account for bank ${input.bankAddress}`);\n      continue;\n    }\n    try {\n      multiplierByBank[input.bankAddress] = computeOracleMultiplier(input, state, ctx);\n    } catch (e) {\n      console.error(`Failed to compute multiplier for bank ${input.bankAddress}`, e);\n    }\n  }\n\n  return multiplierByBank;\n}\n","import { AnchorProvider } from \"@coral-xyz/anchor\";\nimport {\n  AddressLookupTableAccount,\n  Connection,\n  PublicKey,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { CrossbarClient } from \"@switchboard-xyz/common\";\nimport { AnchorUtils, PullFeed } from \"@switchboard-xyz/on-demand\";\n\nimport { OraclePrice } from \"../types\";\nimport { computeSmartCrank } from \"../utils\";\nimport { getOracleSourceFromOracleSetup } from \"../utils/detection.utils\";\n\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\nimport { TransactionBuildingError } from \"~/errors\";\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { BankType } from \"~/services/bank\";\nimport { MarginfiProgram } from \"~/types\";\n\ntype MakeSmartCrankSwbFeedIxParams = {\n  marginfiAccount: MarginfiAccountType;\n  bankMap: Map<string, BankType>;\n  oraclePrices: Map<string, OraclePrice>;\n  assetShareValueMultiplierByBank: Map<string, BigNumber>;\n  instructions: TransactionInstruction[];\n  program: MarginfiProgram;\n  connection: Connection;\n  crossbarUrl?: string;\n  /**\n   * Pass `isGroupRateLimiterEnabled(group.rateLimiter)`. While the group rate limiter\n   * is enabled, withdrawn banks' switchboard oracles are always cranked (the program\n   * requires a fresh price for every withdraw, even withdraw-all).\n   */\n  groupRateLimiterEnabled?: boolean;\n};\n\nexport async function makeSmartCrankSwbFeedIx(params: MakeSmartCrankSwbFeedIxParams): Promise<{\n  instructions: TransactionInstruction[];\n  luts: AddressLookupTableAccount[];\n}> {\n  const crankResult = await computeSmartCrank(params);\n\n  if (crankResult.uncrankableLiabilities.length > 0) {\n    console.log(\n      \"Uncrankable liability details:\",\n      crankResult.uncrankableLiabilities.map((l) => ({\n        symbol: l.bank.tokenSymbol,\n        reason: l.reason,\n      }))\n    );\n  }\n  if (crankResult.uncrankableAssets.length > 0) {\n    console.log(\n      \"Uncrankable asset details:\",\n      crankResult.uncrankableAssets.map((a) => ({\n        symbol: a.bank.tokenSymbol,\n        reason: a.reason,\n      }))\n    );\n  }\n\n  if (!crankResult.isCrankable) {\n    throw TransactionBuildingError.oracleCrankFailed(\n      crankResult.uncrankableLiabilities.map((liability) => ({\n        bankAddress: liability.bank.address.toBase58(),\n        mint: liability.bank.mint.toBase58(),\n        symbol: liability.bank.tokenSymbol,\n        reason: liability.reason,\n      })),\n      crankResult.uncrankableAssets.map((asset) => ({\n        bankAddress: asset.bank.address.toBase58(),\n        mint: asset.bank.mint.toBase58(),\n        symbol: asset.bank.tokenSymbol,\n        reason: asset.reason,\n      }))\n    );\n  }\n\n  const oraclesToCrank = crankResult.requiredOracles;\n\n  const { instructions, luts } = await makeUpdateSwbFeedIx({\n    swbPullOracles: oraclesToCrank,\n    feePayer: params.marginfiAccount.authority,\n    connection: params.connection,\n    crossbarUrl: params.crossbarUrl,\n  });\n\n  return { instructions, luts };\n}\n\ntype MakeSmartCrankSwbFeedIxForAccountsParams = Omit<\n  MakeSmartCrankSwbFeedIxParams,\n  \"marginfiAccount\"\n> & {\n  /**\n   * Accounts targeted by instructions in the set. Each account is projected against\n   * the instructions that operate on it (the projection filters by account), so the\n   * same full instruction list serves every account. The first account's authority\n   * pays the feed updates.\n   */\n  marginfiAccounts: MarginfiAccountType[];\n};\n\n/**\n * Multi-account variant of {@link makeSmartCrankSwbFeedIx} for instruction sets that\n * span several marginfi accounts (e.g. transferring positions: the source is cranked\n * against its withdraws, the destination against its projected post-transfer\n * deposits). Overlapping feeds across accounts are cranked once.\n */\nexport async function makeSmartCrankSwbFeedIxForAccounts(\n  params: MakeSmartCrankSwbFeedIxForAccountsParams\n): Promise<{\n  instructions: TransactionInstruction[];\n  luts: AddressLookupTableAccount[];\n}> {\n  const crankResults = await Promise.all(\n    params.marginfiAccounts.map((marginfiAccount) =>\n      computeSmartCrank({ ...params, marginfiAccount })\n    )\n  );\n\n  const uncrankableLiabilities = crankResults.flatMap((r) => r.uncrankableLiabilities);\n  const uncrankableAssets = crankResults.flatMap((r) => r.uncrankableAssets);\n\n  if (uncrankableLiabilities.length > 0) {\n    console.log(\n      \"Uncrankable liability details:\",\n      uncrankableLiabilities.map((l) => ({\n        symbol: l.bank.tokenSymbol,\n        reason: l.reason,\n      }))\n    );\n  }\n  if (uncrankableAssets.length > 0) {\n    console.log(\n      \"Uncrankable asset details:\",\n      uncrankableAssets.map((a) => ({\n        symbol: a.bank.tokenSymbol,\n        reason: a.reason,\n      }))\n    );\n  }\n\n  if (crankResults.some((r) => !r.isCrankable)) {\n    throw TransactionBuildingError.oracleCrankFailed(\n      uncrankableLiabilities.map((liability) => ({\n        bankAddress: liability.bank.address.toBase58(),\n        mint: liability.bank.mint.toBase58(),\n        symbol: liability.bank.tokenSymbol,\n        reason: liability.reason,\n      })),\n      uncrankableAssets.map((asset) => ({\n        bankAddress: asset.bank.address.toBase58(),\n        mint: asset.bank.mint.toBase58(),\n        symbol: asset.bank.tokenSymbol,\n        reason: asset.reason,\n      }))\n    );\n  }\n\n  // makeUpdateSwbFeedIx dedupes by oracle key, so feeds required by several accounts\n  // are cranked once.\n  return makeUpdateSwbFeedIx({\n    swbPullOracles: crankResults.flatMap((r) => r.requiredOracles),\n    feePayer: params.marginfiAccounts[0].authority,\n    connection: params.connection,\n    crossbarUrl: params.crossbarUrl,\n  });\n}\n\nexport const DEFAULT_CROSSBAR_URL = \"https://crossbar.0.xyz\";\nexport const DEFAULT_FALLBACK_CROSSBAR_URL = \"https://crossbar.switchboard.xyz\";\n\nexport async function makeCrankSwbFeedIx(\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  newBanksPk: PublicKey[],\n  provider: AnchorProvider,\n  crossbarUrl?: string\n): Promise<{\n  instructions: TransactionInstruction[];\n  luts: AddressLookupTableAccount[];\n}> {\n  // filter active and newly opening balances\n  const activeBanksPk = marginfiAccount.balances\n    .filter((balance) => balance.active)\n    .map((balance) => balance.bankPk);\n\n  const allActiveBanks = [\n    ...new Set([\n      ...activeBanksPk.map((pk) => pk.toBase58()),\n      ...newBanksPk.map((pk) => pk.toBase58()),\n    ]).values(),\n  ].map((pk) => bankMap.get(pk)!);\n\n  const swbPullBanks = allActiveBanks.filter(\n    (bank) => getOracleSourceFromOracleSetup(bank.config.oracleSetup).key === \"switchboard\"\n  );\n\n  if (swbPullBanks.length > 0) {\n    const staleOracles = swbPullBanks\n      .filter((bank) => !bank.oracleKey.equals(new PublicKey(ZERO_ORACLE_KEY)))\n      .map((bank) => bank.oracleKey);\n\n    if (staleOracles.length > 0) {\n      const { instructions, luts } = await makeUpdateSwbFeedIx({\n        swbPullOracles: staleOracles.map((oracle) => ({ key: oracle })),\n        feePayer: provider.publicKey,\n        connection: provider.connection,\n        crossbarUrl,\n      });\n      return { instructions, luts };\n    }\n\n    return { instructions: [], luts: [] };\n  } else {\n    return { instructions: [], luts: [] };\n  }\n}\n\nexport async function makeUpdateSwbFeedIx(props: {\n  swbPullOracles: {\n    key: PublicKey;\n    price?: OraclePrice;\n  }[];\n  feePayer: PublicKey;\n  connection: Connection;\n  crossbarUrl?: string;\n  fallbackCrossbarUrl?: string;\n}): Promise<{\n  instructions: TransactionInstruction[];\n  luts: AddressLookupTableAccount[];\n}> {\n  // Deduplicate oracles by address\n  const seen = new Set<string>();\n  const uniqueOracles = props.swbPullOracles.filter((oracle) => {\n    const key = oracle.key.toBase58();\n    if (seen.has(key)) return false;\n    seen.add(key);\n    return true;\n  });\n\n  // latest swb intergation\n  const dummyWallet = {\n    publicKey: props.feePayer,\n    signTransaction: async (tx: any) => tx,\n    signAllTransactions: async (txs: any[]) => txs,\n  } as any;\n  const swbProgram = await AnchorUtils.loadProgramFromConnection(props.connection, dummyWallet);\n\n  const pullFeedInstances: PullFeed[] = uniqueOracles.map((oracle) => {\n    const pullFeed = new PullFeed(swbProgram, oracle.key);\n    // if (oracle.price?.switchboardData) {\n    //   const swbData = oracle.price?.switchboardData;\n\n    //   pullFeed.data = {\n    //     queue: new PublicKey(swbData.queue),\n    //     feedHash: new Uint8Array(Buffer.from(swbData.feedHash, \"hex\")),\n    //     maxVariance: new BN(swbData.maxVariance),\n    //     minResponses: swbData.minResponses,\n    //   } as PullFeedAccountData;\n    // }\n    return pullFeed;\n  });\n\n  // No crank needed\n  if (pullFeedInstances.length === 0) {\n    return { instructions: [], luts: [] };\n  }\n\n  const primaryUrl = props.crossbarUrl ?? DEFAULT_CROSSBAR_URL;\n  const fallbackUrl = props.fallbackCrossbarUrl ?? DEFAULT_FALLBACK_CROSSBAR_URL;\n\n  try {\n    const [pullIx, luts] = await PullFeed.fetchUpdateManyIx(swbProgram, {\n      feeds: pullFeedInstances,\n      numSignatures: 1,\n      crossbarClient: new CrossbarClient(primaryUrl),\n      payer: props.feePayer,\n    });\n    return { instructions: pullIx, luts };\n  } catch (primaryError) {\n    console.warn(\n      `Primary crossbar endpoint failed (${primaryUrl}), trying fallback:`,\n      primaryError\n    );\n    const [pullIx, luts] = await PullFeed.fetchUpdateManyIx(swbProgram, {\n      feeds: pullFeedInstances,\n      numSignatures: 1,\n      crossbarClient: new CrossbarClient(fallbackUrl),\n      payer: props.feePayer,\n    });\n    return { instructions: pullIx, luts };\n  }\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { AssetTag, BankType } from \"~/services/bank\";\nimport { InstructionsWrapper } from \"~/services/transaction\";\nimport { BankIntegrationMetadataMap } from \"~/types\";\nimport { makeRefreshObligationIx, makeRefreshReservesBatchIx } from \"~/vendor/klend\";\n\n/**\n * Creates instructions to refresh Kamino lending protocol reserves and obligations.\n *\n * This function generates the necessary Solana instructions to update Kamino (Klend) reserve\n * data and refresh obligations for all active Kamino banks in the marginfi account, plus any\n * new banks being added. This ensures price and state data is current before executing transactions.\n *\n * @param marginfiAccount - The marginfi account containing active bank balances\n * @param bankMap - Map of bank addresses (base58) to bank instances\n * @param newBanksPk - Public keys of new banks being added to the account\n * @param bankMetadataMap - Map containing Bank-specific metadata (reserve states, lending markets)\n * @returns InstructionsWrapper containing refresh reserve and obligation instructions\n */\nexport function makeRefreshKaminoBanksIxs(\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  newBanksPk: PublicKey[],\n  bankMetadataMap: BankIntegrationMetadataMap\n): InstructionsWrapper {\n  const ixs: TransactionInstruction[] = [];\n\n  const activeBanksPk = marginfiAccount.balances\n    .filter((balance) => balance.active)\n    .map((balance) => balance.bankPk);\n\n  const allActiveBanks = [\n    ...new Set([\n      ...activeBanksPk.map((pk) => pk.toBase58()),\n      ...newBanksPk.map((pk) => pk.toBase58()),\n    ]).values(),\n  ].map((pk) => bankMap.get(pk)!);\n\n  // filter kamino banks\n  const kaminoBanks = allActiveBanks.filter((bank) => bank.config.assetTag === AssetTag.KAMINO);\n\n  if (kaminoBanks.length > 0) {\n    const newBanksPkBase = newBanksPk.map((pk) => pk.toBase58());\n\n    const banksToRefreshObligations = kaminoBanks.filter((bank) =>\n      newBanksPkBase.includes(bank.address.toBase58())\n    );\n\n    const refreshReserveData = kaminoBanks\n      .map((kaminoBank) => {\n        const bankMetadata = bankMetadataMap?.[kaminoBank.address.toBase58()];\n        if (!bankMetadata?.kaminoStates) return;\n        if (!kaminoBank.kaminoIntegrationAccounts) return;\n\n        const kaminoReserve = kaminoBank.kaminoIntegrationAccounts.kaminoReserve;\n        const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n        return {\n          reserve: kaminoReserve,\n          lendingMarket,\n        };\n      })\n      .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n    //refresh obligations\n    const reserveIx = makeRefreshReservesBatchIx(refreshReserveData);\n\n    ixs.push(reserveIx);\n\n    for (const kaminoBank of banksToRefreshObligations) {\n      const bankMetadata = bankMetadataMap?.[kaminoBank.address.toBase58()];\n      if (!bankMetadata?.kaminoStates) continue;\n      if (!kaminoBank.kaminoIntegrationAccounts) continue;\n\n      const kaminoReserve = kaminoBank.kaminoIntegrationAccounts.kaminoReserve;\n      const lendingMarket = bankMetadata.kaminoStates.reserveState.lendingMarket;\n\n      const obligationIx = makeRefreshObligationIx(\n        lendingMarket,\n        kaminoBank.kaminoIntegrationAccounts.kaminoObligation,\n        kaminoReserve\n      );\n      ixs.push(obligationIx);\n    }\n  }\n\n  return {\n    instructions: ixs,\n    keys: [],\n  };\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { BankType } from \"~/services/bank\";\nimport type { InstructionsWrapper } from \"~/services/transaction/types\";\nimport type { BankIntegrationMetadataMap } from \"~/types\";\nimport { makeUpdateSpotMarketIx } from \"~/vendor/drift\";\n\n/**\n * Creates instructions to update Drift protocol spot market data.\n *\n * This function generates the necessary Solana instructions to refresh Drift spot market\n * cumulative interest for all active Drift banks in the marginfi account, excluding any\n * specified banks. This ensures market state and interest calculations are current before\n * executing transactions.\n *\n * @param marginfiAccount - The marginfi account containing active bank balances\n * @param bankMap - Map of bank addresses (base58) to bank instances\n * @param banksToExclude - Public keys of banks to exclude from the update\n * @param bankMetadataMap - Map containing Bank-specific metadata (Drift spot market states)\n * @returns InstructionsWrapper containing Drift spot market update instructions\n */\nexport function makeUpdateDriftMarketIxs(\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  banksToExclude: PublicKey[],\n  bankMetadataMap: BankIntegrationMetadataMap\n): InstructionsWrapper {\n  const ixs: TransactionInstruction[] = [];\n\n  const activeBanksPk = marginfiAccount.balances\n    .filter((balance) => balance.active)\n    .map((balance) => balance.bankPk);\n\n  const banksToExcludeSet = new Set(banksToExclude.map((pk) => pk.toBase58()));\n\n  const allActiveBanks = activeBanksPk\n    .filter((pk) => !banksToExcludeSet.has(pk.toBase58()))\n    .map((pk) => bankMap.get(pk.toBase58())!);\n\n  // filter drift banks\n  const driftBanks = allActiveBanks.filter((bank) => bank.config.assetTag === 4);\n\n  if (driftBanks.length > 0) {\n    const refreshReserveData = driftBanks\n      .map((driftBank) => {\n        const bankMetadata = bankMetadataMap?.[driftBank.address.toBase58()];\n        if (!bankMetadata?.driftStates) return;\n        const driftSpotMarket = bankMetadata.driftStates.spotMarketState;\n        return driftSpotMarket;\n      })\n      .filter((bank): bank is NonNullable<typeof bank> => !!bank);\n\n    //refresh obligations\n    const updateDriftMarketIxs = refreshReserveData.map((market) =>\n      makeUpdateSpotMarketIx({ spotMarket: market })\n    );\n\n    ixs.push(...updateDriftMarketIxs);\n  }\n\n  return {\n    instructions: ixs,\n    keys: [],\n  };\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { AssetTag, BankType } from \"~/services/bank\";\nimport type { InstructionsWrapper } from \"~/services/transaction/types\";\nimport type { BankIntegrationMetadataMap } from \"~/types\";\nimport { makeUpdateJupLendRate } from \"~/vendor/jup-lend\";\n\n/**\n * Creates instructions to refresh JupLend exchange rates.\n *\n * This function generates permissionless `update_rate` instructions for all active\n * JupLend banks in the marginfi account, excluding any specified banks. This ensures\n * exchange rates are current before risk-sensitive flows (liquidation, borrow,\n * non-JupLend withdraw where JupLend is collateral).\n *\n * Note: juplend_deposit and juplend_withdraw call updateRate internally,\n * so this is only needed for other flows.\n *\n * @param marginfiAccount - The marginfi account containing active bank balances\n * @param bankMap - Map of bank addresses (base58) to bank instances\n * @param banksToExclude - Public keys of banks to exclude from the update\n * @param bankMetadataMap - Map containing Bank-specific metadata (JupLend lending states)\n * @returns InstructionsWrapper containing update_rate instructions\n */\nexport function makeUpdateJupLendRateIxs(\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  banksToExclude: PublicKey[],\n  bankMetadataMap: BankIntegrationMetadataMap\n): InstructionsWrapper {\n  const ixs: TransactionInstruction[] = [];\n\n  const activeBanksPk = marginfiAccount.balances\n    .filter((balance) => balance.active)\n    .map((balance) => balance.bankPk);\n\n  const banksToExcludeSet = new Set(banksToExclude.map((pk) => pk.toBase58()));\n\n  const allActiveBanks = activeBanksPk\n    .filter((pk) => !banksToExcludeSet.has(pk.toBase58()))\n    .map((pk) => bankMap.get(pk.toBase58())!)\n    .filter(Boolean);\n\n  // filter juplend banks\n  const jupLendBanks = allActiveBanks.filter((bank) => bank.config.assetTag === AssetTag.JUPLEND);\n\n  if (jupLendBanks.length > 0) {\n    const updateRateIxs = jupLendBanks\n      .map((bank) => {\n        const bankMetadata = bankMetadataMap?.[bank.address.toBase58()];\n        if (!bankMetadata?.jupLendStates) return;\n        return makeUpdateJupLendRate({\n          lendingState: bankMetadata.jupLendStates.jupLendingState,\n        });\n      })\n      .filter((ix): ix is TransactionInstruction => !!ix);\n\n    ixs.push(...updateRateIxs);\n  }\n\n  return {\n    instructions: ixs,\n    keys: [],\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { makeUpdateDriftMarketIxs } from \"./drift-market-update\";\nimport { makeUpdateJupLendRateIxs } from \"./juplend-rate-update\";\nimport { makeRefreshKaminoBanksIxs } from \"./klend-reserve-refresh\";\n\nimport { MarginfiAccountType } from \"~/services/account\";\nimport { BankType } from \"~/services/bank\";\nimport type { InstructionsWrapper } from \"~/services/transaction/types\";\nimport type { BankIntegrationMetadataMap } from \"~/types\";\n\n/**\n * Groups the per-integration refresh/update instructions (Kamino reserve refresh,\n * Drift spot market update, JupLend rate update) into a single wrapper.\n *\n * JupLend and Drift action instructions update their own bank via CPI, so the bank\n * being acted on is excluded from those updates. Kamino has no such CPI, so the\n * action bank must be explicitly included in the refresh set instead.\n *\n * @param marginfiAccount - The marginfi account containing active bank balances\n * @param bankMap - Map of bank addresses (base58) to bank instances\n * @param banksToExclude - Banks skipped for the JupLend/Drift updates (their CPI already updates them)\n * @param bankMetadataMap - Map containing Bank-specific metadata (integration states)\n * @param kaminoNewBanksPk - Banks to union into the Kamino refresh set, defaults to `banksToExclude`\n * @returns InstructionsWrapper with instructions ordered kamino -> drift -> juplend\n */\nexport function makeRefreshIntegrationBanksIxs(\n  marginfiAccount: MarginfiAccountType,\n  bankMap: Map<string, BankType>,\n  banksToExclude: PublicKey[],\n  bankMetadataMap: BankIntegrationMetadataMap,\n  kaminoNewBanksPk: PublicKey[] = banksToExclude\n): InstructionsWrapper {\n  const kaminoRefreshIxs = makeRefreshKaminoBanksIxs(\n    marginfiAccount,\n    bankMap,\n    kaminoNewBanksPk,\n    bankMetadataMap\n  );\n\n  const updateDriftMarketIxs = makeUpdateDriftMarketIxs(\n    marginfiAccount,\n    bankMap,\n    banksToExclude,\n    bankMetadataMap\n  );\n\n  const updateJupLendRateIxs = makeUpdateJupLendRateIxs(\n    marginfiAccount,\n    bankMap,\n    banksToExclude,\n    bankMetadataMap\n  );\n\n  return {\n    instructions: [\n      ...kaminoRefreshIxs.instructions,\n      ...updateDriftMarketIxs.instructions,\n      ...updateJupLendRateIxs.instructions,\n    ],\n    keys: [...kaminoRefreshIxs.keys, ...updateDriftMarketIxs.keys, ...updateJupLendRateIxs.keys],\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport const SCOPE_PROGRAM_ID = new PublicKey(\"HFn8GnPADiny6XqUoWE8uRPPxb29ikn4yTuPa9MF2fWJ\");\n\n// sha256(\"account:OraclePrices\")[..8]\nexport const SCOPE_ORACLE_PRICES_DISCRIMINATOR = Buffer.from([89, 128, 118, 221, 6, 72, 180, 146]);\n\nexport const SCOPE_MAX_ENTRIES = 512;\n\n// OraclePrices layout: 8 (discriminator) + 32 (oracle_mappings) + 512 * 56 (DatedPrice entries)\nconst ENTRIES_OFFSET = 40;\nconst DATED_PRICE_SIZE = 56;\nexport const SCOPE_ORACLE_PRICES_SIZE = ENTRIES_OFFSET + SCOPE_MAX_ENTRIES * DATED_PRICE_SIZE;\n\nexport interface ScopeDatedPrice {\n  /** Decimal price, i.e. `value / 10^exp` */\n  price: BigNumber;\n  lastUpdatedSlot: number;\n  unixTimestamp: number;\n}\n\n/**\n * Decodes one `DatedPrice` entry out of a Scope `OraclePrices` account.\n * DatedPrice layout: price.value u64, price.exp u64, last_updated_slot u64, unix_timestamp u64,\n * generic_data [u8; 24].\n */\nexport function decodeScopePriceAtIndex(data: Buffer, entryIndex: number): ScopeDatedPrice {\n  if (data.length !== SCOPE_ORACLE_PRICES_SIZE) {\n    throw new Error(`Invalid Scope OraclePrices account size: ${data.length}`);\n  }\n  if (!data.subarray(0, 8).equals(SCOPE_ORACLE_PRICES_DISCRIMINATOR)) {\n    throw new Error(\"Invalid Scope OraclePrices discriminator\");\n  }\n  if (entryIndex < 0 || entryIndex >= SCOPE_MAX_ENTRIES) {\n    throw new Error(`Scope entry index out of range: ${entryIndex}`);\n  }\n\n  const offset = ENTRIES_OFFSET + entryIndex * DATED_PRICE_SIZE;\n  const value = data.readBigUInt64LE(offset);\n  const exp = data.readBigUInt64LE(offset + 8);\n  const lastUpdatedSlot = data.readBigUInt64LE(offset + 16);\n  const unixTimestamp = data.readBigUInt64LE(offset + 24);\n\n  // Same bound as the program's MAX_EXP_10_I80F48\n  if (exp >= 24n) {\n    throw new Error(`Scope entry exponent out of bounds: ${exp}`);\n  }\n\n  const price = new BigNumber(value.toString()).shiftedBy(-Number(exp));\n\n  return {\n    price,\n    lastUpdatedSlot: Number(lastUpdatedSlot),\n    unixTimestamp: Number(unixTimestamp),\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\n/**\n * Gamma Protocol vault program — LP vaults with instant deposits, escrow\n * withdrawals. The production P0 vaults live under the upstream Gamma\n * program; the on-chain vault, withdrawal-policy, deposit-receipt and\n * withdraw-receipt accounts all live under this program, so all PDAs and\n * instruction targets must derive from it.\n */\nexport const GAMMA_VAULT_PROGRAM_ID = new PublicKey(\n  \"GaMmanX9i4jGmqDZZD2tbD6B2v9p21btenPneMXnTczV\"\n);\n\n// LP vault PDA seeds\nexport const SEED_WITHDRAWAL_POLICY = \"withdrawal_policy\";\nexport const SEED_DEPOSIT_POLICY = \"deposit_policy\";\nexport const SEED_DEPOSIT_RECEIPT = \"deposit_receipt\";\nexport const SEED_WITHDRAW_ESCROW = \"withdraw_escrow\";\nexport const SEED_WITHDRAW_RECEIPT = \"withdraw_receipt\";\n","{\n  \"address\": \"GaMmanX9i4jGmqDZZD2tbD6B2v9p21btenPneMXnTczV\",\n  \"metadata\": {\n    \"name\": \"gamma_vault\",\n    \"version\": \"2.3.0\",\n    \"spec\": \"0.1.0\",\n    \"description\": \"Gamma Protocol vault program — LP vaults with instant deposits, escrow withdrawals, and performance fees\"\n  },\n  \"instructions\": [\n    {\n      \"name\": \"assess_fees\",\n      \"docs\": [\n        \"Assess scheduled performance fees (keeper).\"\n      ],\n      \"discriminator\": [\n        224,\n        15,\n        195,\n        19,\n        125,\n        145,\n        2,\n        100\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"claim_cross_chain_withdrawal\",\n      \"docs\": [\n        \"Move a fulfilled withdrawal's claimable assets out of the withdraw escrow\",\n        \"into the DLN give-ATA, which is derived from `lp_vault.keeper_authority` and\",\n        \"never supplied by the caller, and advance the intent to `ASSETS_SETTLED`.\",\n        \"Permissionless. Beta-only; reject-only otherwise.\"\n      ],\n      \"discriminator\": [\n        51,\n        239,\n        161,\n        18,\n        144,\n        185,\n        10,\n        112\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Rent for the maker ATA if it does not exist yet. NOT an authority.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"cross_chain_withdrawer\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_intent\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"docs\": [\n            \"Drained of its claimable amounts but deliberately NOT closed.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"escrow_shares_account\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"maker_authority\",\n          \"docs\": [\n            \"is checked below. Never signs here; its signature is needed only for the\",\n            \"off-chain DLN return order. The `!= default` guard stops an unconfigured\",\n            \"vault from routing assets to the zero address's ATA.\"\n          ]\n        },\n        {\n          \"name\": \"maker_asset_account\",\n          \"docs\": [\n            \"The DLN give-ATA. Anchor derives it from `maker_authority`, which the\",\n            \"constraints above pin to `lp_vault.keeper_authority`, so the destination is\",\n            \"on-chain state rather than a caller argument.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"maker_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"close_deposit_receipt\",\n      \"docs\": [\n        \"Close a deposit receipt and reclaim rent.\"\n      ],\n      \"discriminator\": [\n        216,\n        104,\n        127,\n        60,\n        88,\n        217,\n        184,\n        15\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"docs\": [\n            \"User who owns the deposit receipt.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"The vault this receipt is associated with.\"\n          ]\n        },\n        {\n          \"name\": \"deposit_receipt\",\n          \"docs\": [\n            \"Deposit receipt to close. Rent is returned to user.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"complete_withdrawal\",\n      \"docs\": [\n        \"User claims their withdrawal from escrow.\",\n        \"Burns shares and transfers assets to user's wallet.\"\n      ],\n      \"discriminator\": [\n        107,\n        98,\n        134,\n        131,\n        74,\n        120,\n        174,\n        121\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"docs\": [\n            \"User claiming the withdrawal.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"LpVault (needed for shares_mint validation).\"\n          ]\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"docs\": [\n            \"Mint of the vault assets.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mint for vault shares.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"user_asset_ata\",\n          \"docs\": [\n            \"User's asset token account (destination for claimed assets).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"docs\": [\n            \"User's withdraw escrow.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"docs\": [\n            \"Escrow's asset token account (source of assets).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdraw_escrow\"\n          ]\n        },\n        {\n          \"name\": \"escrow_shares_account\",\n          \"docs\": [\n            \"Escrow's share token account (shares to burn).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdraw_escrow\"\n          ]\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"docs\": [\n            \"User's withdraw receipt.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Token program.\"\n          ]\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"docs\": [\n            \"Associated token program.\"\n          ],\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"cross_chain_deposit_and_bridge\",\n      \"docs\": [\n        \"Authenticated BNB/DLN ingress, native Gamma deposit accounting, and\",\n        \"dePort share send in one atomic Gamma instruction. The bridging logic and\",\n        \"the deBridge SDK are compiled only under the non-default `cross-chain`\",\n        \"feature; the default (production) build keeps this entrypoint present but\",\n        \"hard-disabled (it rejects before any state transition).\"\n      ],\n      \"discriminator\": [\n        191,\n        64,\n        193,\n        191,\n        223,\n        242,\n        234,\n        122\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Heap-boxed to keep Anchor's generated account parser below the SBF\",\n            \"4 KiB stack-frame limit without changing the ordered account ABI.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  105,\n                  110,\n                  116,\n                  101,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"extcall_meta\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"extcall_meta\"\n        },\n        {\n          \"name\": \"extcall_authority\",\n          \"docs\": [\n            \"DLN's externally supplied CPI signer. Hook expense/reward funds\",\n            \"first-use rent and the exact native fee transferred to Gamma's sender.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"extcall_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"cross_chain_sender\",\n          \"docs\": [\n            \"only when calling deBridge. The handler verifies owner and data before\",\n            \"funding it with the live native fixed fee.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  115,\n                  101,\n                  110,\n                  100,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_sender_share_wallet\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_sender\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"deposit_receipt\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"extcall_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"instructions\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\",\n            \"deposit_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CrossChainDepositArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"cross_chain_deposit_and_bridge_v2\",\n      \"docs\": [\n        \"Historical serializable BNB/DLN ingress ABI. V2 remains present for\",\n        \"decoder compatibility but always rejects because it lacks runtime\",\n        \"ExtcallMeta order binding.\"\n      ],\n      \"discriminator\": [\n        207,\n        9,\n        169,\n        239,\n        70,\n        236,\n        234,\n        17\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Heap-boxed to keep Anchor's generated account parser below the SBF\",\n            \"4 KiB stack-frame limit. This address is static at hook-construction\",\n            \"time and its rent must be included in the hook expense.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  105,\n                  110,\n                  116,\n                  101,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.beneficiary\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.nonce\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"extcall_authority\",\n          \"docs\": [\n            \"DLN's substituted CPI signer. Hook expense funds first-use sender-share\",\n            \"ATA rent, this Gamma intent's rent, and the exact native dePort fee\",\n            \"transferred to Gamma's sender.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"extcall_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"cross_chain_sender\",\n          \"docs\": [\n            \"only when calling deBridge. The handler verifies owner and data before\",\n            \"funding it with the live native fixed fee.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  115,\n                  101,\n                  110,\n                  100,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_sender_share_wallet\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_sender\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"instructions\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\",\n            \"deposit_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CrossChainDepositArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"cross_chain_deposit_and_bridge_v3\",\n      \"docs\": [\n        \"Source-authenticated BNB/DLN ingress, native Gamma deposit accounting,\",\n        \"and dePort share send in one atomic Gamma instruction. The executable\",\n        \"body exists only in the exact `test-program,cross-chain` beta profile;\",\n        \"every other build keeps the ABI but rejects before state transition.\"\n      ],\n      \"discriminator\": [\n        47,\n        175,\n        48,\n        23,\n        105,\n        150,\n        94,\n        207\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Heap-boxed to keep Anchor's generated account parser below the SBF\",\n            \"4 KiB stack-frame limit. This address is static at hook-construction\",\n            \"time and its rent must be included in the hook expense.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  105,\n                  110,\n                  116,\n                  101,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.beneficiary\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.nonce\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"extcall_meta\",\n          \"docs\": [\n            \"order metadata account. The handler requires this account to be\",\n            \"nonempty, nonexecutable, and owned by the authenticated DLN executor.\"\n          ]\n        },\n        {\n          \"name\": \"extcall_authority\",\n          \"docs\": [\n            \"DLN's substituted CPI signer. Hook expense funds first-use sender-share\",\n            \"ATA rent, this Gamma intent's rent, and the exact native dePort fee\",\n            \"transferred to Gamma's sender.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"extcall_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"cross_chain_sender\",\n          \"docs\": [\n            \"only when calling deBridge. The handler verifies owner and data before\",\n            \"funding it with the live native fixed fee.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  115,\n                  101,\n                  110,\n                  100,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_sender_share_wallet\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_sender\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"instructions\",\n          \"docs\": [\n            \"stack height are checked in the handler.\"\n          ],\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\",\n            \"deposit_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CrossChainDepositArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"deposit\",\n      \"docs\": [\n        \"Deposit assets and receive shares instantly.\",\n        \"Requires NAV to be fresh (within nav_max_staleness).\"\n      ],\n      \"discriminator\": [\n        242,\n        35,\n        198,\n        137,\n        82,\n        225,\n        242,\n        182\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"docs\": [\n            \"User depositing into the vault.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"LpVault to deposit into.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\",\n            \"deposit_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"docs\": [\n            \"Withdrawal policy for net capacity accounting. Deposits offset usage.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"docs\": [\n            \"Hard capacity shared by all deposit sources.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Token account for vault assets.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"user_asset_ata\",\n          \"docs\": [\n            \"User's asset token account (source of deposit).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"user_share_ata\",\n          \"docs\": [\n            \"User's share token account (destination for minted shares).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"deposit_receipt\",\n          \"docs\": [\n            \"Deposit receipt account\",\n            \"Derived from user pubkey and lp_vault pubkey.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"docs\": [\n            \"Mint of the vault assets.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mint for vault shares.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Token program.\"\n          ]\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"docs\": [\n            \"Associated token program.\"\n          ],\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"emergency_update_nav\",\n      \"docs\": [\n        \"Apply a truthful NAV movement outside the normal window cap. Requires\",\n        \"distinct vault fund-authority and global super-admin signatures and the\",\n        \"same complete optimistic-concurrency tuple as a normal publication.\"\n      ],\n      \"discriminator\": [\n        99,\n        77,\n        126,\n        170,\n        191,\n        0,\n        36,\n        218\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Ordinary per-vault NAV authority. Emergency use always requires this\",\n            \"signer and the independent global super-admin below.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"super_admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"global_config\"\n          ]\n        },\n        {\n          \"name\": \"global_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  103,\n                  108,\n                  111,\n                  98,\n                  97,\n                  108,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"nav_update_policy\"\n          ]\n        },\n        {\n          \"name\": \"nav_update_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  110,\n                  97,\n                  118,\n                  95,\n                  117,\n                  112,\n                  100,\n                  97,\n                  116,\n                  101,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_total_shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav_updated_at\",\n          \"type\": \"i64\"\n        },\n        {\n          \"name\": \"expected_pending_withdrawal_value\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"fulfill_withdrawal\",\n      \"docs\": [\n        \"Fulfill pending withdrawals by transferring assets to user's escrow.\",\n        \"Called by keeper when liquidity is available.\"\n      ],\n      \"discriminator\": [\n        57,\n        37,\n        123,\n        221,\n        103,\n        93,\n        162,\n        176\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"docs\": [\n            \"Keeper signer. Must be the vault's fund_authority or keeper_authority.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"user\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"LpVault.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"docs\": [\n            \"Withdrawal policy used to retain the configured base-asset fee.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Vault's asset token account.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"docs\": [\n            \"Mint of the vault assets.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mint for vault shares.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"docs\": [\n            \"User's withdraw escrow.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"docs\": [\n            \"Escrow's asset token account (destination for assets).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdraw_escrow\"\n          ]\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"docs\": [\n            \"User's withdraw receipt.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Token program.\"\n          ]\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"init_global_config\",\n      \"discriminator\": [\n        140,\n        136,\n        214,\n        48,\n        87,\n        0,\n        120,\n        255\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"docs\": [\n            \"Signer initializing the GlobalConfig. MUST be the program's\",\n            \"BPFLoaderUpgradeable upgrade authority (proven by the constraints on\",\n            \"`program` + `program_data` below). Becomes the super_admin; the only\",\n            \"later rotation path is `update_admin_authorities`, which is likewise\",\n            \"gated on the upgrade authority. On a fresh deploy, call init BEFORE\",\n            \"finalizing the program (a finalized/`--final` program has no upgrade\",\n            \"authority → init AND rotation impossible) and while a plain deployer\",\n            \"keypair (not a multisig PDA) still holds it.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\",\n          \"docs\": [\n            \"Global config account. Derived with a single str.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  103,\n                  108,\n                  111,\n                  98,\n                  97,\n                  108,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"program\",\n          \"docs\": [\n            \"This program's own account; ties `program_data` to this program so the\",\n            \"upgrade-authority check below cannot be satisfied with an unrelated\",\n            \"program's ProgramData.\"\n          ],\n          \"address\": \"GaMmanX9i4jGmqDZZD2tbD6B2v9p21btenPneMXnTczV\"\n        },\n        {\n          \"name\": \"program_data\",\n          \"docs\": [\n            \"ProgramData account holding the program's upgrade authority. Gate: the\",\n            \"signer must equal the upgrade authority. `programdata_address()` returns\",\n            \"`Ok(None)` for a non-upgradeable load and a revoked authority is `None`,\",\n            \"so a `None` on either side fails closed.\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"create_authority\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"init_lp_vault\",\n      \"discriminator\": [\n        40,\n        247,\n        24,\n        8,\n        152,\n        98,\n        18,\n        220\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"docs\": [\n            \"User creating the vault.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"Lp vault being created.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"arg\",\n                \"path\": \"vault_name\"\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  118,\n                  97,\n                  117,\n                  108,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"global_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  103,\n                  108,\n                  111,\n                  98,\n                  97,\n                  108,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mint for shares, minted on deposit.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  115,\n                  104,\n                  97,\n                  114,\n                  101,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"docs\": [\n            \"Mint of the assets, USDC, maybe configurable.\"\n          ]\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Token account for main asset.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  109,\n                  97,\n                  105,\n                  110,\n                  95,\n                  97,\n                  115,\n                  115,\n                  101,\n                  116,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"pending_shares_account\",\n          \"docs\": [\n            \"Token account where shares are held during queued (illiquid) withdrawals.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  112,\n                  101,\n                  110,\n                  100,\n                  105,\n                  110,\n                  103,\n                  95,\n                  115,\n                  104,\n                  97,\n                  114,\n                  101,\n                  115\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"docs\": [\n            \"Withdrawal policy PDA for retained fees and net outflow caps.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"docs\": [\n            \"Shared hard deposit capacity. New vaults start fail-closed until their\",\n            \"fund authority explicitly configures this policy.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"docs\": [\n            \"Optional fee recipient token account (shares mint).\",\n            \"Required when initializing with performance_fee_bps > 0.\"\n          ],\n          \"optional\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Can either be spl-token or token-2022.\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"fund_authority\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"nav_max_staleness\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"vault_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"decimals\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"performance_fee_bps\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"assessment_interval_secs\",\n          \"type\": \"i64\"\n        },\n        {\n          \"name\": \"keeper_authority\",\n          \"type\": {\n            \"option\": \"pubkey\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"init_nav_update_policy\",\n      \"docs\": [\n        \"Create the per-vault fixed-window NAV movement policy. Existing vaults\",\n        \"must initialize this PDA during the checked-NAV upgrade window; normal\",\n        \"checked publications fail closed while it is absent.\"\n      ],\n      \"discriminator\": [\n        216,\n        234,\n        28,\n        89,\n        151,\n        95,\n        189,\n        56\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Existing vault fund authority. Pays for the dedicated policy PDA.\"\n          ],\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"nav_update_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  110,\n                  97,\n                  118,\n                  95,\n                  117,\n                  112,\n                  100,\n                  97,\n                  116,\n                  101,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"initialize_cross_chain_config\",\n      \"docs\": [\n        \"Initialize Gamma's program-owned cross-chain control plane. The\",\n        \"existing Gamma upgrade authority is the only initializer and the\",\n        \"circuit breaker always starts paused.\"\n      ],\n      \"discriminator\": [\n        162,\n        136,\n        180,\n        13,\n        95,\n        156,\n        67,\n        223\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_config\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"program\",\n          \"address\": \"GaMmanX9i4jGmqDZZD2tbD6B2v9p21btenPneMXnTczV\"\n        },\n        {\n          \"name\": \"program_data\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"admin\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"queue_cross_chain_withdrawal\",\n      \"docs\": [\n        \"Move an escrowed withdrawal intent's shares into the vault's own illiquid\",\n        \"withdrawal queue, so the existing keeper prices and fulfils them exactly as\",\n        \"it does a native withdrawal. Leaves `nav` and `total_shares` untouched.\",\n        \"Permissionless — every amount comes from the intent. Beta-only; reject-only\",\n        \"otherwise.\"\n      ],\n      \"discriminator\": [\n        102,\n        132,\n        183,\n        186,\n        25,\n        146,\n        174,\n        219\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Rent for the receipt, the escrow and their two ATAs. NOT an authority —\",\n            \"every amount here comes from the intent, so any signer may pay.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Program-authored withdrawal intent (kind = 2). Its status is the idempotency\",\n            \"guard against queueing the same withdrawal twice.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_withdrawer\",\n          \"docs\": [\n            \"this intent. Never signs and is never read as data — it exists only so the\",\n            \"receipt and escrow seeds are 1:1 with the withdrawal. Fully constrained by\",\n            \"its seeds.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_intent\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_shares_account\",\n          \"docs\": [\n            \"Destination for the queued shares.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"docs\": [\n            \"Initialized here so the keeper's `fulfill_withdrawal` has somewhere to put\",\n            \"the assets; this instruction never writes to it.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"docs\": [\n            \"Route-owned share escrow; source of the shares being queued.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Read-only: queueing MOVES shares, it does not burn them, so unlike settle\",\n            \"(and unlike the claim below) this instruction needs no mint authority write.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"queue_cross_chain_withdrawal_v2\",\n      \"docs\": [\n        \"Start a cross-chain withdrawal through the native withdrawal lifecycle.\",\n        \"Liquid vault USDC becomes claimable immediately; otherwise the shares enter\",\n        \"the existing keeper queue and are repriced on fulfilment. Permissionless —\",\n        \"every amount comes from the intent. Beta-only; reject-only otherwise.\"\n      ],\n      \"discriminator\": [\n        244,\n        130,\n        119,\n        7,\n        93,\n        40,\n        215,\n        135\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Rent for the receipt, the escrow and their two ATAs. NOT an authority —\",\n            \"every amount here comes from the intent, so any signer may pay.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Program-authored withdrawal intent (kind = 2). Its status is the idempotency\",\n            \"guard against queueing the same withdrawal twice.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Vault USDC account. Liquid requests transfer from here immediately;\",\n            \"illiquid requests leave it untouched for the keeper to fund later.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"cross_chain_withdrawer\",\n          \"docs\": [\n            \"this intent. Never signs and is never read as data — it exists only so the\",\n            \"receipt and escrow seeds are 1:1 with the withdrawal. Fully constrained by\",\n            \"its seeds.\"\n          ],\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_intent\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_withdrawer\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_shares_account\",\n          \"docs\": [\n            \"Destination for the queued shares.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"docs\": [\n            \"Liquid requests receive assets here immediately; queued requests leave it\",\n            \"initialized for the keeper's later `fulfill_withdrawal` transfer.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"docs\": [\n            \"Route-owned share escrow; source of the shares being queued.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"docs\": [\n            \"Required only when the vault has an active performance fee, exactly like\",\n            \"native `withdraw`.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mutable because the native-equivalent fee branch can mint fee shares.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"receive_cross_chain_withdrawal\",\n      \"docs\": [\n        \"Future withdrawal intake shape. The handler and route configuration\",\n        \"remain independently hard-disabled until the continuation is complete.\"\n      ],\n      \"discriminator\": [\n        17,\n        163,\n        45,\n        124,\n        66,\n        193,\n        202,\n        124\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  105,\n                  110,\n                  116,\n                  101,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"submission\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"submission\"\n        },\n        {\n          \"name\": \"submission_authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"inbound_share_wallet\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"instructions\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"shares_mint\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CrossChainWithdrawalArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"receive_cross_chain_withdrawal_v2\",\n      \"docs\": [\n        \"Submission-authenticated BNB dePort intake. The beta handler binds the\",\n        \"share amount to the complete balance of the canonical, submission-specific\",\n        \"authority ATA; every other build remains reject-only.\"\n      ],\n      \"discriminator\": [\n        68,\n        182,\n        91,\n        59,\n        48,\n        217,\n        250,\n        123\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  105,\n                  110,\n                  116,\n                  101,\n                  110,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.beneficiary\"\n              },\n              {\n                \"kind\": \"arg\",\n                \"path\": \"args.nonce\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"submission\"\n        },\n        {\n          \"name\": \"submission_authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"inbound_share_wallet\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"submission_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"instructions\",\n          \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"shares_mint\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"args\",\n          \"type\": {\n            \"defined\": {\n              \"name\": \"CrossChainWithdrawalArgs\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"send_cross_chain_withdrawal_return\",\n      \"docs\": [\n        \"Program-signed Solana→BNB deBridge send of the settled USDC to the\",\n        \"intent's beneficiary, honoring the 18-decimal `min_output_amount_raw`.\",\n        \"Beta-only; reject-only otherwise.\"\n      ],\n      \"discriminator\": [\n        187,\n        230,\n        11,\n        5,\n        45,\n        1,\n        122,\n        221\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"settlement_authority\",\n          \"docs\": [\n            \"Funds the deBridge native fixed fee deficit on the sender PDA.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Settled withdrawal intent (kind = 2, status `ASSETS_SETTLED`). Its status\",\n            \"is the idempotency guard against double send.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"cross_chain_sender\",\n          \"docs\": [\n            \"only when calling deBridge. The handler verifies owner and data before\",\n            \"funding it with the live native fixed fee.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  115,\n                  101,\n                  110,\n                  100,\n                  101,\n                  114\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_sender_asset_wallet\",\n          \"docs\": [\n            \"Sender-owned USDC wallet holding the settled assets; deBridge debits it.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_sender\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"set_deposit_policy\",\n      \"docs\": [\n        \"Configure the hard shared deposit capacity or pause deposits. The\",\n        \"policy applies equally to native and cross-chain deposit callers.\"\n      ],\n      \"discriminator\": [\n        56,\n        138,\n        17,\n        74,\n        222,\n        84,\n        14,\n        210\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Payer for initializing the policy on pre-upgrade vaults.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"deposit_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  100,\n                  101,\n                  112,\n                  111,\n                  115,\n                  105,\n                  116,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"capacity_assets\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"deposits_paused\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"set_fee_config\",\n      \"docs\": [\n        \"Configure or disable performance fee settings.\"\n      ],\n      \"discriminator\": [\n        221,\n        222,\n        52,\n        206,\n        114,\n        198,\n        64,\n        91\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Operator / fund authority.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"docs\": [\n            \"Token account that will receive fee shares.\",\n            \"Required when enabling fees (performance_fee_bps > 0) or when\",\n            \"mid-window settlement is needed (accrued fees must be settled\",\n            \"to the old recipient before changing config).\",\n            \"Omit when disabling with no accrued fees.\",\n            \"Mutable because it may be the destination of a MintTo CPI during mid-window settlement.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"token_program\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"performance_fee_bps\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"assessment_interval_secs\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"set_keeper_authority\",\n      \"docs\": [\n        \"Set or remove the keeper authority on a vault.\",\n        \"When set, this key can call fulfill_withdrawal in addition to fund_authority.\"\n      ],\n      \"discriminator\": [\n        29,\n        124,\n        191,\n        114,\n        184,\n        243,\n        33,\n        155\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority — only they can change keeper authority.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Payer for any reallocation rent.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"keeper_authority\",\n          \"type\": \"pubkey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"set_metadata\",\n      \"discriminator\": [\n        78,\n        157,\n        75,\n        242,\n        151,\n        20,\n        121,\n        144\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority - only they can set metadata.\"\n          ],\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"LpVault that owns the shares_mint.\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Shares mint for which we're setting metadata.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"metadata_account\",\n          \"docs\": [\n            \"Seeds: [\\\"metadata\\\", token_metadata_program_id, mint]\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  109,\n                  101,\n                  116,\n                  97,\n                  100,\n                  97,\n                  116,\n                  97\n                ]\n              },\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  11,\n                  112,\n                  101,\n                  177,\n                  227,\n                  209,\n                  124,\n                  69,\n                  56,\n                  157,\n                  82,\n                  127,\n                  107,\n                  4,\n                  195,\n                  205,\n                  88,\n                  184,\n                  108,\n                  115,\n                  26,\n                  160,\n                  253,\n                  181,\n                  73,\n                  182,\n                  209,\n                  188,\n                  3,\n                  248,\n                  41,\n                  70\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                11,\n                112,\n                101,\n                177,\n                227,\n                209,\n                124,\n                69,\n                56,\n                157,\n                82,\n                127,\n                107,\n                4,\n                195,\n                205,\n                88,\n                184,\n                108,\n                115,\n                26,\n                160,\n                253,\n                181,\n                73,\n                182,\n                209,\n                188,\n                3,\n                248,\n                41,\n                70\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"token_metadata_program\",\n          \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"rent\",\n          \"docs\": [\n            \"Rent sysvar.\"\n          ],\n          \"address\": \"SysvarRent111111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"uri\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"set_withdrawal_policy\",\n      \"docs\": [\n        \"Configure retained withdrawal fees and net withdrawal caps.\"\n      ],\n      \"discriminator\": [\n        3,\n        223,\n        67,\n        81,\n        69,\n        30,\n        203,\n        150\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority for the vault.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"payer\",\n          \"docs\": [\n            \"Payer for creating the policy account on existing vaults.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"withdrawal_fee_bps\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"hourly_withdrawal_cap_bps\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"daily_withdrawal_cap_bps\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"settle_cross_chain_withdrawal\",\n      \"docs\": [\n        \"Realize an escrowed withdrawal intent's shares into native Solana vault\",\n        \"assets at fresh NAV, honoring the intent's `min_vault_assets` floor and\",\n        \"staging the assets for the BNB return send. Beta-only; reject-only\",\n        \"otherwise.\"\n      ],\n      \"discriminator\": [\n        48,\n        72,\n        115,\n        56,\n        187,\n        76,\n        67,\n        246\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"settlement_authority\",\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_intent\",\n          \"docs\": [\n            \"Program-authored withdrawal intent (kind = 2). Bound to this route; its\",\n            \"status is the idempotency guard against double settlement.\"\n          ],\n          \"writable\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Vault's asset token account (source of the settled USDC).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"docs\": [\n            \"Route-owned share escrow; source of the shares being burned.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"maker_asset_account\",\n          \"docs\": [\n            \"Destination for the settled USDC and the give-ATA of the off-chain DLN\",\n            \"return order: the canonical ATA(settlement_authority, assets_mint). The\",\n            \"keeper that signs settle (`is_keeper_authorized`) receives the assets and\",\n            \"is the real DLN order maker (DLN requires a signing maker). No trust\",\n            \"expansion — this authority already controls vault funds. b-gva pins the\",\n            \"maker give-ATA to exactly this account.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"settlement_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"docs\": [\n            \"Required (and validated against `lp_vault.fee_recipient`) only when the\",\n            \"vault has an active performance fee; omit otherwise.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"update_admin_authorities\",\n      \"docs\": [\n        \"Rotate super_admin, create_authority, and permissioned_creation\",\n        \"atomically. Recovery instruction gated on the program's\",\n        \"BPFLoaderUpgradeable upgrade authority (NOT the current super_admin),\",\n        \"so a compromised or lost super_admin can be replaced.\"\n      ],\n      \"discriminator\": [\n        41,\n        241,\n        142,\n        184,\n        75,\n        212,\n        72,\n        171\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"signer\",\n          \"docs\": [\n            \"Signer rotating the authorities. MUST be the program's\",\n            \"BPFLoaderUpgradeable upgrade authority (proven by the constraints on\",\n            \"`program` + `program_data` below).\"\n          ],\n          \"signer\": true\n        },\n        {\n          \"name\": \"global_config\",\n          \"docs\": [\n            \"The global config account being rotated. Unique in the program.\",\n            \"Deliberately no `has_one = super_admin`: see the struct docs.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  103,\n                  108,\n                  111,\n                  98,\n                  97,\n                  108,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"program\",\n          \"docs\": [\n            \"This program's own account; ties `program_data` to this program so the\",\n            \"upgrade-authority check below cannot be satisfied with an unrelated\",\n            \"program's ProgramData.\"\n          ],\n          \"address\": \"GaMmanX9i4jGmqDZZD2tbD6B2v9p21btenPneMXnTczV\"\n        },\n        {\n          \"name\": \"program_data\",\n          \"docs\": [\n            \"ProgramData account holding the program's upgrade authority. Gate: the\",\n            \"signer must equal the upgrade authority. `programdata_address()` returns\",\n            \"`Ok(None)` for a non-upgradeable load and a revoked authority is `None`,\",\n            \"so a `None` on either side fails closed.\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_super_admin\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"new_create_authority\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"new_permissioned_creation\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_cross_chain_config\",\n      \"discriminator\": [\n        79,\n        141,\n        137,\n        119,\n        118,\n        242,\n        249,\n        118\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"signer\": true,\n          \"relations\": [\n            \"cross_chain_config\"\n          ]\n        },\n        {\n          \"name\": \"cross_chain_config\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_admin\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"deposits_paused\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_global_config\",\n      \"discriminator\": [\n        164,\n        84,\n        130,\n        189,\n        111,\n        58,\n        250,\n        200\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"super_admin\",\n          \"docs\": [\n            \"The signer must be the global_config super_admin.\"\n          ],\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"global_config\"\n          ]\n        },\n        {\n          \"name\": \"global_config\",\n          \"docs\": [\n            \"The global config account. Unique in the program.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  103,\n                  108,\n                  111,\n                  98,\n                  97,\n                  108,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_create_authority\",\n          \"type\": \"pubkey\"\n        },\n        {\n          \"name\": \"is_creation_permissioned\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_nav\",\n      \"docs\": [\n        \"Update the vault's NAV. Called by fund_authority (operator).\"\n      ],\n      \"discriminator\": [\n        56,\n        16,\n        234,\n        109,\n        155,\n        165,\n        5,\n        0\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority - only they can update NAV.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_nav\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_nav_checked\",\n      \"docs\": [\n        \"Atomically update NAV only when the vault still matches the state read\",\n        \"by the caller. This prevents deposits, withdrawals, fee assessments, or\",\n        \"another NAV publish from invalidating an off-chain NAV calculation\",\n        \"between preflight and transaction execution.\"\n      ],\n      \"discriminator\": [\n        2,\n        235,\n        178,\n        75,\n        223,\n        26,\n        72,\n        144\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority - only they can update NAV.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_total_shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav_updated_at\",\n          \"type\": \"i64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_nav_checked_v2\",\n      \"docs\": [\n        \"Race-safe NAV update. The caller supplies the complete vault state used\",\n        \"for its calculation, including pending-withdrawal value. The program\",\n        \"compares that tuple against the live account before writing.\"\n      ],\n      \"discriminator\": [\n        38,\n        73,\n        237,\n        91,\n        112,\n        231,\n        73,\n        41\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority - only they can update NAV.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true,\n          \"relations\": [\n            \"nav_update_policy\"\n          ]\n        },\n        {\n          \"name\": \"nav_update_policy\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  110,\n                  97,\n                  118,\n                  95,\n                  117,\n                  112,\n                  100,\n                  97,\n                  116,\n                  101,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"new_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_total_shares\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"expected_nav_updated_at\",\n          \"type\": \"i64\"\n        },\n        {\n          \"name\": \"expected_pending_withdrawal_value\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"update_nav_max_staleness\",\n      \"docs\": [\n        \"Update the NAV max staleness window on a vault.\"\n      ],\n      \"discriminator\": [\n        212,\n        225,\n        120,\n        109,\n        83,\n        96,\n        40,\n        17\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"docs\": [\n            \"Fund authority — only they can change vault config.\"\n          ],\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"writable\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"nav_max_staleness\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"upsert_cross_chain_vault_route\",\n      \"discriminator\": [\n        10,\n        80,\n        62,\n        8,\n        145,\n        215,\n        7,\n        31\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"admin\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"cross_chain_config\"\n          ]\n        },\n        {\n          \"name\": \"cross_chain_config\",\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  99,\n                  111,\n                  110,\n                  102,\n                  105,\n                  103\n                ]\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"cross_chain_vault_route\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  99,\n                  114,\n                  111,\n                  115,\n                  115,\n                  95,\n                  99,\n                  104,\n                  97,\n                  105,\n                  110,\n                  95,\n                  114,\n                  111,\n                  117,\n                  116,\n                  101\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"assets_mint\"\n        },\n        {\n          \"name\": \"shares_mint\"\n        },\n        {\n          \"name\": \"share_escrow\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"cross_chain_vault_route\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"bnb_usdc\",\n          \"type\": {\n            \"array\": [\n              \"u8\",\n              20\n            ]\n          }\n        },\n        {\n          \"name\": \"bnb_usdt\",\n          \"type\": {\n            \"array\": [\n              \"u8\",\n              20\n            ]\n          }\n        },\n        {\n          \"name\": \"deposits_enabled\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"withdrawals_enabled\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw\",\n      \"docs\": [\n        \"Withdraw shares for assets.\",\n        \"If vault has sufficient liquidity: instant withdrawal.\",\n        \"If illiquid: creates WithdrawReceipt, shares go to pending account.\"\n      ],\n      \"discriminator\": [\n        183,\n        18,\n        70,\n        156,\n        148,\n        109,\n        161,\n        34\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"user\",\n          \"docs\": [\n            \"User withdrawing from the vault.\"\n          ],\n          \"writable\": true,\n          \"signer\": true\n        },\n        {\n          \"name\": \"lp_vault\",\n          \"docs\": [\n            \"LpVault to withdraw from.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"withdrawal_policy\"\n          ]\n        },\n        {\n          \"name\": \"withdrawal_policy\",\n          \"docs\": [\n            \"Withdrawal policy for retained asset fees and net withdrawal caps.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  97,\n                  108,\n                  95,\n                  112,\n                  111,\n                  108,\n                  105,\n                  99,\n                  121\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"assets_account\",\n          \"docs\": [\n            \"Token account for vault assets.\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"user_share_ata\",\n          \"docs\": [\n            \"User's share token account (source of shares).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"docs\": [\n            \"Mint of the vault assets.\"\n          ],\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"shares_mint\",\n          \"docs\": [\n            \"Mint for vault shares (mutable for fee mint CPI).\"\n          ],\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"fee_recipient_account\",\n          \"docs\": [\n            \"Token account that receives fee shares on withdrawal.\",\n            \"Required when `has_fee_config()` is true; omit otherwise.\",\n            \"Mutable because it is the destination of a MintTo CPI.\"\n          ],\n          \"writable\": true,\n          \"optional\": true\n        },\n        {\n          \"name\": \"withdraw_escrow\",\n          \"docs\": [\n            \"Withdraw escrow - holds assets and shares until user claims.\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  101,\n                  115,\n                  99,\n                  114,\n                  111,\n                  119\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"escrow_assets_account\",\n          \"docs\": [\n            \"Escrow's asset token account (holds USDC for user to claim).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"escrow_shares_account\",\n          \"docs\": [\n            \"Escrow's share token account (holds shares until burned on claim).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"withdraw_escrow\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"shares_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"withdraw_receipt\",\n          \"docs\": [\n            \"Withdraw receipt - tracks pending and claimable amounts (accumulates).\"\n          ],\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"const\",\n                \"value\": [\n                  119,\n                  105,\n                  116,\n                  104,\n                  100,\n                  114,\n                  97,\n                  119,\n                  95,\n                  114,\n                  101,\n                  99,\n                  101,\n                  105,\n                  112,\n                  116\n                ]\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"user\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"lp_vault\"\n              }\n            ]\n          }\n        },\n        {\n          \"name\": \"system_program\",\n          \"docs\": [\n            \"System program.\"\n          ],\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\",\n          \"docs\": [\n            \"Token program.\"\n          ]\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"docs\": [\n            \"Associated token program.\"\n          ],\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"shares_amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdraw_assets\",\n      \"docs\": [\n        \"Withdraw assets from vault to operator wallet for investment.\"\n      ],\n      \"discriminator\": [\n        202,\n        105,\n        54,\n        155,\n        56,\n        33,\n        207,\n        254\n      ],\n      \"accounts\": [\n        {\n          \"name\": \"fund_authority\",\n          \"writable\": true,\n          \"signer\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"lp_vault\"\n        },\n        {\n          \"name\": \"assets_account\",\n          \"writable\": true,\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"authority_asset_ata\",\n          \"writable\": true,\n          \"pda\": {\n            \"seeds\": [\n              {\n                \"kind\": \"account\",\n                \"path\": \"fund_authority\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"token_program\"\n              },\n              {\n                \"kind\": \"account\",\n                \"path\": \"assets_mint\"\n              }\n            ],\n            \"program\": {\n              \"kind\": \"const\",\n              \"value\": [\n                140,\n                151,\n                37,\n                143,\n                78,\n                36,\n                137,\n                241,\n                187,\n                61,\n                16,\n                41,\n                20,\n                142,\n                13,\n                131,\n                11,\n                90,\n                19,\n                153,\n                218,\n                255,\n                16,\n                132,\n                4,\n                142,\n                123,\n                216,\n                219,\n                233,\n                248,\n                89\n              ]\n            }\n          }\n        },\n        {\n          \"name\": \"assets_mint\",\n          \"relations\": [\n            \"lp_vault\"\n          ]\n        },\n        {\n          \"name\": \"system_program\",\n          \"address\": \"11111111111111111111111111111111\"\n        },\n        {\n          \"name\": \"token_program\"\n        },\n        {\n          \"name\": \"associated_token_program\",\n          \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"CrossChainConfig\",\n      \"discriminator\": [\n        74,\n        146,\n        238,\n        67,\n        67,\n        21,\n        3,\n        218\n      ]\n    },\n    {\n      \"name\": \"CrossChainIntent\",\n      \"discriminator\": [\n        37,\n        183,\n        58,\n        87,\n        62,\n        179,\n        16,\n        114\n      ]\n    },\n    {\n      \"name\": \"CrossChainVaultRoute\",\n      \"discriminator\": [\n        48,\n        216,\n        186,\n        31,\n        186,\n        216,\n        19,\n        166\n      ]\n    },\n    {\n      \"name\": \"DepositPolicy\",\n      \"discriminator\": [\n        159,\n        243,\n        65,\n        242,\n        81,\n        27,\n        41,\n        167\n      ]\n    },\n    {\n      \"name\": \"DepositReceipt\",\n      \"discriminator\": [\n        64,\n        175,\n        24,\n        183,\n        138,\n        109,\n        70,\n        78\n      ]\n    },\n    {\n      \"name\": \"GlobalConfig\",\n      \"discriminator\": [\n        149,\n        8,\n        156,\n        202,\n        160,\n        252,\n        176,\n        217\n      ]\n    },\n    {\n      \"name\": \"LpVault\",\n      \"discriminator\": [\n        189,\n        45,\n        167,\n        23,\n        91,\n        118,\n        105,\n        190\n      ]\n    },\n    {\n      \"name\": \"NavUpdatePolicy\",\n      \"discriminator\": [\n        120,\n        129,\n        130,\n        73,\n        109,\n        226,\n        91,\n        12\n      ]\n    },\n    {\n      \"name\": \"WithdrawEscrow\",\n      \"discriminator\": [\n        161,\n        63,\n        221,\n        55,\n        116,\n        204,\n        131,\n        11\n      ]\n    },\n    {\n      \"name\": \"WithdrawReceipt\",\n      \"discriminator\": [\n        132,\n        238,\n        44,\n        182,\n        207,\n        9,\n        124,\n        140\n      ]\n    },\n    {\n      \"name\": \"WithdrawalPolicy\",\n      \"discriminator\": [\n        52,\n        231,\n        68,\n        59,\n        247,\n        250,\n        119,\n        244\n      ]\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"AdminAuthoritiesUpdated\",\n      \"discriminator\": [\n        1,\n        164,\n        87,\n        62,\n        157,\n        85,\n        1,\n        113\n      ]\n    },\n    {\n      \"name\": \"CrossChainConfigUpdated\",\n      \"discriminator\": [\n        50,\n        228,\n        95,\n        17,\n        86,\n        48,\n        61,\n        70\n      ]\n    },\n    {\n      \"name\": \"CrossChainDepositCompleted\",\n      \"discriminator\": [\n        45,\n        209,\n        209,\n        207,\n        158,\n        87,\n        232,\n        168\n      ]\n    },\n    {\n      \"name\": \"CrossChainDepositDestinationAuthenticated\",\n      \"discriminator\": [\n        214,\n        108,\n        125,\n        178,\n        219,\n        22,\n        101,\n        214\n      ]\n    },\n    {\n      \"name\": \"CrossChainIntentReplayAccepted\",\n      \"discriminator\": [\n        221,\n        50,\n        69,\n        6,\n        52,\n        30,\n        90,\n        159\n      ]\n    },\n    {\n      \"name\": \"CrossChainVaultRouteUpdated\",\n      \"discriminator\": [\n        181,\n        72,\n        59,\n        8,\n        36,\n        234,\n        89,\n        88\n      ]\n    },\n    {\n      \"name\": \"CrossChainWithdrawalDeliverySurplus\",\n      \"discriminator\": [\n        213,\n        204,\n        131,\n        208,\n        81,\n        144,\n        99,\n        235\n      ]\n    },\n    {\n      \"name\": \"CrossChainWithdrawalEscrowed\",\n      \"discriminator\": [\n        72,\n        146,\n        194,\n        25,\n        142,\n        51,\n        182,\n        26\n      ]\n    },\n    {\n      \"name\": \"CrossChainWithdrawalReturnSent\",\n      \"discriminator\": [\n        237,\n        14,\n        156,\n        162,\n        211,\n        80,\n        105,\n        153\n      ]\n    },\n    {\n      \"name\": \"CrossChainWithdrawalSettled\",\n      \"discriminator\": [\n        96,\n        92,\n        225,\n        1,\n        2,\n        51,\n        96,\n        26\n      ]\n    },\n    {\n      \"name\": \"DepositPolicyUpdated\",\n      \"discriminator\": [\n        190,\n        38,\n        79,\n        160,\n        80,\n        143,\n        90,\n        255\n      ]\n    },\n    {\n      \"name\": \"FeeConfigUpdated\",\n      \"discriminator\": [\n        45,\n        50,\n        42,\n        173,\n        193,\n        67,\n        52,\n        244\n      ]\n    },\n    {\n      \"name\": \"FeesAssessed\",\n      \"discriminator\": [\n        210,\n        177,\n        59,\n        191,\n        116,\n        251,\n        25,\n        131\n      ]\n    },\n    {\n      \"name\": \"NavEmergencyOverrideApplied\",\n      \"discriminator\": [\n        106,\n        20,\n        168,\n        70,\n        152,\n        131,\n        110,\n        219\n      ]\n    },\n    {\n      \"name\": \"NavUpdatePolicyInitialized\",\n      \"discriminator\": [\n        67,\n        240,\n        192,\n        111,\n        90,\n        46,\n        28,\n        18\n      ]\n    },\n    {\n      \"name\": \"NavUpdateWindowApplied\",\n      \"discriminator\": [\n        215,\n        116,\n        21,\n        53,\n        41,\n        234,\n        250,\n        73\n      ]\n    },\n    {\n      \"name\": \"WithdrawalFeeRetained\",\n      \"discriminator\": [\n        105,\n        104,\n        190,\n        198,\n        168,\n        231,\n        18,\n        182\n      ]\n    },\n    {\n      \"name\": \"WithdrawalFeesSettled\",\n      \"discriminator\": [\n        106,\n        253,\n        199,\n        177,\n        101,\n        104,\n        38,\n        219\n      ]\n    },\n    {\n      \"name\": \"WithdrawalPolicyUpdated\",\n      \"discriminator\": [\n        252,\n        196,\n        144,\n        224,\n        210,\n        3,\n        71,\n        66\n      ]\n    }\n  ],\n  \"errors\": [\n    {\n      \"code\": 6000,\n      \"name\": \"ArithmeticError\",\n      \"msg\": \"Arithmetic error!\"\n    },\n    {\n      \"code\": 6001,\n      \"name\": \"ObsoleteVaultData\",\n      \"msg\": \"LpVault data is outdated!\"\n    },\n    {\n      \"code\": 6002,\n      \"name\": \"StaleNav\",\n      \"msg\": \"NAV is stale - operator must update NAV before this operation!\"\n    },\n    {\n      \"code\": 6003,\n      \"name\": \"Unauthorized\",\n      \"msg\": \"Signer is not an authority!\"\n    },\n    {\n      \"code\": 6004,\n      \"name\": \"InvalidMint\",\n      \"msg\": \"Invalid mint extension!\"\n    },\n    {\n      \"code\": 6005,\n      \"name\": \"NameTooLong\",\n      \"msg\": \"LP Vault name is too long!\"\n    },\n    {\n      \"code\": 6006,\n      \"name\": \"BlockedDeposit\",\n      \"msg\": \"Deposits are blocked - NAV is zero!\"\n    },\n    {\n      \"code\": 6007,\n      \"name\": \"InsufficientLiquidity\",\n      \"msg\": \"Insufficient liquid assets for instant withdrawal!\"\n    },\n    {\n      \"code\": 6008,\n      \"name\": \"InvalidShareAmount\",\n      \"msg\": \"Invalid share amount!\"\n    },\n    {\n      \"code\": 6009,\n      \"name\": \"InvalidDepositAmount\",\n      \"msg\": \"Invalid deposit amount!\"\n    },\n    {\n      \"code\": 6010,\n      \"name\": \"NoPendingWithdrawal\",\n      \"msg\": \"No pending withdrawal to fulfill!\"\n    },\n    {\n      \"code\": 6011,\n      \"name\": \"NoClaimableAssets\",\n      \"msg\": \"No claimable assets to withdraw!\"\n    },\n    {\n      \"code\": 6012,\n      \"name\": \"FeeRecipientNotConfigured\",\n      \"msg\": \"Fee recipient is not configured!\"\n    },\n    {\n      \"code\": 6013,\n      \"name\": \"InvalidPerformanceFeeBps\",\n      \"msg\": \"Invalid performance fee - must be <= MAX_PERFORMANCE_FEE_BPS!\"\n    },\n    {\n      \"code\": 6014,\n      \"name\": \"InvalidFeeRecipient\",\n      \"msg\": \"Invalid fee recipient account!\"\n    },\n    {\n      \"code\": 6015,\n      \"name\": \"AssessmentTooEarly\",\n      \"msg\": \"Assessment interval has not elapsed!\"\n    },\n    {\n      \"code\": 6016,\n      \"name\": \"InvalidAssessmentInterval\",\n      \"msg\": \"Invalid assessment interval!\"\n    },\n    {\n      \"code\": 6017,\n      \"name\": \"NavUpdateTooLarge\",\n      \"msg\": \"NAV update would change share price by more than the allowed maximum!\"\n    },\n    {\n      \"code\": 6018,\n      \"name\": \"InvalidWithdrawalFeeBps\",\n      \"msg\": \"Invalid withdrawal fee - must be <= MAX_WITHDRAWAL_FEE_BPS!\"\n    },\n    {\n      \"code\": 6019,\n      \"name\": \"InvalidWithdrawalCapBps\",\n      \"msg\": \"Invalid withdrawal cap - must be <= 10000 bps!\"\n    },\n    {\n      \"code\": 6020,\n      \"name\": \"HourlyWithdrawalCapExceeded\",\n      \"msg\": \"Withdrawal exceeds hourly vault capacity!\"\n    },\n    {\n      \"code\": 6021,\n      \"name\": \"DailyWithdrawalCapExceeded\",\n      \"msg\": \"Withdrawal exceeds daily vault capacity!\"\n    },\n    {\n      \"code\": 6022,\n      \"name\": \"InvalidWithdrawalPolicy\",\n      \"msg\": \"Invalid withdrawal policy account!\"\n    },\n    {\n      \"code\": 6023,\n      \"name\": \"InvalidAuthority\",\n      \"msg\": \"New authority cannot be the default (all-zeros) pubkey!\"\n    },\n    {\n      \"code\": 6024,\n      \"name\": \"NavUpdateStateMismatch\",\n      \"msg\": \"Vault NAV state changed since the expected state was read!\"\n    },\n    {\n      \"code\": 6025,\n      \"name\": \"InvalidDepositPolicy\",\n      \"msg\": \"Invalid deposit policy account!\"\n    },\n    {\n      \"code\": 6026,\n      \"name\": \"DepositsPaused\",\n      \"msg\": \"Deposits are paused for this vault!\"\n    },\n    {\n      \"code\": 6027,\n      \"name\": \"DepositCapacityExceeded\",\n      \"msg\": \"Deposit would exceed the vault capacity!\"\n    },\n    {\n      \"code\": 6028,\n      \"name\": \"InvalidCrossChainRoute\",\n      \"msg\": \"Invalid cross-chain vault route\"\n    },\n    {\n      \"code\": 6029,\n      \"name\": \"CrossChainRouteDisabled\",\n      \"msg\": \"Cross-chain vault route is disabled\"\n    },\n    {\n      \"code\": 6030,\n      \"name\": \"InvalidEvmAddress\",\n      \"msg\": \"Invalid BNB address\"\n    },\n    {\n      \"code\": 6031,\n      \"name\": \"CrossChainTokenNotAllowed\",\n      \"msg\": \"BNB token is not allowlisted\"\n    },\n    {\n      \"code\": 6032,\n      \"name\": \"CrossChainIntentExpired\",\n      \"msg\": \"Cross-chain intent deadline has expired\"\n    },\n    {\n      \"code\": 6033,\n      \"name\": \"InvalidCrossChainAmount\",\n      \"msg\": \"Invalid cross-chain amount\"\n    },\n    {\n      \"code\": 6034,\n      \"name\": \"CrossChainMinimumOutputNotMet\",\n      \"msg\": \"Cross-chain minimum output cannot be met\"\n    },\n    {\n      \"code\": 6035,\n      \"name\": \"CrossChainIntentReplayConflict\",\n      \"msg\": \"Conflicting replay of an existing cross-chain intent\"\n    },\n    {\n      \"code\": 6036,\n      \"name\": \"InvalidCrossChainIntentState\",\n      \"msg\": \"Invalid cross-chain intent state\"\n    },\n    {\n      \"code\": 6037,\n      \"name\": \"InvalidDebridgeCaller\",\n      \"msg\": \"Caller is not the authenticated deBridge execution program\"\n    },\n    {\n      \"code\": 6038,\n      \"name\": \"InvalidDebridgeMetadata\",\n      \"msg\": \"Invalid deBridge execution metadata account\"\n    },\n    {\n      \"code\": 6039,\n      \"name\": \"InvalidDebridgeSubmissionAuthority\",\n      \"msg\": \"Invalid deBridge submission authority\"\n    },\n    {\n      \"code\": 6040,\n      \"name\": \"InvalidDebridgeDeliveryBalance\",\n      \"msg\": \"Invalid deBridge delivery balance invariant\"\n    },\n    {\n      \"code\": 6041,\n      \"name\": \"InvalidDebridgeSendAccounts\",\n      \"msg\": \"Invalid deBridge send account boundary\"\n    },\n    {\n      \"code\": 6042,\n      \"name\": \"CrossChainExternalBindingUnavailable\",\n      \"msg\": \"Cross-chain external protocol binding is not activated\"\n    },\n    {\n      \"code\": 6043,\n      \"name\": \"CrossChainConfigurationRequiresPause\",\n      \"msg\": \"Cross-chain route configuration requires deposits to be paused\"\n    },\n    {\n      \"code\": 6044,\n      \"name\": \"InvalidDebridgeOutboundBalance\",\n      \"msg\": \"deBridge did not debit the exact outbound share amount\"\n    },\n    {\n      \"code\": 6045,\n      \"name\": \"LegacyNavUpdateDisabled\",\n      \"msg\": \"Legacy NAV update instructions are disabled; use update_nav_checked_v2\"\n    },\n    {\n      \"code\": 6046,\n      \"name\": \"ResidualNavRequiresReconciliation\",\n      \"msg\": \"A zero-share vault must have zero NAV before accepting deposits\"\n    },\n    {\n      \"code\": 6047,\n      \"name\": \"ResidualAssetsRequireReconciliation\",\n      \"msg\": \"A zero-share vault must have no residual custody assets before accepting deposits\"\n    },\n    {\n      \"code\": 6048,\n      \"name\": \"InvalidNavUpdatePolicy\",\n      \"msg\": \"Invalid NAV update policy account\"\n    },\n    {\n      \"code\": 6049,\n      \"name\": \"NavWindowAnchorZero\",\n      \"msg\": \"A zero-price NAV window requires the separately governed emergency override\"\n    },\n    {\n      \"code\": 6050,\n      \"name\": \"NavUpdateWindowClockInvalid\",\n      \"msg\": \"The NAV update window timestamp is ahead of the current clock\"\n    },\n    {\n      \"code\": 6051,\n      \"name\": \"NavEmergencyAuthoritiesNotDistinct\",\n      \"msg\": \"Emergency NAV override authorities must be distinct\"\n    },\n    {\n      \"code\": 6052,\n      \"name\": \"NavUpdateRequiresZeroNavWhenNoShares\",\n      \"msg\": \"A vault with no outstanding shares must keep NAV at zero\"\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"AdminAuthoritiesUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"old_super_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"new_super_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_create_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"new_create_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_permissioned_creation\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"new_permissioned_creation\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainConfig\",\n      \"docs\": [\n        \"Program-wide administration for Gamma-owned cross-chain entrypoints.\",\n        \"Initialization is upgrade-authority gated and always starts paused.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposits_paused\",\n            \"docs\": [\n              \"Global deposit-only circuit breaker. Withdrawal intake has its own hard\",\n              \"executable gate and remains unavailable in this release.\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainConfigUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"old_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"new_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposits_paused\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainDepositArgs\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"beneficiary\",\n            \"docs\": [\n              \"BNB recipient of the managed deAsset. This is order payload data; DLN's\",\n              \"public Solana metadata does not prove it is the source transaction maker.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"source_token\",\n            \"docs\": [\n              \"Declared hook payload value only. The published ExtcallMeta layout does\",\n              \"not expose the DLN CreatedOrder giveOffer, so this field cannot prove\",\n              \"which BNB token funded the order.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"deposit_amount\",\n            \"docs\": [\n              \"Declared destination take-token tranche. This is not the BNB\",\n              \"CreatedOrder give amount, which may use different decimals and terms.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_bnb_shares\",\n            \"docs\": [\n              \"Minimum shares after deBridge transfer fees.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deadline\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainDepositCompleted\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"native_sender\",\n            \"docs\": [\n              \"Gamma-derived signer recorded by deBridge as `nativeSender`.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"beneficiary\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"deposited_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bridged_shares\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainDepositDestinationAuthenticated\",\n      \"docs\": [\n        \"Additive audit event for the exact destination-delivery boundary. The\",\n        \"existing `CrossChainDepositCompleted` event remains byte-for-byte stable.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"docs\": [\n              \"DLN's executor-owned ExtcallMeta substituted for the active order.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"executor\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"extcall_authority\",\n            \"docs\": [\n              \"DLN executor-provided signer that owns the delivered-asset token account.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"extcall_wallet\",\n            \"docs\": [\n              \"Executor-selected token account, bound to ExtcallAuthority and\",\n              \"assets_mint by the instruction's Anchor account constraints.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"assets_mint\",\n            \"docs\": [\n              \"Exact native vault asset mint received by Gamma (USDC for gmSTBL beta).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"declared_source_token\",\n            \"docs\": [\n              \"Untrusted hook label retained for off-chain source-policy monitoring.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"source_policy_enforced_on_chain\",\n            \"docs\": [\n              \"Always false in this implementation: BNB source terms are not decoded\",\n              \"or represented as authenticated by the Solana program.\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"source_policy_required_off_chain\",\n            \"docs\": [\n              \"Always true: quote, UX, observation, and reconciliation must\",\n              \"authenticate BNB give-chain/token/amount outside this program.\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"delivered_assets\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainIntent\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"version\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"kind\",\n            \"docs\": [\n              \"1 = deposit, 2 = withdrawal.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"status\",\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"route\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"docs\": [\n              \"Opaque deBridge-owned account used as the replay key.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"beneficiary\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"source_or_output_token\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"input_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"minimum_output\",\n            \"docs\": [\n              \"Deposit intents store the six-decimal minimum shares here; withdrawal\",\n              \"intents store the six-decimal minimum native Solana vault assets here.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_output_amount_raw\",\n            \"docs\": [\n              \"Authenticated minimum final BNB USDC/USDT output for withdrawals,\",\n              \"encoded as a fixed-width unsigned U256 in big-endian order.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"actual_output\",\n            \"docs\": [\n              \"Actual native share output for the implemented deposit path.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deadline\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"created_at\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"updated_at\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainIntentReplayAccepted\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"status\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainVaultRoute\",\n      \"docs\": [\n        \"Per-vault BNB route owned directly by the Gamma program.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"assets_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"shares_mint\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"share_escrow\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bnb_usdc\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"bnb_usdt\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"deposits_enabled\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"withdrawals_enabled\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"escrowed_shares\",\n            \"docs\": [\n              \"Native shares received from dePort but not yet consumed by a bound\",\n              \"Gamma-withdrawal/DLN-return implementation.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainVaultRouteUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"route\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"deposits_enabled\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"withdrawals_enabled\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainWithdrawalArgs\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"beneficiary\",\n            \"docs\": [\n              \"Authenticated external-call payload and final BNB recipient.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"output_token\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"shares_amount\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_vault_assets\",\n            \"docs\": [\n              \"Minimum six-decimal native Solana vault assets after Gamma fees.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_output_amount_raw\",\n            \"docs\": [\n              \"Minimum final BNB output in 18-decimal raw units, fixed-width U256 BE.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"deadline\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainWithdrawalDeliverySurplus\",\n      \"docs\": [\n        \"Emitted only when the inbound share wallet held more than the declared\",\n        \"tranche at withdrawal intake. Gamma escrows exactly the declared tranche and\",\n        \"leaves the remainder in the provider-owned wallet, so this is the signal that\",\n        \"something was left behind.\",\n        \"\",\n        \"`surplus_shares` is an aggregate balance difference and nothing more, and no\",\n        \"value of it is safe by inspection. The program cannot tell an unrelated\",\n        \"transfer into a public token account from the BNB side having delivered more\",\n        \"than the hook declared, and — because it cannot measure provider delivery at\",\n        \"all — it also cannot rule out the opposite: an under-delivery masked by an\",\n        \"unrelated balance, where the declared tranche was escrowed partly out of\",\n        \"someone else's shares. An unrelated balance is only harmless if full delivery\",\n        \"independently occurred, which is exactly what Gamma cannot prove.\",\n        \"Reconciliation must alert on EVERY occurrence and classify it against\",\n        \"authenticated off-chain delivery evidence.\",\n        \"\",\n        \"Equally important: the ABSENCE of this event proves nothing. Emission requires a\",\n        \"non-zero surplus, so an under-delivery exactly offset by an unrelated balance\",\n        \"emits nothing at all. This is a \\\"something was left behind\\\" signal, never a\",\n        \"funding-completeness signal.\",\n        \"\",\n        \"Recovery of a surplus is unproven: the pinned deBridge SDK exposes no close or\",\n        \"recovery operation for this wallet, and because intake now succeeds rather than\",\n        \"failing, whatever the provider would have done on external-call failure is not\",\n        \"exercised. Any non-zero surplus needs investigation.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"inbound_share_wallet\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"declared_shares\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"surplus_shares\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainWithdrawalEscrowed\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"beneficiary\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"shares\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_vault_assets\",\n            \"docs\": [\n              \"Six-decimal native Solana vault-asset floor.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_output_amount_raw\",\n            \"docs\": [\n              \"Unsigned U256 big-endian final BNB USDC/USDT floor (18 decimals).\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainWithdrawalReturnSent\",\n      \"docs\": [\n        \"Emitted when the settled Solana USDC has been dispatched to the BNB\",\n        \"beneficiary through deBridge, completing the withdrawal reverse leg.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"native_sender\",\n            \"docs\": [\n              \"Gamma-derived signer recorded by deBridge as `nativeSender`.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"beneficiary\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"returned_assets\",\n            \"docs\": [\n              \"Six-decimal native Solana USDC dispatched to deBridge.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"min_output_amount_raw\",\n            \"docs\": [\n              \"Authenticated 18-decimal BNB output floor honored by the send.\"\n            ],\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                32\n              ]\n            }\n          },\n          {\n            \"name\": \"nonce\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"CrossChainWithdrawalSettled\",\n      \"docs\": [\n        \"Emitted when a withdrawal intent's escrowed shares are realized into native\",\n        \"Solana vault assets at fresh NAV and staged for the BNB return send.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"intent\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"replay_key\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"beneficiary\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                20\n              ]\n            }\n          },\n          {\n            \"name\": \"maker\",\n            \"docs\": [\n              \"Authority that received the settled USDC and is the off-chain DLN return\",\n              \"order maker (the keeper that signed settle).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"maker_asset_account\",\n            \"docs\": [\n              \"The maker's give-ATA the settled USDC landed in: ATA(maker, assets_mint).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"shares_consumed\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"gross_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_assets\",\n            \"docs\": [\n              \"Base-asset fee retained in the vault for remaining LPs.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"net_assets\",\n            \"docs\": [\n              \"Six-decimal native Solana vault assets staged for the return send.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_shares_minted\",\n            \"docs\": [\n              \"Prorated performance-fee shares minted to the fee recipient (dilution).\"\n            ],\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositPolicy\",\n      \"docs\": [\n        \"Per-vault deposit controls shared by every deposit source, including\",\n        \"Solana-native users and cross-chain adapters.\",\n        \"\",\n        \"This is intentionally a separate PDA rather than a field on `LpVault` so\",\n        \"existing vault accounts do not require a layout migration. Existing vaults\",\n        \"fail closed after the program upgrade until their policy PDA is initialized\",\n        \"by the fund authority.\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"lp_vault\",\n            \"docs\": [\n              \"Vault this policy belongs to.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"capacity_assets\",\n            \"docs\": [\n              \"Maximum post-deposit NAV in the vault asset's base units.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"deposits_paused\",\n            \"docs\": [\n              \"Emergency switch for deposits. Withdrawals do not consult this field.\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositPolicyUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_capacity_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_capacity_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"old_deposits_paused\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"new_deposits_paused\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"DepositReceipt\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA bump seed.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeeConfigUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_fee_recipient\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"new_fee_recipient\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_fee_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"new_fee_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"assessment_interval_secs\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"FeesAssessed\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"profit_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_shares_minted\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_pps\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"checkpoint_pps\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"GlobalConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"super_admin\",\n            \"docs\": [\n              \"Key with the ability to update the GlobalConfig. Rotatable only via\",\n              \"`update_admin_authorities` (gated on the program upgrade authority).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"permissioned_creation\",\n            \"docs\": [\n              \"When true InitializeLpVault requires create_authority to be a signer\"\n            ],\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"create_authority\",\n            \"docs\": [\n              \"The key with authority to call `InitializeLpVault`\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"Bump for increased efficiency.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"LpVault\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"assets_account\",\n            \"docs\": [\n              \"USDC TokenAccount where users deposit, funds agent operations.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pending_shares_account\",\n            \"docs\": [\n              \"TokenAccount where shares are held during queued (illiquid) withdrawals.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"shares_mint\",\n            \"docs\": [\n              \"Derived mint (created on initialize) that represents LP tokens or shares.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"assets_mint\",\n            \"docs\": [\n              \"Mint corresponding to the asset, most of the time USDC.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fund_authority\",\n            \"docs\": [\n              \"Pubkey authorized to withdraw assets from assets_account and update NAV.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"nav\",\n            \"docs\": [\n              \"Current Net Asset Value (total vault value in asset decimals).\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"total_shares\",\n            \"docs\": [\n              \"Total shares outstanding (cached for efficiency). May temporarily diverge\",\n              \"from shares_mint.supply during the escrow withdrawal flow (between\",\n              \"fulfill_withdrawal and complete_withdrawal).\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"nav_updated_at\",\n            \"docs\": [\n              \"Timestamp for when NAV was last updated.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"nav_max_staleness\",\n            \"docs\": [\n              \"Maximum NAV staleness for user operations (in seconds).\",\n              \"Deposits and withdrawals fail if NAV is older than this.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump, stored for CU saving purposes.\"\n            ],\n            \"type\": \"u8\"\n          },\n          {\n            \"name\": \"vault_name\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"pending_withdrawal_value\",\n            \"docs\": [\n              \"Total value of pending withdrawals awaiting liquidity.\",\n              \"When a withdrawal cannot be fulfilled instantly due to insufficient\",\n              \"liquid assets, the value is tracked here. This is approximate — the\",\n              \"value recorded at withdrawal time may differ from the value at\",\n              \"fulfillment time (recomputed at current NAV). Used for operator\",\n              \"visibility only, not for critical calculations.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_recipient\",\n            \"docs\": [\n              \"Shares token account that receives fee shares. Pubkey::default() = disabled.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"performance_fee_bps\",\n            \"docs\": [\n              \"Performance fee rate in basis points (2000 = 20%). 0 = disabled.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"assessment_interval_secs\",\n            \"docs\": [\n              \"How often scheduled fees are assessed (seconds). E.g., 86400 = 24h.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"last_assessment_timestamp\",\n            \"docs\": [\n              \"Unix timestamp of last fee event (scheduled or withdrawal-triggered).\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"price_per_share_at_last_assessment\",\n            \"docs\": [\n              \"PPS at last fee event, scaled by PRICE_SCALE. High-water mark for fees.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"keeper_authority\",\n            \"docs\": [\n              \"Optional keeper authority. When set (non-default), this key can call\",\n              \"fulfill_withdrawal in addition to fund_authority. Allows the keeper\",\n              \"process to use a separate key from the agent/fund_authority.\",\n              \"Pubkey::default() = not set (only fund_authority can fulfill).\"\n            ],\n            \"type\": \"pubkey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"NavEmergencyOverrideApplied\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"fund_authority\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"super_admin\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_nav\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_nav\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"old_price_per_share\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_price_per_share\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"NavUpdatePolicy\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"lp_vault\",\n            \"docs\": [\n              \"Vault whose checked NAV publications this policy constrains.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"window_started_at\",\n            \"docs\": [\n              \"Chain timestamp at which the current fixed window began.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"anchor_price_per_share\",\n            \"docs\": [\n              \"Window-start share price, scaled by PRICE_SCALE.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"NavUpdatePolicyInitialized\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"anchor_price_per_share\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"window_started_at\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"NavUpdateWindowApplied\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"old_nav\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_nav\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"anchor_price_per_share\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"new_price_per_share\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"window_started_at\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"window_reset\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawEscrow\",\n      \"docs\": [\n        \"Escrow account that holds assets and shares for a pending withdrawal.\",\n        \"Each user has one escrow per vault, derived as PDA from [WITHDRAW_ESCROW_SEED, user, vault].\"\n      ],\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"docs\": [\n              \"User who owns this escrow.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"docs\": [\n              \"The vault this escrow is associated with.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_assets_account\",\n            \"docs\": [\n              \"Token account holding escrowed assets (USDC).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"escrow_shares_account\",\n            \"docs\": [\n              \"Token account holding escrowed shares (for burning on claim).\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawReceipt\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"user\",\n            \"docs\": [\n              \"User requesting withdrawal.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"lp_vault\",\n            \"docs\": [\n              \"Vault where the user has invested.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"pending_shares\",\n            \"docs\": [\n              \"Shares waiting for liquidity (keeper needs to fulfill these).\",\n              \"These shares are held in the escrow_shares_account.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"claimable_shares\",\n            \"docs\": [\n              \"Shares that have been fulfilled and are ready to claim.\",\n              \"These shares are also in escrow_shares_account, waiting to be burned on claim.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"claimable_assets\",\n            \"docs\": [\n              \"Asset value ready to claim (held in escrow_assets_account).\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"oldest_pending_at\",\n            \"docs\": [\n              \"NAV ordering floor for the whole `pending_shares` aggregate, re-derived on\",\n              \"the MOST RECENT addition.\",\n              \"\",\n              \"Despite the name and the `i64` type this is NOT a wall-clock timestamp of\",\n              \"the addition: it stores `observed_nav_updated_at + 1`, i.e. one past the\",\n              \"NAV version in force when that addition was queued. It shares the\",\n              \"`nav_updated_at` number space, which is why the existing `>=` comparisons\",\n              \"in the program and the keeper keep working unchanged.\",\n              \"\",\n              \"`fulfill_withdrawal` prices all of `pending_shares` at once and requires\",\n              \"`nav_updated_at >= oldest_pending_at`, so this must track the newest\",\n              \"request, not the first: a first-request-only stamp lets every subsequent\",\n              \"addition settle against a NAV that predates it.\",\n              \"\",\n              \"NOTE: the field name is retained for wire/IDL compatibility — the keeper\",\n              \"reads it by name and orders fulfilment on it. Renaming it to\",\n              \"`newest_pending_at` is a follow-up that must land with a keeper change.\",\n              \"\",\n              \"The floor is derived from the NAV VERSION the request observed —\",\n              \"`lp_vault.nav_updated_at + 1` — not from the wall clock. Combined with\",\n              \"fulfilment's `nav_updated_at >= oldest_pending_at`, that requires a NAV\",\n              \"write STRICTLY NEWER than the one in force when the request was queued.\",\n              \"\",\n              \"KNOWN RESIDUAL — a newer VERSION does not prove a later VALUATION. An\",\n              \"`update_nav_checked` prepared BEFORE the request can still land after it:\",\n              \"its compare-and-set covers only `(nav, total_shares, nav_updated_at)`, and\",\n              \"a fee-free illiquid queue changes none of them. `apply_illiquid_withdrawal`\",\n              \"adds only `fee_shares` (zero here) to `total_shares` and moves\",\n              \"`pending_withdrawal_value`, which is NOT part of the CAS tuple — the\",\n              \"cross-chain path passes `fee_shares = 0` explicitly. So the prepared\",\n              \"update still validates, advances the timestamp past the floor, and\",\n              \"fulfilment settles against a valuation computed before the request.\",\n              \"\",\n              \"Two writers, two different bounds:\",\n              \"\",\n              \"- `update_nav_checked` — bounded by the publisher's prepare-to-publish\",\n              \"interval (`NAV_PUBLISH_INTENT_MAX_AGE_MS`, 120s in gamma-vault-agents),\",\n              \"because a prepared intent older than that is discarded client-side.\",\n              \"- `update_nav` (legacy, `handler`) — **UNBOUNDED**. It validates no\",\n              \"expected state and carries no age limit, so a valuation computed\",\n              \"arbitrarily long before the request can be published at any later time\",\n              \"and will advance `nav_updated_at` past the floor.\",\n              \"\",\n              \"This residual is still reachable WITHOUT any privileged actor: a holder\",\n              \"only has to queue between an honest publisher's prepare and its publish.\",\n              \"No compromised key and no operator error is required — only timing inside\",\n              \"that window. What the `+1` narrows is the SIZE of the window (from \\\"any\",\n              \"NAV after the first request on the receipt\\\" to \\\"the publisher's in-flight\",\n              \"interval\\\"), not the privilege needed to hit it.\",\n              \"\",\n              \"The legacy entrypoint is already slated for removal (gamma-vault-agents\",\n              \"calls only `update_nav_checked`, with no fallback, and the legacy client\",\n              \"helper has no callers). Deleting it closes the unbounded half of this\",\n              \"residual and should be sequenced with removing the web-server's\",\n              \"`/gamma/update-vault-nav` route.\",\n              \"\",\n              \"Either way this is strictly narrower than the pre-fix behaviour, which\",\n              \"accepted any NAV after the FIRST request on the receipt.\",\n              \"\",\n              \"Closing it requires the queue to invalidate in-flight NAV writes — i.e.\",\n              \"extending the CAS tuple with `pending_withdrawal_value` (or a receipt\",\n              \"version). That changes `update_nav_checked`'s signature, so it is a\",\n              \"coordinated program + IDL + agent + web-server change and an on-chain\",\n              \"upgrade; the agent calls `update_nav_checked` with no fallback, so a\",\n              \"required new argument breaks it against the deployed program until all\",\n              \"four ship together. Deliberately not bundled here.\",\n              \"\",\n              \"This needs no new state and no change to either comparison:\",\n              \"`next_nav_updated_at` already guarantees `nav_updated_at` strictly\",\n              \"increases on every NAV write (`max(clock_now, previous + 1)`), so\",\n              \"`observed + 1` is always reachable by the next write. It proves only that\",\n              \"the version ALREADY OBSERVED cannot settle the request — a stale\",\n              \"valuation that becomes the next write still passes, which is exactly the\",\n              \"residual above. The keeper's mirrored `>=` check keeps working unchanged.\",\n              \"\",\n              \"A wall-clock floor left a same-second hole: `Clock::unix_timestamp` is\",\n              \"second-resolution and the comparison is `>=`, so a NAV published earlier\",\n              \"in the same second as the request compared equal and passed.\",\n              \"\",\n              \"UPGRADE GATE — receipts already pending at the upgrade carry a LEGACY\",\n              \"floor. Accounts survive a program upgrade, and nothing re-stamps a\",\n              \"receipt until its next `withdraw`, so a receipt queued under the previous\",\n              \"release keeps a wall-clock, first-request-only value that\",\n              \"`fulfill_withdrawal` still accepts. Concretely: 1 share queued at T0,\",\n              \"NAV published at T1, an unrecorded loss, then 1,000,000 shares added —\",\n              \"all pre-upgrade — leaves the receipt at T0, and post-upgrade fulfilment\",\n              \"accepts the stale T1 NAV.\",\n              \"\",\n              \"Publishing a fresh NAV after the upgrade does NOT fix this: any NAV after\",\n              \"T0 satisfies a T0 floor, which is the whole defect. The gate is therefore\",\n              \"to DRAIN pending receipts before the upgrade, so no legacy floor survives\",\n              \"it.\",\n              \"\",\n              \"A scan alone is NOT sufficient: `withdraw` intake is permissionless, so a\",\n              \"user can create a fresh legacy-floor receipt between the scan and the\",\n              \"upgrade, and no off-chain maintenance mode can stop a direct transaction.\",\n              \"\",\n              \"There is no withdrawal pause flag for the native path — `withdrawals_enabled`\",\n              \"gates only the cross-chain intake, and zeroing the `WithdrawalPolicy` caps\",\n              \"REMOVES the limits rather than applying them. The one enforceable on-chain\",\n              \"lever is NAV staleness: `withdraw` begins with `require_fresh_nav`, so once\",\n              \"NAV ages past `nav_max_staleness` every new intake reverts with `StaleNav`.\",\n              \"`fulfill_withdrawal` requires fresh NAV too, so draining must finish first:\",\n              \"\",\n              \"1. drain — fulfil until `pending_shares == 0` on EVERY receipt, with NAV\",\n              \"still being published. \\\"Every receipt\\\" means an on-chain\",\n              \"`getProgramAccounts` scan for `WithdrawReceipt` filtered by\",\n              \"`lp_vault`; the off-chain `gamma_pending_withdrawals` table is NOT a\",\n              \"valid inventory — it tracks only agent-managed parent-to-child Gamma\",\n              \"withdrawals for dedup and NAV enumeration, and omits ordinary user\",\n              \"and cross-chain receipts entirely;\",\n              \"2. stop publishing NAV and wait out `nav_max_staleness` (1800s on prod\",\n              \"STBL1). New `withdraw` calls now revert on-chain, not by convention;\",\n              \"3. RE-CHECK that every receipt is still at zero — nothing can have been\",\n              \"added during step 2;\",\n              \"4. upgrade;\",\n              \"5. resume NAV publication, which re-opens intake.\",\n              \"\",\n              \"No production pre-verification is claimed here: the scan in step 1 has not\",\n              \"been run, and the agent-side table cannot stand in for it. Steps 2 and 3\",\n              \"are required regardless, because the count can otherwise change under you.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump, stored for CU saving purposes.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawalFeeRetained\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"gross_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"net_assets\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"withdrawal_fee_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawalFeesSettled\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"user\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"shares_withdrawn\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"asset_value\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"fee_shares_minted\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"proration_elapsed\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"proration_interval\",\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"pps_after_fees\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawalPolicy\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"lp_vault\",\n            \"docs\": [\n              \"Vault this policy belongs to.\"\n            ],\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"withdrawal_fee_bps\",\n            \"docs\": [\n              \"Base-asset fee retained in the vault on withdrawal. 30 = 0.30%.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"hourly_withdrawal_cap_bps\",\n            \"docs\": [\n              \"Max net withdrawal accepted per hour as bps of current NAV. 0 = disabled.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"daily_withdrawal_cap_bps\",\n            \"docs\": [\n              \"Max net withdrawal accepted per day as bps of current NAV. 0 = disabled.\"\n            ],\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"hourly_withdrawn_assets\",\n            \"docs\": [\n              \"Net withdrawn assets counted in the current hourly window.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"daily_withdrawn_assets\",\n            \"docs\": [\n              \"Net withdrawn assets counted in the current daily window.\"\n            ],\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"hourly_window_start\",\n            \"docs\": [\n              \"Start timestamp for the current hourly cap window.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"daily_window_start\",\n            \"docs\": [\n              \"Start timestamp for the current daily cap window.\"\n            ],\n            \"type\": \"i64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"docs\": [\n              \"PDA derivation bump.\"\n            ],\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"WithdrawalPolicyUpdated\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"vault\",\n            \"type\": \"pubkey\"\n          },\n          {\n            \"name\": \"withdrawal_fee_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"hourly_withdrawal_cap_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"daily_withdrawal_cap_bps\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"i64\"\n          }\n        ]\n      }\n    }\n  ]\n}","import { GammaVault } from \"./gamma-idl\";\nimport GAMMA_VAULT_IDL_JSON from \"./gamma-idl.json\";\n\nexport const GAMMA_VAULT_IDL = GAMMA_VAULT_IDL_JSON as unknown as GammaVault;\nexport type GammaVaultIdlType = GammaVault;\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport {\n  GAMMA_VAULT_PROGRAM_ID,\n  SEED_DEPOSIT_POLICY,\n  SEED_DEPOSIT_RECEIPT,\n  SEED_WITHDRAW_ESCROW,\n  SEED_WITHDRAW_RECEIPT,\n  SEED_WITHDRAWAL_POLICY,\n} from \"../constants\";\n\nimport {\n  ASSOCIATED_TOKEN_PROGRAM_ID,\n  getAssociatedTokenAddressSync,\n  TOKEN_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\n/**\n * Derive the WithdrawalPolicy PDA for a vault.\n * Seeds: [\"withdrawal_policy\", lpVault]\n */\nexport function deriveGammaWithdrawalPolicy(\n  lpVault: PublicKey,\n  programId: PublicKey = GAMMA_VAULT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_WITHDRAWAL_POLICY), lpVault.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derive the DepositPolicy PDA for a vault.\n * Seeds: [\"deposit_policy\", lpVault]\n */\nexport function deriveGammaDepositPolicy(\n  lpVault: PublicKey,\n  programId: PublicKey = GAMMA_VAULT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_DEPOSIT_POLICY), lpVault.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derive the per-user DepositReceipt PDA for a vault.\n * Seeds: [\"deposit_receipt\", user, lpVault]\n */\nexport function deriveGammaDepositReceipt(\n  user: PublicKey,\n  lpVault: PublicKey,\n  programId: PublicKey = GAMMA_VAULT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_DEPOSIT_RECEIPT), user.toBuffer(), lpVault.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derive the per-user WithdrawEscrow PDA for a vault.\n * Seeds: [\"withdraw_escrow\", user, lpVault]\n */\nexport function deriveGammaWithdrawEscrow(\n  user: PublicKey,\n  lpVault: PublicKey,\n  programId: PublicKey = GAMMA_VAULT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_WITHDRAW_ESCROW), user.toBuffer(), lpVault.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Derive the per-user WithdrawReceipt PDA for a vault.\n * Seeds: [\"withdraw_receipt\", user, lpVault]\n */\nexport function deriveGammaWithdrawReceipt(\n  user: PublicKey,\n  lpVault: PublicKey,\n  programId: PublicKey = GAMMA_VAULT_PROGRAM_ID\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEED_WITHDRAW_RECEIPT), user.toBuffer(), lpVault.toBuffer()],\n    programId\n  );\n}\n\n/**\n * Associated token account derivation matching the Gamma program's ATA seeds\n * (`[owner, tokenProgram, mint]`). `allowOwnerOffCurve` is enabled since owners\n * are frequently PDAs (escrow, fee recipient).\n */\nexport function deriveGammaAta(\n  mint: PublicKey,\n  owner: PublicKey,\n  tokenProgram: PublicKey = TOKEN_PROGRAM_ID\n): PublicKey {\n  return getAssociatedTokenAddressSync(\n    mint,\n    owner,\n    true,\n    tokenProgram,\n    ASSOCIATED_TOKEN_PROGRAM_ID\n  );\n}\n","import { BorshAccountsCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { GAMMA_VAULT_IDL } from \"../idl\";\nimport { GammaLpVaultRaw, GammaWithdrawReceiptRaw } from \"../types\";\n\nconst GAMMA_ACCOUNTS_CODER = new BorshAccountsCoder(GAMMA_VAULT_IDL);\n\nconst lpVaultDiscriminator = Buffer.from([189, 45, 167, 23, 91, 118, 105, 190]);\nconst withdrawReceiptDiscriminator = Buffer.from([132, 238, 44, 182, 207, 9, 124, 140]);\n\nconst toBN = (v: unknown): BN => (BN.isBN(v) ? v : new BN((v ?? 0).toString()));\n\n/** Decode a Gamma `LpVault` account from raw buffer data. */\nexport function decodeGammaLpVaultData(data: Buffer, pubkey: PublicKey): GammaLpVaultRaw {\n  if (!data.subarray(0, 8).equals(lpVaultDiscriminator)) {\n    throw new Error(\"invalid Gamma LpVault account discriminator\");\n  }\n\n  const d = GAMMA_ACCOUNTS_CODER.decode(\"LpVault\", data);\n\n  return {\n    pubkey,\n    assetsAccount: d.assets_account ?? d.assetsAccount,\n    pendingSharesAccount: d.pending_shares_account ?? d.pendingSharesAccount,\n    sharesMint: d.shares_mint ?? d.sharesMint,\n    assetsMint: d.assets_mint ?? d.assetsMint,\n    fundAuthority: d.fund_authority ?? d.fundAuthority,\n    nav: toBN(d.nav),\n    totalShares: toBN(d.total_shares ?? d.totalShares),\n    navUpdatedAt: toBN(d.nav_updated_at ?? d.navUpdatedAt),\n    navMaxStaleness: toBN(d.nav_max_staleness ?? d.navMaxStaleness),\n    bump: d.bump,\n    vaultName: d.vault_name ?? d.vaultName,\n    pendingWithdrawalValue: toBN(d.pending_withdrawal_value ?? d.pendingWithdrawalValue),\n    feeRecipient: d.fee_recipient ?? d.feeRecipient,\n    performanceFeeBps: d.performance_fee_bps ?? d.performanceFeeBps,\n    assessmentIntervalSecs: toBN(d.assessment_interval_secs ?? d.assessmentIntervalSecs),\n    lastAssessmentTimestamp: toBN(d.last_assessment_timestamp ?? d.lastAssessmentTimestamp),\n    pricePerShareAtLastAssessment: toBN(\n      d.price_per_share_at_last_assessment ?? d.pricePerShareAtLastAssessment\n    ),\n    keeperAuthority: d.keeper_authority ?? d.keeperAuthority,\n  };\n}\n\n/** Decode a Gamma `WithdrawReceipt` account from raw buffer data. */\nexport function decodeGammaWithdrawReceiptData(\n  data: Buffer,\n  pubkey: PublicKey\n): GammaWithdrawReceiptRaw {\n  if (!data.subarray(0, 8).equals(withdrawReceiptDiscriminator)) {\n    throw new Error(\"invalid Gamma WithdrawReceipt account discriminator\");\n  }\n\n  const d = GAMMA_ACCOUNTS_CODER.decode(\"WithdrawReceipt\", data);\n\n  return {\n    pubkey,\n    user: d.user,\n    lpVault: d.lp_vault ?? d.lpVault,\n    pendingShares: toBN(d.pending_shares ?? d.pendingShares),\n    claimableShares: toBN(d.claimable_shares ?? d.claimableShares),\n    claimableAssets: toBN(d.claimable_assets ?? d.claimableAssets),\n    oldestPendingAt: toBN(d.oldest_pending_at ?? d.oldestPendingAt),\n    bump: d.bump,\n  };\n}\n","import { AccountMeta, PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { GAMMA_VAULT_PROGRAM_ID } from \"./constants\";\n\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n// Anchor instruction discriminators (from the Gamma vault IDL).\nconst DEPOSIT_DISCRIMINATOR = Buffer.from([242, 35, 198, 137, 82, 225, 242, 182]);\nconst WITHDRAW_DISCRIMINATOR = Buffer.from([183, 18, 70, 156, 148, 109, 161, 34]);\nconst COMPLETE_WITHDRAWAL_DISCRIMINATOR = Buffer.from([107, 98, 134, 131, 74, 120, 174, 121]);\n\n/** Encode a u64 argument as an 8-byte little-endian buffer. */\nconst encodeU64 = (amount: BN): Buffer => amount.toArrayLike(Buffer, \"le\", 8);\n\nconst meta = (pubkey: PublicKey, isSigner: boolean, isWritable: boolean): AccountMeta => ({\n  pubkey,\n  isSigner,\n  isWritable,\n});\n\n// ============================================================================\n// deposit\n// ============================================================================\n\nexport interface GammaDepositAccounts {\n  user: PublicKey;\n  lpVault: PublicKey;\n  withdrawalPolicy: PublicKey;\n  depositPolicy: PublicKey;\n  assetsAccount: PublicKey;\n  userAssetAta: PublicKey;\n  userShareAta: PublicKey;\n  depositReceipt: PublicKey;\n  assetsMint: PublicKey;\n  sharesMint: PublicKey;\n  tokenProgram?: PublicKey;\n  associatedTokenProgram?: PublicKey;\n}\n\n/**\n * Deposit `amount` (raw base units of the vault's asset mint) into a Gamma LP\n * vault. Instant deposit: user receives vault shares in the same transaction.\n * The program creates `user_share_ata` and `deposit_receipt` if needed.\n */\nexport function makeGammaDepositIx(\n  accounts: GammaDepositAccounts,\n  amount: BN\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const associatedTokenProgram = accounts.associatedTokenProgram ?? ASSOCIATED_TOKEN_PROGRAM_ID;\n\n  const keys: AccountMeta[] = [\n    meta(accounts.user, true, true),\n    meta(accounts.lpVault, false, true),\n    meta(accounts.withdrawalPolicy, false, true),\n    meta(accounts.depositPolicy, false, false),\n    meta(accounts.assetsAccount, false, true),\n    meta(accounts.userAssetAta, false, true),\n    meta(accounts.userShareAta, false, true),\n    meta(accounts.depositReceipt, false, true),\n    meta(accounts.assetsMint, false, false),\n    meta(accounts.sharesMint, false, true),\n    meta(SystemProgram.programId, false, false),\n    meta(tokenProgram, false, false),\n    meta(associatedTokenProgram, false, false),\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: GAMMA_VAULT_PROGRAM_ID,\n    data: Buffer.concat([DEPOSIT_DISCRIMINATOR, encodeU64(amount)]),\n  });\n}\n\n// ============================================================================\n// withdraw (initiate — queues an escrow withdrawal)\n// ============================================================================\n\nexport interface GammaWithdrawAccounts {\n  user: PublicKey;\n  lpVault: PublicKey;\n  withdrawalPolicy: PublicKey;\n  depositPolicy: PublicKey;\n  assetsAccount: PublicKey;\n  userShareAta: PublicKey;\n  assetsMint: PublicKey;\n  sharesMint: PublicKey;\n  feeRecipientAccount: PublicKey;\n  withdrawEscrow: PublicKey;\n  escrowAssetsAccount: PublicKey;\n  escrowSharesAccount: PublicKey;\n  withdrawReceipt: PublicKey;\n  tokenProgram?: PublicKey;\n  associatedTokenProgram?: PublicKey;\n}\n\n/**\n * Initiate a withdrawal of `sharesAmount` (raw base units of the vault's share\n * mint) from a Gamma LP vault. Shares are escrowed and a WithdrawReceipt is\n * created/updated; assets become claimable via {@link makeGammaCompleteWithdrawalIx}\n * once the withdrawal is fulfilled by a keeper.\n */\nexport function makeGammaWithdrawIx(\n  accounts: GammaWithdrawAccounts,\n  sharesAmount: BN\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const associatedTokenProgram = accounts.associatedTokenProgram ?? ASSOCIATED_TOKEN_PROGRAM_ID;\n\n  const keys: AccountMeta[] = [\n    meta(accounts.user, true, true),\n    meta(accounts.lpVault, false, true),\n    meta(accounts.withdrawalPolicy, false, true),\n    meta(accounts.assetsAccount, false, true),\n    meta(accounts.userShareAta, false, true),\n    meta(accounts.assetsMint, false, false),\n    meta(accounts.sharesMint, false, true),\n    meta(accounts.feeRecipientAccount, false, true),\n    meta(accounts.withdrawEscrow, false, true),\n    meta(accounts.escrowAssetsAccount, false, true),\n    meta(accounts.escrowSharesAccount, false, true),\n    meta(accounts.withdrawReceipt, false, true),\n    meta(SystemProgram.programId, false, false),\n    meta(tokenProgram, false, false),\n    meta(associatedTokenProgram, false, false),\n    // Program ≥2.3.0 reads DepositPolicy from remaining_accounts to base\n    // withdrawal caps on max(NAV, capacity); it is not in the IDL account list.\n    meta(accounts.depositPolicy, false, false),\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: GAMMA_VAULT_PROGRAM_ID,\n    data: Buffer.concat([WITHDRAW_DISCRIMINATOR, encodeU64(sharesAmount)]),\n  });\n}\n\n// ============================================================================\n// complete_withdrawal (claim fulfilled assets)\n// ============================================================================\n\nexport interface GammaCompleteWithdrawalAccounts {\n  user: PublicKey;\n  lpVault: PublicKey;\n  assetsMint: PublicKey;\n  sharesMint: PublicKey;\n  userAssetAta: PublicKey;\n  withdrawEscrow: PublicKey;\n  escrowAssetsAccount: PublicKey;\n  escrowSharesAccount: PublicKey;\n  withdrawReceipt: PublicKey;\n  tokenProgram?: PublicKey;\n  associatedTokenProgram?: PublicKey;\n}\n\n/**\n * Claim the assets from a fulfilled Gamma withdrawal. Transfers the claimable\n * assets from the escrow to the user's asset ATA (created if needed).\n */\nexport function makeGammaCompleteWithdrawalIx(\n  accounts: GammaCompleteWithdrawalAccounts\n): TransactionInstruction {\n  const tokenProgram = accounts.tokenProgram ?? TOKEN_PROGRAM_ID;\n  const associatedTokenProgram = accounts.associatedTokenProgram ?? ASSOCIATED_TOKEN_PROGRAM_ID;\n\n  const keys: AccountMeta[] = [\n    meta(accounts.user, true, true),\n    meta(accounts.lpVault, false, false),\n    meta(accounts.assetsMint, false, false),\n    meta(accounts.sharesMint, false, true),\n    meta(accounts.userAssetAta, false, true),\n    meta(accounts.withdrawEscrow, false, true),\n    meta(accounts.escrowAssetsAccount, false, true),\n    meta(accounts.escrowSharesAccount, false, true),\n    meta(accounts.withdrawReceipt, false, true),\n    meta(SystemProgram.programId, false, false),\n    meta(tokenProgram, false, false),\n    meta(associatedTokenProgram, false, false),\n  ];\n\n  return new TransactionInstruction({\n    keys,\n    programId: GAMMA_VAULT_PROGRAM_ID,\n    data: COMPLETE_WITHDRAWAL_DISCRIMINATOR,\n  });\n}\n","/**\n * Temporary Module for Functions Pending Refactoring\n *\n * This file serves as a temporary staging area for utility functions that need proper\n * categorization and relocation to their appropriate service modules. All functions\n * placed here should include:\n *\n * IMPORTANT: Do not add new features to functions in this file. Instead, refactor\n * them to their proper location first, then implement new functionality.\n */\n\nimport { AccountInfo, Connection, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport {\n  driftRewardsRawToDto,\n  driftSpotMarketRawToDto,\n  driftUserRawToDto,\n  driftUserStatsRawToDto,\n  dtoToDriftRewardsRaw,\n  dtoToDriftSpotMarketRaw,\n  dtoToDriftUserRaw,\n  dtoToDriftUserStatsRaw,\n  dtoToKaminoFarmState,\n  dtoToJupLendingRewardsRateModelRaw,\n  dtoToJupLendingStateRaw,\n  dtoToJupRateModelRaw,\n  dtoToJupTokenReserveRaw,\n  dtoToKaminoObligation,\n  dtoToKaminoReserve,\n  kaminoFarmStateToDto,\n  jupLendingRewardsRateModelRawToDto,\n  jupLendingStateRawToDto,\n  jupRateModelRawToDto,\n  jupTokenReserveRawToDto,\n  kaminoObligationToDto,\n  kaminoReserveToDto,\n} from \"../vendor\";\n\nimport {\n  BankIntegrationMetadata,\n  BankIntegrationMetadataDto,\n  BankIntegrationMetadataMap,\n  BankIntegrationMetadataMapDto,\n} from \"~/types\";\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\nexport function bankMetadataMapToDto(\n  bankMetadataMap: BankIntegrationMetadataMap\n): BankIntegrationMetadataMapDto {\n  return Object.fromEntries(\n    Object.entries(bankMetadataMap).map(([bankPk, bankMetadata]) => [\n      bankPk,\n      bankMetadataToDto(bankMetadata),\n    ])\n  );\n}\n\nexport function dtoToBankMetadataMap(\n  bankMetadataDto: BankIntegrationMetadataMapDto\n): BankIntegrationMetadataMap {\n  return Object.fromEntries(\n    Object.entries(bankMetadataDto).map(([bankPk, bankMetadataDto]) => [\n      bankPk,\n      dtoToBankMetadata(bankMetadataDto),\n    ])\n  );\n}\n\nexport function dtoToBankMetadata(\n  bankMetadataDto: BankIntegrationMetadataDto\n): BankIntegrationMetadata {\n  return {\n    kaminoStates: bankMetadataDto.kaminoStates\n      ? {\n          reserveState: dtoToKaminoReserve(bankMetadataDto.kaminoStates.reserveState),\n          obligationState: dtoToKaminoObligation(bankMetadataDto.kaminoStates.obligationState),\n          farmState: bankMetadataDto.kaminoStates.farmState\n            ? dtoToKaminoFarmState(bankMetadataDto.kaminoStates.farmState)\n            : undefined,\n        }\n      : undefined,\n    driftStates: bankMetadataDto.driftStates\n      ? {\n          spotMarketState: dtoToDriftSpotMarketRaw(bankMetadataDto.driftStates.spotMarketState),\n          userState: dtoToDriftUserRaw(bankMetadataDto.driftStates.userState),\n          userRewards: bankMetadataDto.driftStates.userRewards.map(dtoToDriftRewardsRaw),\n          userStatsState: bankMetadataDto.driftStates.userStatsState\n            ? dtoToDriftUserStatsRaw(bankMetadataDto.driftStates.userStatsState)\n            : undefined,\n        }\n      : undefined,\n    jupLendStates: bankMetadataDto.jupLendStates\n      ? {\n          jupLendingState: dtoToJupLendingStateRaw(bankMetadataDto.jupLendStates.jupLendingState),\n          jupTokenReserveState: dtoToJupTokenReserveRaw(\n            bankMetadataDto.jupLendStates.jupTokenReserveState\n          ),\n          jupRewardsRateModel: bankMetadataDto.jupLendStates.jupRewardsRateModel\n            ? dtoToJupLendingRewardsRateModelRaw(bankMetadataDto.jupLendStates.jupRewardsRateModel)\n            : null,\n          jupRateModel: bankMetadataDto.jupLendStates.jupRateModel\n            ? dtoToJupRateModelRaw(bankMetadataDto.jupLendStates.jupRateModel)\n            : null,\n          fTokenTotalSupply: new BN(bankMetadataDto.jupLendStates.fTokenTotalSupply),\n        }\n      : undefined,\n  };\n}\n\nexport function bankMetadataToDto(\n  bankMetadata: BankIntegrationMetadata\n): BankIntegrationMetadataDto {\n  return {\n    kaminoStates: bankMetadata.kaminoStates\n      ? {\n          reserveState: kaminoReserveToDto(bankMetadata.kaminoStates.reserveState),\n          obligationState: kaminoObligationToDto(bankMetadata.kaminoStates.obligationState),\n          farmState: bankMetadata.kaminoStates.farmState\n            ? kaminoFarmStateToDto(bankMetadata.kaminoStates.farmState)\n            : undefined,\n        }\n      : undefined,\n    driftStates: bankMetadata.driftStates\n      ? {\n          spotMarketState: driftSpotMarketRawToDto(bankMetadata.driftStates.spotMarketState),\n          userState: driftUserRawToDto(bankMetadata.driftStates.userState),\n          userRewards: bankMetadata.driftStates.userRewards.map(driftRewardsRawToDto),\n          userStatsState: bankMetadata.driftStates.userStatsState\n            ? driftUserStatsRawToDto(bankMetadata.driftStates.userStatsState)\n            : undefined,\n        }\n      : undefined,\n    jupLendStates: bankMetadata.jupLendStates\n      ? {\n          jupLendingState: jupLendingStateRawToDto(bankMetadata.jupLendStates.jupLendingState),\n          jupTokenReserveState: jupTokenReserveRawToDto(\n            bankMetadata.jupLendStates.jupTokenReserveState\n          ),\n          jupRewardsRateModel: bankMetadata.jupLendStates.jupRewardsRateModel\n            ? jupLendingRewardsRateModelRawToDto(bankMetadata.jupLendStates.jupRewardsRateModel)\n            : null,\n          jupRateModel: bankMetadata.jupLendStates.jupRateModel\n            ? jupRateModelRawToDto(bankMetadata.jupLendStates.jupRateModel)\n            : null,\n          fTokenTotalSupply: bankMetadata.jupLendStates.fTokenTotalSupply.toString(),\n        }\n      : undefined,\n  };\n}\n\nexport async function fetchProgramForMints(connection: Connection, mintAddress: PublicKey[]) {\n  const chunkSize = 100;\n  const mintData: {\n    mint: PublicKey;\n    program: PublicKey;\n  }[] = [];\n\n  for (let i = 0; i < mintAddress.length; i += chunkSize) {\n    const chunk = mintAddress.slice(i, i + chunkSize);\n    const infos = await connection.getMultipleAccountsInfo(chunk);\n\n    infos.forEach((info, idx) => {\n      const mint = chunk[idx];\n      if (info && mint) {\n        const program = info.owner;\n        if (program.equals(TOKEN_PROGRAM_ID) || program.equals(TOKEN_2022_PROGRAM_ID)) {\n          mintData.push({ mint, program });\n        }\n      }\n    });\n  }\n\n  return mintData;\n}\n\n/* BATCH ACCOUNT FECTHING LOGIC */\n\ninterface Result {\n  jsonrpc: string;\n  result: {\n    context: { slot: number };\n    value: Array<AccountInfo<string[]> | null>;\n  };\n}\n\nexport async function chunkedGetRawMultipleAccountInfos(\n  connection: Connection,\n  pks: string[],\n  batchChunkSize: number = 1000,\n  maxAccountsChunkSize: number = 100\n): Promise<[number, Map<string, AccountInfo<Buffer>>]> {\n  const accountInfoMap = new Map<string, AccountInfo<Buffer>>();\n  let contextSlot = 0;\n\n  const batches = chunkArray(pks, batchChunkSize);\n\n  for (let i = 0; i < batches.length; i++) {\n    const batch = batches[i];\n\n    const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n      methodName: \"getMultipleAccounts\",\n      args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n    }));\n\n    let accountInfos: Array<AccountInfo<string[]> | null> = [];\n    let retries = 0;\n    const maxRetries = 3;\n\n    while (retries < maxRetries && accountInfos.length === 0) {\n      try {\n        accountInfos = await connection\n          // @ts-expect-error -- _rpcBatchRequest is private on Connection\n          ._rpcBatchRequest(batchRequest)\n          .then((batchResults: Result[]) => {\n            contextSlot = Math.max(...batchResults.map((res) => res.result.context.slot));\n\n            const accounts = batchResults.reduce(\n              (acc, res) => {\n                acc.push(...res.result.value);\n                return acc;\n              },\n              [] as Result[\"result\"][\"value\"]\n            );\n\n            return accounts;\n          });\n      } catch (error) {\n        retries++;\n      }\n    }\n\n    if (accountInfos.length === 0) {\n      throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n    }\n\n    accountInfos.forEach((item, index) => {\n      const publicKey = batch[index];\n      if (item) {\n        accountInfoMap.set(publicKey, {\n          ...item,\n          owner: new PublicKey(item.owner),\n          data: Buffer.from(item.data[0], \"base64\"),\n        });\n      }\n    });\n  }\n\n  return [contextSlot, accountInfoMap];\n}\n\nexport async function chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n  connection: Connection,\n  pks: string[],\n  batchChunkSize: number = 1000,\n  maxAccountsChunkSize: number = 100\n): Promise<Array<AccountInfo<Buffer> | null>> {\n  const allAccountInfos: Array<AccountInfo<Buffer> | null> = [];\n\n  const batches = chunkArray(pks, batchChunkSize);\n\n  for (let i = 0; i < batches.length; i++) {\n    const batch = batches[i];\n\n    const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n      methodName: \"getMultipleAccounts\",\n      args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n    }));\n\n    let accountInfos: Array<AccountInfo<string[]> | null> = [];\n    let retries = 0;\n    const maxRetries = 3;\n\n    while (retries < maxRetries && accountInfos.length === 0) {\n      try {\n        accountInfos = await connection\n          // @ts-expect-error -- _rpcBatchRequest is private on Connection\n          ._rpcBatchRequest(batchRequest)\n          .then((batchResults: Result[]) => {\n            const accounts = batchResults.reduce(\n              (acc, res) => {\n                acc.push(...res.result.value);\n                return acc;\n              },\n              [] as Result[\"result\"][\"value\"]\n            );\n\n            return accounts;\n          });\n      } catch (error) {\n        retries++;\n      }\n    }\n\n    if (accountInfos.length === 0) {\n      throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n    }\n\n    accountInfos.forEach((item) => {\n      if (item) {\n        allAccountInfos.push({\n          ...item,\n          owner: new PublicKey(item.owner),\n          data: Buffer.from(item.data[0], \"base64\"),\n        });\n      } else {\n        allAccountInfos.push(null);\n      }\n    });\n  }\n\n  return allAccountInfos;\n}\n\nexport async function chunkedGetRawMultipleAccountInfoOrdered(\n  connection: Connection,\n  pks: string[],\n  batchChunkSize: number = 1000,\n  maxAccountsChunkSize: number = 100\n): Promise<Array<AccountInfo<Buffer>>> {\n  const allAccountInfos: Array<AccountInfo<Buffer>> = [];\n\n  const batches = chunkArray(pks, batchChunkSize);\n\n  for (let i = 0; i < batches.length; i++) {\n    const batch = batches[i];\n\n    const batchRequest = chunkArray(batch, maxAccountsChunkSize).map((pubkeys) => ({\n      methodName: \"getMultipleAccounts\",\n      args: connection._buildArgs([pubkeys], \"confirmed\", \"base64\"),\n    }));\n\n    let accountInfos: Array<AccountInfo<string[]> | null> = [];\n    let retries = 0;\n    const maxRetries = 3;\n\n    while (retries < maxRetries && accountInfos.length === 0) {\n      try {\n        accountInfos = await connection\n          // @ts-expect-error -- _rpcBatchRequest is private on Connection\n          ._rpcBatchRequest(batchRequest)\n          .then((batchResults: Result[]) => {\n            const accounts = batchResults.reduce(\n              (acc, res) => {\n                acc.push(...res.result.value);\n                return acc;\n              },\n              [] as Result[\"result\"][\"value\"]\n            );\n\n            return accounts;\n          });\n      } catch (error) {\n        retries++;\n      }\n    }\n\n    if (accountInfos.length === 0) {\n      throw new Error(`Failed to fetch account infos after ${maxRetries} retries`);\n    }\n\n    accountInfos.forEach((item) => {\n      if (item) {\n        allAccountInfos.push({\n          ...item,\n          owner: new PublicKey(item.owner),\n          data: Buffer.from(item.data[0], \"base64\"),\n        });\n      }\n    });\n  }\n\n  return allAccountInfos;\n}\n\nfunction chunkArray<T>(array: T[], chunkSize: number): T[][] {\n  const chunks: T[][] = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    chunks.push(array.slice(i, i + chunkSize));\n  }\n  return chunks;\n}\n","import { Connection } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { OraclePrice, OraclePriceDto } from \"../types\";\nimport {\n  categorizePythBanks,\n  extractPythOracleKeys,\n  mapPythBanksToOraclePrices,\n  parseRpcPythPriceData,\n} from \"../utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\n\ntype ValidatorVoteAccountByBank = {\n  [address: string]: string;\n};\n\ntype FetchPythOracleOnChainOpts = {\n  mode: \"on-chain\";\n  connection: Connection;\n  validatorVoteAccountByBank?: ValidatorVoteAccountByBank;\n};\n\ntype FetchPythOracleApiOpts = {\n  mode: \"api\";\n  pythOnchainData: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  /** @deprecated Unused; will be removed in a future release. */\n  stakedCollatData?: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  validatorVoteAccountByBank?: ValidatorVoteAccountByBank;\n};\n\nexport type PythOracleServiceOpts = FetchPythOracleOnChainOpts | FetchPythOracleApiOpts;\n\n/**\n * Fetches comprehensive Pyth oracle data including push oracles and staked collateral data\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage and connection\n * @returns Promise resolving to map of bank addresses to their oracle prices\n */\nexport const fetchPythOracleData = async (\n  banks: BankType[],\n  opts: PythOracleServiceOpts,\n  priceCoeffByBank: Record<string, number> = {}\n): Promise<{\n  bankOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n  // Step 1: Categorize banks by oracle type\n  const {\n    pythPushBanks,\n    pythStakedCollateralBanks,\n    pythPushKaminosBanks,\n    driftPythPullBanks,\n    solendPythPullBanks,\n    juplendPythPullBanks,\n    pythMultipliedBanks,\n  } = categorizePythBanks(banks);\n\n  if (\n    !pythPushBanks.length &&\n    !pythStakedCollateralBanks.length &&\n    !pythPushKaminosBanks.length &&\n    !driftPythPullBanks.length &&\n    !solendPythPullBanks.length &&\n    !juplendPythPullBanks.length &&\n    !pythMultipliedBanks.length\n  ) {\n    // Return empty structures when there are no banks to process\n    return {\n      bankOraclePriceMap: new Map<string, OraclePrice>(),\n    };\n  }\n\n  // Step 2: Extract oracle keys for price fetching\n  // Staked collateral banks use the raw SOL oracle price — the LST→SOL conversion\n  // is handled via assetShareValueMultiplier in client.ts, not via price coefficients.\n  const combinedPythBanks = [\n    ...pythPushBanks,\n    ...pythStakedCollateralBanks,\n    ...pythPushKaminosBanks,\n    ...driftPythPullBanks,\n    ...solendPythPullBanks,\n    ...juplendPythPullBanks,\n    ...pythMultipliedBanks,\n  ];\n  const pythOracleKeys = extractPythOracleKeys(combinedPythBanks);\n\n  // Filter for unique oracle keys to avoid duplicate fetches\n  const uniquePythOracleKeys = Array.from(new Set(pythOracleKeys));\n\n  // Step 3: Fetch oracle prices\n  let oraclePrices: Record<string, OraclePrice>;\n  if (opts.mode === \"api\") {\n    oraclePrices = await fetchPythOraclePricesFromAPI(\n      uniquePythOracleKeys,\n      opts.pythOnchainData.endpoint,\n      { queryKey: opts.pythOnchainData.queryKey }\n    );\n  } else {\n    oraclePrices = await fetchPythOraclePricesFromChain(uniquePythOracleKeys, opts.connection);\n  }\n\n  // Step 6: Map banks to oracle prices\n  const bankOraclePriceMap = mapPythBanksToOraclePrices(\n    combinedPythBanks,\n    [...pythStakedCollateralBanks, ...pythMultipliedBanks],\n    oraclePrices,\n    priceCoeffByBank\n  );\n\n  // A multiplied bank without a valid exchange rate must not keep the raw base-feed price\n  pythMultipliedBanks.forEach((bank) => {\n    if (!Number.isFinite(priceCoeffByBank[bank.address.toBase58()])) {\n      bankOraclePriceMap.delete(bank.address.toBase58());\n    }\n  });\n\n  return {\n    bankOraclePriceMap,\n  };\n};\n\n/**\n * Fetches Pyth oracle price data via internal API endpoint\n * @param pythOracleKeys - Array of Pyth oracle key strings\n * @param apiEndpoint - Fetches pyth oracle data with a GET request using the pyth keys as params\n * @returns Promise resolving to oracle prices indexed by oracle key\n */\nexport const fetchPythOraclePricesFromAPI = async (\n  pythOracleKeys: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, OraclePrice>> => {\n  const queryKey = opts?.queryKey ?? \"pythOracleKeys\";\n  const response = await fetch(`${apiEndpoint}?${queryKey}=${pythOracleKeys.join(\",\")}`);\n\n  if (!response.ok) {\n    throw new Error(\"Failed to fetch pyth oracle data\");\n  }\n\n  const { data } = (await response.json()) as { data: Record<string, OraclePriceDto> };\n\n  return Object.fromEntries(\n    Object.entries(data).map(([key, oraclePrice]) => [\n      key,\n      {\n        priceRealtime: {\n          price: BigNumber(oraclePrice.priceRealtime.price),\n          confidence: BigNumber(oraclePrice.priceRealtime.confidence),\n          lowestPrice: BigNumber(oraclePrice.priceRealtime.lowestPrice),\n          highestPrice: BigNumber(oraclePrice.priceRealtime.highestPrice),\n        },\n        priceWeighted: {\n          price: BigNumber(oraclePrice.priceWeighted.price),\n          confidence: BigNumber(oraclePrice.priceWeighted.confidence),\n          lowestPrice: BigNumber(oraclePrice.priceWeighted.lowestPrice),\n          highestPrice: BigNumber(oraclePrice.priceWeighted.highestPrice),\n        },\n        timestamp: oraclePrice.timestamp ? BigNumber(oraclePrice.timestamp) : null,\n      },\n    ])\n  ) as Record<string, OraclePrice>;\n};\n\n/**\n * Fetches Pyth oracle data directly from the blockchain via RPC connection\n * @param requestedPythOracleKeys - Array of Pyth oracle key strings to fetch\n * @param connection - Solana RPC connection instance\n * @returns Promise resolving to oracle price data indexed by oracle key\n */\nexport const fetchPythOraclePricesFromChain = async (\n  requestedPythOracleKeys: string[],\n  connection: Connection\n): Promise<Record<string, OraclePrice>> => {\n  const updatedOraclePriceByKey: Record<string, OraclePrice> = {};\n  const oracleAis = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n    connection,\n    requestedPythOracleKeys\n  );\n\n  for (const index in requestedPythOracleKeys) {\n    const oracleKey = requestedPythOracleKeys[index];\n    const priceDataRaw = oracleAis[index];\n\n    let oraclePrice = priceDataRaw && parseRpcPythPriceData(priceDataRaw.data);\n\n    if (!oraclePrice || oraclePrice.priceRealtime.price.eq(new BigNumber(0))) {\n      oraclePrice = {\n        ...oraclePrice,\n        priceRealtime: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        priceWeighted: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        timestamp: new BigNumber(Date.now()),\n      };\n    }\n\n    updatedOraclePriceByKey[oracleKey] = oraclePrice;\n  }\n\n  return updatedOraclePriceByKey;\n};\n","import { Connection } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { OraclePrice, SwbOracleAiDataByKey } from \"../types\";\nimport {\n  getFallbackPricesByFeedId,\n  mapBrokenFeedsToOraclePrices,\n  mapSwbBanksToOraclePrices,\n  getOracleSourceFromOracleSetup,\n} from \"../utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\nimport {\n  CrossbarSimulatePayload,\n  decodeSwitchboardPullFeedData,\n  FeedResponse,\n} from \"~/vendor/switchboard_pull\";\n\ntype FetchSwbOracleOnChainOpts = {\n  mode: \"on-chain\";\n  connection: Connection;\n  crossbarEndpoint?: string;\n};\n\ntype FetchSwbOracleApiOpts = {\n  mode: \"api\";\n  swbOnChainData: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  swbCrossbarPrice: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  /** @deprecated Unused; will be removed in a future release. */\n  stakedCollatData?: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  priceFallback?: {\n    endpoint: string;\n    queryKey?: string;\n  };\n  /** @deprecated Renamed to `priceFallback` — the endpoint is no longer Birdeye-backed. */\n  birdeyeFallback?: {\n    endpoint: string;\n    queryKey?: string;\n  };\n};\n\nexport type SwbOracleServiceOpts = FetchSwbOracleOnChainOpts | FetchSwbOracleApiOpts;\n\n/**\n * Fetches comprehensive Switchboard oracle data including price feeds and broken feed detection\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage\n * @returns Promise resolving to map of bank addresses to their oracle prices\n */\nexport const fetchSwbOracleData = async (\n  banks: BankType[],\n  opts: SwbOracleServiceOpts\n): Promise<{\n  bankOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n  // Step 1: Fetch Switchboard oracle map\n  const switchboardBanks = banks.filter(\n    (bank) => getOracleSourceFromOracleSetup(bank.config.oracleSetup).key === \"switchboard\"\n  );\n\n  if (switchboardBanks.length === 0) {\n    return {\n      bankOraclePriceMap: new Map<string, OraclePrice>(),\n    };\n  }\n\n  let swbOracleAiDataByKey: SwbOracleAiDataByKey;\n  const oracleKeys = switchboardBanks.map((bank) => bank.config.oracleKeys[0].toBase58());\n  if (opts.mode === \"api\") {\n    swbOracleAiDataByKey = await fetchSwbOracleAccountsFromAPI(\n      oracleKeys,\n      opts.swbOnChainData.endpoint,\n      { queryKey: opts.swbOnChainData.queryKey }\n    );\n  } else {\n    swbOracleAiDataByKey = await fetchSwbOracleAccountsFromChain(oracleKeys, opts.connection);\n  }\n\n  // Step 4: Extract oracle keys for price fetching\n  const swbFeedIds: string[] = [];\n  const brokenSwbFeeds: { feedId: string; mintAddress: string }[] = [];\n\n  Object.keys(swbOracleAiDataByKey).forEach((oracleKey) => {\n    const oracleAiData = swbOracleAiDataByKey[oracleKey];\n\n    const rawPriceBN = new BN(oracleAiData.rawPrice);\n\n    const isFeedBroken =\n      rawPriceBN.isZero() || rawPriceBN.eq(new BN(0.000001)) || rawPriceBN.eq(new BN(0.00000001));\n\n    if (isFeedBroken) {\n      const bank = switchboardBanks.find(\n        (bank) => bank.config.oracleKeys[0].toBase58() === oracleKey\n      );\n      if (bank) {\n        brokenSwbFeeds.push({\n          feedId: oracleAiData.feedHash,\n          mintAddress: bank.mint.toBase58(),\n        });\n      } else {\n        console.warn(\n          `Bank not found for oracle key ${oracleKey} - feed id ${oracleAiData.feedHash}`\n        );\n      }\n    } else {\n      swbFeedIds.push(oracleAiData.feedHash);\n    }\n  });\n\n  // Step 5: Fetch oracle prices\n  let crossbarResponse: Record<string, FeedResponse | undefined>;\n  let fallbackPricesByFeedId: Record<string, number> = {};\n  if (opts.mode === \"api\") {\n    crossbarResponse = await fetchSwbOraclePricesFromAPI(\n      swbFeedIds,\n      opts.swbCrossbarPrice.endpoint,\n      { queryKey: opts.swbCrossbarPrice.queryKey }\n    );\n    const priceFallback = opts.priceFallback ?? opts.birdeyeFallback;\n    if (brokenSwbFeeds.length > 0 && priceFallback) {\n      fallbackPricesByFeedId = await getFallbackPricesByFeedId(\n        brokenSwbFeeds,\n        priceFallback.endpoint,\n        { queryKey: priceFallback.queryKey }\n      );\n    }\n  } else {\n    // Handle non-API endpoint case - placeholder for now\n    crossbarResponse = await fetchSwbOraclePricesFromCrossbar(\n      swbFeedIds,\n      opts.crossbarEndpoint || \"https://crossbar.0.xyz\",\n      \"https://crossbar.switchboard.xyz\"\n    );\n    fallbackPricesByFeedId = {};\n  }\n\n  // Step 6: Map switchboardBanks to oracle prices\n  const bankOraclePriceMap = mapSwbBanksToOraclePrices(\n    switchboardBanks,\n    swbOracleAiDataByKey,\n    crossbarResponse\n  );\n\n  // Step 7: Map broken feeds to oracle prices\n  const brokenFeedOraclePriceMap = mapBrokenFeedsToOraclePrices(\n    switchboardBanks,\n    swbOracleAiDataByKey,\n    fallbackPricesByFeedId\n  );\n\n  // Step 8: Combine bank oracle prices and broken feed oracle prices\n  const combinedOraclePriceMap = new Map<string, OraclePrice>();\n  bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n    combinedOraclePriceMap.set(bankAddress, oraclePrice);\n  });\n  brokenFeedOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n    combinedOraclePriceMap.set(bankAddress, oraclePrice);\n  });\n\n  return {\n    bankOraclePriceMap: combinedOraclePriceMap,\n  };\n};\n\n/**\n * Fetches Switchboard oracle account information data via internal API endpoint\n * @param oracleKeys - Array of Switchboard oracle key strings\n * @returns Promise resolving to oracle account information indexed by oracle key\n */\nexport const fetchSwbOracleAccountsFromAPI = async (\n  oracleKeys: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<SwbOracleAiDataByKey> => {\n  const queryKey = opts?.queryKey ?? \"oracleKeys\";\n  const swbOracleKeyMapResponse = await fetch(`${apiEndpoint}?${queryKey}=` + oracleKeys.join(\",\"));\n\n  if (!swbOracleKeyMapResponse.ok) {\n    throw new Error(\"Failed to fetch swb oracle key map\");\n  }\n\n  const { data } = (await swbOracleKeyMapResponse.json()) as { data: SwbOracleAiDataByKey };\n\n  return data;\n};\n\n/**\n * Fetches Switchboard oracle account information data directly from the blockchain\n * @param oracleKeys - Array of Switchboard oracle key strings\n * @param connection - Solana RPC connection instance\n * @returns Promise resolving to oracle account information indexed by oracle key\n */\nexport const fetchSwbOracleAccountsFromChain = async (\n  oracleKeys: string[],\n  connection: Connection\n): Promise<SwbOracleAiDataByKey> => {\n  const swbOracleAiDataByKey: SwbOracleAiDataByKey = {};\n\n  // Get oracle account info\n  const oracleAis = await chunkedGetRawMultipleAccountInfoOrdered(connection, oracleKeys);\n\n  // Process each oracle account\n  oracleAis.forEach((oracleAi, idx) => {\n    if (!oracleAi?.data || idx >= oracleKeys.length) return;\n\n    const oracleKey = oracleKeys[idx];\n    if (!oracleKey) return;\n\n    const feedData = decodeSwitchboardPullFeedData(oracleAi.data);\n\n    const feedHash = Buffer.from(feedData.feed_hash).toString(\"hex\");\n    const queue = feedData.queue.toBase58();\n    const maxVariance = feedData.max_variance.toString();\n    const minResponses = feedData.min_responses;\n    const rawPrice = feedData.result.value.toString();\n    const stdev = feedData.result.std_dev.toString();\n\n    swbOracleAiDataByKey[oracleKey] = {\n      queue,\n      feedHash,\n      maxVariance,\n      minResponses,\n      rawPrice,\n      stdev,\n    };\n  });\n\n  return swbOracleAiDataByKey;\n};\n\n/**\n * Fetches Switchboard oracle price data via internal API endpoint using feed IDs\n * @param swbFeedIds - Array of Switchboard feed ID strings\n * @param apiEndpoint - API endpoint for fetching Switchboard oracle prices\n * @returns Promise resolving to feed response data indexed by feed ID\n */\nexport const fetchSwbOraclePricesFromAPI = async (\n  swbFeedIds: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, FeedResponse | undefined>> => {\n  const queryKey = opts?.queryKey ?? \"feedIds\";\n\n  const response = await fetch(`${apiEndpoint}?${queryKey}=` + swbFeedIds.join(\",\"));\n\n  if (!response.ok) {\n    throw new Error(\"Failed to fetch swb oracle data\");\n  }\n\n  return (await response.json()) as Record<string, FeedResponse | undefined>;\n};\n\n/**\n * Fetches Switchboard oracle price data via internal API endpoint using feed IDs\n * @param swbFeedIds - Array of Switchboard feed ID strings\n * @param apiEndpoint - API endpoint for fetching Switchboard oracle prices\n * @returns Promise resolving to feed response data indexed by feed ID\n */\nexport const fetchSwbOraclePricesFromCrossbar = async (\n  swbFeedIds: string[],\n  primaryCrossbarEndpoint: string,\n  fallbackCrossbarEndpoint: string\n): Promise<Record<string, FeedResponse | undefined>> => {\n  // fn to split array in chunks\n  function chunkArray(array: string[], chunkSize: number): string[][] {\n    const chunks: string[][] = [];\n    for (let i = 0; i < array.length; i += chunkSize) {\n      chunks.push(array.slice(i, i + chunkSize));\n    }\n    return chunks;\n  }\n\n  // Split feed hashes into chunks of 5 (to avoid overloading crossbar)\n  const chunks = chunkArray(swbFeedIds, 5);\n\n  // Create requests that try primary first, then fallback on failure\n  const requests = chunks.map((chunk) => {\n    const swbFeedIdsChunk = chunk.join(\",\");\n    return fetchCrossbarChunkWithFallback(\n      swbFeedIdsChunk,\n      primaryCrossbarEndpoint,\n      fallbackCrossbarEndpoint\n    );\n  });\n\n  // Execute all requests in parallel\n  const results = await Promise.allSettled(requests);\n\n  const feedMap: Record<string, FeedResponse | undefined> = {};\n  swbFeedIds.forEach((swbFeedId) => {\n    feedMap[swbFeedId] = undefined;\n  });\n\n  // Process successful responses\n  for (const result of results) {\n    if (result.status === \"fulfilled\") {\n      const { validFeeds } = result.value;\n\n      // Set valid feeds in the map\n      validFeeds.forEach((feed) => {\n        feedMap[feed.feedHash] = feed;\n      });\n\n      // Broken feeds remain undefined (already set above)\n    } else if (result.status === \"rejected\") {\n      console.error(\"Chunk request failed:\", result.reason);\n    }\n  }\n\n  return feedMap;\n};\n\n/**\n * Fetch a single chunk with fallback retry logic\n */\nasync function fetchCrossbarChunkWithFallback(\n  swbFeedIdsChunk: string,\n  primaryCrossbarEndpoint: string,\n  fallbackCrossbarEndpoint: string\n): Promise<{ validFeeds: FeedResponse[] }> {\n  // Try primary endpoint first\n  try {\n    return await fetchSingleCrossbarChunk(primaryCrossbarEndpoint, swbFeedIdsChunk, true);\n  } catch (primaryError) {\n    console.warn(\"Primary endpoint failed, trying fallback:\", primaryError);\n\n    // If primary fails, try fallback endpoint\n    try {\n      return await fetchSingleCrossbarChunk(fallbackCrossbarEndpoint, swbFeedIdsChunk, false);\n    } catch (fallbackError) {\n      console.error(\"Both primary and fallback endpoints failed:\", {\n        primary: primaryError,\n        fallback: fallbackError,\n      });\n      throw fallbackError;\n    }\n  }\n}\n\n/**\n * Fetch a single chunk from crossbar\n */\nasync function fetchSingleCrossbarChunk(\n  endpoint: string,\n  swbFeedIdsChunk: string,\n  isPrimary: boolean\n): Promise<{ validFeeds: FeedResponse[] }> {\n  try {\n    const response = await fetch(`${endpoint}/simulate/${swbFeedIdsChunk}`, {\n      headers: {\n        Accept: \"application/json\",\n      },\n      signal: AbortSignal.timeout(8000),\n    });\n\n    if (!response.ok) {\n      throw new Error(`${isPrimary ? \"Primary\" : \"Fallback\"} endpoint failed: ${response.status}`);\n    }\n\n    const payload = (await response.json()) as CrossbarSimulatePayload;\n\n    // Check validity of crossbar response\n    const brokenFeeds = payload\n      .filter((feed) => {\n        const result = feed.results[0];\n        return result === null || result === undefined || isNaN(Number(result));\n      })\n      .map((feed) => feed.feedHash);\n\n    const validFeeds = payload.filter((feed) => !brokenFeeds.includes(feed.feedHash));\n\n    if (brokenFeeds.length > 0) {\n      console.log(`Broken feeds from ${isPrimary ? \"primary\" : \"fallback\"} endpoint:`, brokenFeeds);\n    }\n\n    return { validFeeds };\n  } catch (error) {\n    console.error(`${isPrimary ? \"Primary\" : \"Fallback\"} crossbar chunk failed:`, error);\n    throw error;\n  }\n}\n","import { Connection } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { OraclePrice, OraclePriceDto } from \"../types\";\nimport { getOracleSourceFromBank } from \"../utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\nimport { decodeScopePriceAtIndex } from \"~/vendor/scope\";\n\ntype FetchScopeOracleOnChainOpts = {\n  mode: \"on-chain\";\n  connection: Connection;\n};\n\ntype FetchScopeOracleApiOpts = {\n  mode: \"api\";\n  scopeOnchainData: {\n    endpoint: string;\n    queryKey?: string;\n  };\n};\n\nexport type ScopeOracleServiceOpts = FetchScopeOracleOnChainOpts | FetchScopeOracleApiOpts;\n\n/**\n * A Scope price is identified by the OraclePrices account plus the entry index within it,\n * so requests are keyed as \"<oracleKey>:<entryIndex>\".\n */\nconst scopeRequestKey = (bank: BankType): string | undefined => {\n  const oracleKey = bank.config.oracleKeys[0]?.toBase58();\n  const entryIndex = bank.config.scopeEntryIndex;\n  // A Scope price is only identified together with its entry index; without it the bank is\n  // unpriceable rather than silently read from entry 0.\n  return oracleKey && entryIndex !== undefined ? `${oracleKey}:${entryIndex}` : undefined;\n};\n\n/**\n * Fetches Scope oracle data for all Scope-priced banks\n * @param banks - Array of bank objects\n * @param opts - Configuration including API endpoint usage and connection\n * @returns Promise resolving to map of bank addresses to their oracle prices\n */\nexport const fetchScopeOracleData = async (\n  banks: BankType[],\n  opts?: ScopeOracleServiceOpts\n): Promise<{\n  bankOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n  const scopeBanks = banks.filter((bank) => getOracleSourceFromBank(bank).key === \"scope\");\n\n  if (!scopeBanks.length) {\n    return {\n      bankOraclePriceMap: new Map<string, OraclePrice>(),\n    };\n  }\n\n  if (!opts) {\n    console.warn(\n      `fetchScopeOracleData: no scopeOpts provided; ${scopeBanks.length} scope bank(s) will have zero prices`\n    );\n    return {\n      bankOraclePriceMap: new Map<string, OraclePrice>(),\n    };\n  }\n\n  const uniqueRequestKeys = Array.from(\n    new Set(scopeBanks.map(scopeRequestKey).filter((key): key is string => key !== undefined))\n  );\n\n  let oraclePrices: Record<string, OraclePrice> = {};\n  if (!uniqueRequestKeys.length) {\n    console.warn(\n      \"fetchScopeOracleData: no scope bank carries a scopeEntryIndex; all priced at zero\"\n    );\n  } else if (opts.mode === \"api\") {\n    oraclePrices = await fetchScopeOraclePricesFromAPI(\n      uniqueRequestKeys,\n      opts.scopeOnchainData.endpoint,\n      { queryKey: opts.scopeOnchainData.queryKey }\n    );\n  } else {\n    oraclePrices = await fetchScopeOraclePricesFromChain(uniqueRequestKeys, opts.connection);\n  }\n\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n  const nowSeconds = Math.floor(Date.now() / 1000);\n\n  scopeBanks.forEach((bank) => {\n    const requestKey = scopeRequestKey(bank);\n    let oraclePrice = requestKey ? oraclePrices[requestKey] : undefined;\n\n    const age = oraclePrice ? nowSeconds - oraclePrice.timestamp.toNumber() : undefined;\n    // The program rejects future-dated entries as well as stale ones.\n    if (!oraclePrice || age === undefined || age < 0 || age > bank.config.oracleMaxAge) {\n      oraclePrice = {\n        priceRealtime: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        priceWeighted: {\n          price: new BigNumber(0),\n          confidence: new BigNumber(0),\n          lowestPrice: new BigNumber(0),\n          highestPrice: new BigNumber(0),\n        },\n        timestamp: oraclePrice?.timestamp ?? new BigNumber(0),\n      };\n    }\n\n    bankOraclePriceMap.set(bank.address.toBase58(), oraclePrice);\n  });\n\n  return {\n    bankOraclePriceMap,\n  };\n};\n\n/**\n * Fetches Scope oracle price data via internal API endpoint\n * @param requestKeys - Array of \"<oracleKey>:<entryIndex>\" request keys\n * @param apiEndpoint - Fetches scope oracle data with a GET request using the request keys as params\n * @returns Promise resolving to oracle prices indexed by request key\n */\nexport const fetchScopeOraclePricesFromAPI = async (\n  requestKeys: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, OraclePrice>> => {\n  const queryKey = opts?.queryKey ?? \"scopeKeys\";\n  const response = await fetch(`${apiEndpoint}?${queryKey}=${requestKeys.join(\",\")}`);\n\n  if (!response.ok) {\n    throw new Error(\"Failed to fetch scope oracle data\");\n  }\n\n  const { data } = (await response.json()) as { data: Record<string, OraclePriceDto> };\n\n  return Object.fromEntries(\n    Object.entries(data).map(([key, oraclePrice]) => [\n      key,\n      {\n        priceRealtime: {\n          price: BigNumber(oraclePrice.priceRealtime.price),\n          confidence: BigNumber(oraclePrice.priceRealtime.confidence),\n          lowestPrice: BigNumber(oraclePrice.priceRealtime.lowestPrice),\n          highestPrice: BigNumber(oraclePrice.priceRealtime.highestPrice),\n        },\n        priceWeighted: {\n          price: BigNumber(oraclePrice.priceWeighted.price),\n          confidence: BigNumber(oraclePrice.priceWeighted.confidence),\n          lowestPrice: BigNumber(oraclePrice.priceWeighted.lowestPrice),\n          highestPrice: BigNumber(oraclePrice.priceWeighted.highestPrice),\n        },\n        timestamp: BigNumber(oraclePrice.timestamp),\n      },\n    ])\n  ) as Record<string, OraclePrice>;\n};\n\n/**\n * Fetches Scope oracle data directly from the blockchain via RPC connection\n * @param requestKeys - Array of \"<oracleKey>:<entryIndex>\" request keys\n * @param connection - Solana RPC connection instance\n * @returns Promise resolving to oracle price data indexed by request key\n */\nexport const fetchScopeOraclePricesFromChain = async (\n  requestKeys: string[],\n  connection: Connection\n): Promise<Record<string, OraclePrice>> => {\n  const uniqueOracleKeys = Array.from(new Set(requestKeys.map((key) => key.split(\":\")[0])));\n  const oracleAis = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n    connection,\n    uniqueOracleKeys\n  );\n\n  const accountDataByKey: Record<string, Buffer | undefined> = {};\n  uniqueOracleKeys.forEach((oracleKey, index) => {\n    accountDataByKey[oracleKey] = oracleAis[index]?.data;\n  });\n\n  const oraclePriceByRequestKey: Record<string, OraclePrice> = {};\n\n  for (const requestKey of requestKeys) {\n    const [oracleKey, entryIndexRaw] = requestKey.split(\":\");\n    const data = accountDataByKey[oracleKey];\n\n    let price = new BigNumber(0);\n    let timestamp = new BigNumber(0);\n    if (data) {\n      try {\n        const entry = decodeScopePriceAtIndex(data, Number(entryIndexRaw));\n        price = entry.price;\n        timestamp = new BigNumber(entry.unixTimestamp);\n      } catch (e) {\n        console.error(`Failed to decode scope entry ${requestKey}`, e);\n      }\n    }\n\n    // Scope prices carry no confidence interval.\n    oraclePriceByRequestKey[requestKey] = {\n      priceRealtime: {\n        price,\n        confidence: new BigNumber(0),\n        lowestPrice: price,\n        highestPrice: price,\n      },\n      priceWeighted: {\n        price,\n        confidence: new BigNumber(0),\n        lowestPrice: price,\n        highestPrice: price,\n      },\n      timestamp,\n    };\n  }\n\n  return oraclePriceByRequestKey;\n};\n","import { Connection } from \"@solana/web3.js\";\n\nimport {\n  MultiplierAccountState,\n  MultiplierAccountStates,\n  OracleMultiplierBankInput,\n} from \"../types\";\nimport {\n  computeOracleMultipliers,\n  decodeMultiplierAccount,\n  getOracleMultiplierBankInput,\n} from \"../utils\";\n\nimport { BankType } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\n\ntype FetchOracleMultiplierOnChainOpts = {\n  mode: \"on-chain\";\n  connection: Connection;\n};\n\ntype FetchOracleMultiplierApiOpts = {\n  mode: \"api\";\n  multiplierData: {\n    endpoint: string;\n    queryKey?: string;\n  };\n};\n\nexport type OracleMultiplierServiceOpts =\n  | FetchOracleMultiplierOnChainOpts\n  | FetchOracleMultiplierApiOpts;\n\n/**\n * Fetches the exchange-rate multipliers for banks priced as `base feed x on-chain rate`\n * (Marinade mSOL rate, SPL stake-pool LST rate, Exponent PT linear rate)\n * @param banks - Array of bank objects\n * @param opts - Configuration including API endpoint usage and connection\n * @returns Promise resolving to multipliers indexed by bank address\n */\nexport const fetchOracleMultipliers = async (\n  banks: BankType[],\n  opts?: OracleMultiplierServiceOpts\n): Promise<Record<string, number>> => {\n  const inputs = banks\n    .map(getOracleMultiplierBankInput)\n    .filter((input): input is OracleMultiplierBankInput => input !== undefined);\n\n  if (!inputs.length) {\n    return {};\n  }\n\n  if (!opts) {\n    console.warn(\n      `fetchOracleMultipliers: no oracleMultiplierOpts provided; ${inputs.length} multiplier-priced bank(s) will have zero prices`\n    );\n    return {};\n  }\n\n  if (opts.mode === \"api\") {\n    return fetchOracleMultipliersFromAPI(inputs, opts.multiplierData.endpoint, {\n      queryKey: opts.multiplierData.queryKey,\n    });\n  }\n\n  return fetchOracleMultipliersFromChain(inputs, opts.connection);\n};\n\n/**\n * Multipliers for the given banks, reading the accounts via the internal API endpoint.\n */\nexport const fetchOracleMultipliersFromAPI = async (\n  inputs: OracleMultiplierBankInput[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<Record<string, number>> => {\n  const accountStates = await fetchMultiplierAccountStatesFromAPI(\n    inputs.map((input) => input.multiplierAccountKey),\n    apiEndpoint,\n    opts\n  );\n  return computeOracleMultipliers(inputs, accountStates);\n};\n\n/**\n * Multipliers for the given banks, reading the accounts directly from the chain.\n */\nexport const fetchOracleMultipliersFromChain = async (\n  inputs: OracleMultiplierBankInput[],\n  connection: Connection\n): Promise<Record<string, number>> => {\n  const accountStates = await fetchMultiplierAccountStates(\n    inputs.map((input) => input.multiplierAccountKey),\n    connection\n  );\n  return computeOracleMultipliers(inputs, accountStates);\n};\n\n/**\n * Reads multiplier accounts via an internal API endpoint that runs `fetchMultiplierAccountStates`\n * server-side and returns `{ data: MultiplierAccountStates }`.\n * @param accountKeys - Multiplier account addresses (base58)\n * @param apiEndpoint - GET endpoint\n * @param opts.queryKey - Name of the account-list param (default `multiplierAccounts`)\n */\nexport const fetchMultiplierAccountStatesFromAPI = async (\n  accountKeys: string[],\n  apiEndpoint: string,\n  opts?: { queryKey?: string }\n): Promise<MultiplierAccountStates> => {\n  const queryKey = opts?.queryKey ?? \"multiplierAccounts\";\n  const uniqueKeys = Array.from(new Set(accountKeys));\n  const response = await fetch(`${apiEndpoint}?${queryKey}=${uniqueKeys.join(\",\")}`);\n\n  if (!response.ok) {\n    throw new Error(\"Failed to fetch price multiplier data\");\n  }\n\n  const { data } = (await response.json()) as { data: MultiplierAccountStates };\n  return data;\n};\n\n/**\n * Reads and decodes multiplier accounts from the chain.\n * @param accountKeys - Multiplier account addresses (base58)\n * @param connection - Solana RPC connection instance\n */\nexport const fetchMultiplierAccountStates = async (\n  accountKeys: string[],\n  connection: Connection\n): Promise<MultiplierAccountStates> => {\n  const uniqueKeys = Array.from(new Set(accountKeys));\n  const accountAis = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(connection, uniqueKeys);\n\n  const states: Record<string, MultiplierAccountState> = {};\n  uniqueKeys.forEach((accountKey, index) => {\n    const data = accountAis[index]?.data;\n    if (!data) {\n      console.error(`Missing multiplier account ${accountKey}`);\n      return;\n    }\n    const state = decodeMultiplierAccount(data);\n    if (!state) {\n      console.error(`Unrecognized multiplier account ${accountKey}`);\n      return;\n    }\n    states[accountKey] = state;\n  });\n\n  const hasStakePool = Object.values(states).some((state) => state.kind === \"stakePool\");\n  const currentEpoch = hasStakePool ? (await connection.getEpochInfo()).epoch : 0;\n\n  return { states, currentEpoch };\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { OraclePrice } from \"../types\";\nimport { getOracleSourceFromOracleSetup } from \"../utils\";\n\nimport { fetchOracleMultipliers, OracleMultiplierServiceOpts } from \"./oracle-multiplier.service\";\nimport { fetchPythOracleData, PythOracleServiceOpts } from \"./pyth-oracle.service\";\nimport { fetchScopeOracleData, ScopeOracleServiceOpts } from \"./scope-oracle.service\";\nimport { fetchSwbOracleData, SwbOracleServiceOpts } from \"./swb-oracle.service\";\n\nimport { ZERO_ORACLE_KEY } from \"~/constants\";\nimport { BankType, RiskTier, OracleSetup } from \"~/services/bank\";\n\n/**\n * Fetches comprehensive oracle data from multiple providers (Pyth and Switchboard)\n * Implements intelligent routing based on oracle type and risk tier:\n * - Zero oracles: Returns 0 price immediately\n * - Isolated assets: Uses enriched bank price (no external calls)\n * - Collateral assets: Uses Pyth/Switchboard with price fallback\n *\n * @param banks - Array of bank objects\n * @param opts - Optional configuration including API endpoint usage, connection, and enriched banks\n * @returns Promise resolving to oracle price maps indexed by bank address and mint address\n */\nexport const fetchOracleData = async (\n  banks: BankType[],\n  opts: {\n    pythOpts: PythOracleServiceOpts;\n    swbOpts: SwbOracleServiceOpts;\n    scopeOpts?: ScopeOracleServiceOpts;\n    oracleMultiplierOpts?: OracleMultiplierServiceOpts;\n    isolatedBanksOpts?: {\n      fetchPrices: boolean;\n      staticPricesByBank?: Record<string, number>;\n    };\n  }\n): Promise<{\n  bankOraclePriceMap: Map<string, OraclePrice>;\n  mintOraclePriceMap: Map<string, OraclePrice>;\n}> => {\n  const { zeroOracleBanks, isolatedAssetBanks, collateralAssetBanks, fixedAssetBanks } =\n    classifyBanksForOracleStrategy(banks);\n\n  // we don't fetch oracle data for zero oracle banks and use the enriched bank price for isolated assets\n  const zeroResults = handleZeroOracleBanks(zeroOracleBanks);\n\n  const fetchIsolatedPrice = opts?.isolatedBanksOpts?.fetchPrices ?? false;\n  const isolatedResults = fetchIsolatedPrice\n    ? handleIsolatedAssetBanks(isolatedAssetBanks, opts?.isolatedBanksOpts?.staticPricesByBank)\n    : new Map();\n\n  // exchange-rate multipliers for banks priced as `base feed x on-chain rate`\n  const multiplierByBank = await fetchOracleMultipliers(banks, opts.oracleMultiplierOpts);\n\n  // handle fixed price assets\n  const fixedResults = handleFixedOracleBanks(fixedAssetBanks, multiplierByBank);\n\n  const assetBanks = [...collateralAssetBanks, ...(fetchIsolatedPrice ? isolatedAssetBanks : [])];\n\n  // fetch oracle for asset banks\n  const assetResults = await handleAssetBanks(assetBanks, {\n    pythOpts: opts.pythOpts,\n    swbOpts: opts.swbOpts,\n    scopeOpts: opts.scopeOpts,\n    priceCoeffByBank: multiplierByBank,\n  });\n\n  return mergeOracleResults([zeroResults, isolatedResults, assetResults, fixedResults], banks);\n};\n\n/**\n * Classifies banks based on their oracle setup and risk tier to determine pricing strategy\n * @param banks - Array of bank objects to classify\n * @returns Object containing arrays of banks categorized by pricing strategy\n */\nfunction classifyBanksForOracleStrategy(banks: BankType[]): {\n  zeroOracleBanks: BankType[];\n  isolatedAssetBanks: BankType[];\n  collateralAssetBanks: BankType[];\n  fixedAssetBanks: BankType[];\n} {\n  const zeroOracleBanks: BankType[] = [];\n  const isolatedAssetBanks: BankType[] = [];\n  const collateralAssetBanks: BankType[] = [];\n  const fixedAssetBanks: BankType[] = [];\n\n  banks.forEach((bank) => {\n    const hasZeroOracle = bank.config.oracleKeys.some((key) =>\n      key.equals(new PublicKey(ZERO_ORACLE_KEY))\n    );\n\n    if (hasZeroOracle) {\n      zeroOracleBanks.push(bank);\n      return;\n    }\n\n    const isIsolatedAsset = bank.config.riskTier === RiskTier.Isolated;\n    const isFixedAsset = getOracleSourceFromOracleSetup(bank.config.oracleSetup).key === \"fixed\";\n\n    if (isFixedAsset) {\n      fixedAssetBanks.push(bank);\n    } else if (isIsolatedAsset) {\n      isolatedAssetBanks.push(bank);\n    } else {\n      collateralAssetBanks.push(bank);\n    }\n  });\n\n  return {\n    zeroOracleBanks,\n    isolatedAssetBanks,\n    collateralAssetBanks,\n    fixedAssetBanks,\n  };\n}\n\nfunction handleFixedOracleBanks(\n  banks: BankType[],\n  multiplierByBank: Record<string, number>\n): Map<string, OraclePrice> {\n  const oracleMap = new Map<string, OraclePrice>();\n\n  banks.forEach((bank) => {\n    // PTFixed prices as its PT linear rate directly; fixedPrice only stores the start price.\n    // Without a valid rate the bank is unpriceable (zero), like any other failed oracle -\n    // falling back to the start price would understate a borrowed PT near maturity.\n    const isPtFixed = bank.config.oracleSetup === OracleSetup.PTFixed;\n    const multiplier = multiplierByBank[bank.address.toBase58()];\n    const fixedPrice = isPtFixed\n      ? Number.isFinite(multiplier)\n        ? BigNumber(multiplier)\n        : BigNumber(0)\n      : bank.config.fixedPrice;\n\n    const fixedOraclePrice: OraclePrice = {\n      priceRealtime: {\n        price: fixedPrice,\n        confidence: BigNumber(0),\n        lowestPrice: fixedPrice,\n        highestPrice: fixedPrice,\n      },\n      priceWeighted: {\n        price: fixedPrice,\n        confidence: BigNumber(0),\n        lowestPrice: fixedPrice,\n        highestPrice: fixedPrice,\n      },\n      timestamp: BigNumber(Date.now()),\n    };\n\n    oracleMap.set(bank.address.toBase58(), fixedOraclePrice);\n  });\n\n  return oracleMap;\n}\n\n/**\n * Handles banks with zero oracles by returning zero prices\n * @param banks - Array of zero oracle banks\n * @returns Map of bank addresses to zero oracle prices\n */\nfunction handleZeroOracleBanks(banks: BankType[]): Map<string, OraclePrice> {\n  const oracleMap = new Map<string, OraclePrice>();\n\n  banks.forEach((bank) => {\n    const zeroOraclePrice: OraclePrice = {\n      priceRealtime: {\n        price: BigNumber(0),\n        confidence: BigNumber(0),\n        lowestPrice: BigNumber(0),\n        highestPrice: BigNumber(0),\n      },\n      priceWeighted: {\n        price: BigNumber(0),\n        confidence: BigNumber(0),\n        lowestPrice: BigNumber(0),\n        highestPrice: BigNumber(0),\n      },\n      timestamp: BigNumber(Date.now()),\n    };\n\n    oracleMap.set(bank.address.toBase58(), zeroOraclePrice);\n  });\n\n  return oracleMap;\n}\n\n/**\n * Handles isolated asset banks by using static prices\n * @param banks - Array of isolated asset banks\n * @param staticPrices - Optional static prices for isolated assets\n * @returns Map of bank addresses to oracle prices derived from static prices\n */\nfunction handleIsolatedAssetBanks(\n  banks: BankType[],\n  staticPrices?: Record<string, number>\n): Map<string, OraclePrice> {\n  const oracleMap = new Map<string, OraclePrice>();\n\n  banks.forEach((bank) => {\n    const price = staticPrices?.[bank.address.toBase58()] ?? 0;\n\n    const oraclePrice: OraclePrice = {\n      priceRealtime: {\n        price: BigNumber(price),\n        confidence: BigNumber(0),\n        lowestPrice: BigNumber(price),\n        highestPrice: BigNumber(price),\n      },\n      priceWeighted: {\n        price: BigNumber(price),\n        confidence: BigNumber(0),\n        lowestPrice: BigNumber(price),\n        highestPrice: BigNumber(price),\n      },\n      timestamp: BigNumber(Date.now()),\n    };\n\n    oracleMap.set(bank.address.toBase58(), oraclePrice);\n  });\n\n  return oracleMap;\n}\n\n/**\n * Handles banks using existing oracle infrastructure (Pyth + Switchboard + price fallback)\n * @param banks - Array of banks\n * @param opts - Optional configuration\n * @returns Map of bank addresses to oracle prices from external oracle providers\n */\nasync function handleAssetBanks(\n  banks: BankType[],\n  opts: {\n    pythOpts: PythOracleServiceOpts;\n    swbOpts: SwbOracleServiceOpts;\n    scopeOpts?: ScopeOracleServiceOpts;\n    priceCoeffByBank: Record<string, number>;\n  }\n): Promise<Map<string, OraclePrice>> {\n  if (banks.length === 0) {\n    return new Map<string, OraclePrice>();\n  }\n\n  const [pythData, swbData, scopeData] = await Promise.all([\n    fetchPythOracleData(banks, opts.pythOpts, opts.priceCoeffByBank),\n    fetchSwbOracleData(banks, opts.swbOpts),\n    fetchScopeOracleData(banks, opts.scopeOpts),\n  ]);\n\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n\n  // Map pyth data\n  pythData.bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n    bankOraclePriceMap.set(bankAddress, oraclePrice);\n  });\n\n  // Map swb data\n  swbData.bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n    bankOraclePriceMap.set(bankAddress, oraclePrice);\n  });\n\n  // Map scope data\n  scopeData.bankOraclePriceMap.forEach((oraclePrice, bankAddress) => {\n    bankOraclePriceMap.set(bankAddress, oraclePrice);\n  });\n\n  // Check for any missing oracle prices and set to zero as fallback\n  banks.forEach((bank) => {\n    const bankAddress = bank.address.toBase58();\n    const oraclePrice = bankOraclePriceMap.get(bankAddress);\n    if (!oraclePrice) {\n      bankOraclePriceMap.set(bankAddress, {\n        priceRealtime: {\n          price: BigNumber(0),\n          confidence: BigNumber(0),\n          lowestPrice: BigNumber(0),\n          highestPrice: BigNumber(0),\n        },\n        priceWeighted: {\n          price: BigNumber(0),\n          confidence: BigNumber(0),\n          lowestPrice: BigNumber(0),\n          highestPrice: BigNumber(0),\n        },\n        timestamp: BigNumber(Date.now()),\n      });\n    }\n  });\n\n  return bankOraclePriceMap;\n}\n\n/**\n * Merges oracle results from different strategies and builds mint-based oracle map\n * @param results - Array of oracle price maps from different strategies\n * @param allBanks - All banks for mint mapping\n * @returns Combined oracle price maps indexed by bank address and mint address\n */\nfunction mergeOracleResults(\n  results: Map<string, OraclePrice>[],\n  allBanks: BankType[]\n): {\n  bankOraclePriceMap: Map<string, OraclePrice>;\n  mintOraclePriceMap: Map<string, OraclePrice>;\n} {\n  const bankOraclePriceMap = new Map<string, OraclePrice>();\n  const mintOraclePriceMap = new Map<string, OraclePrice>();\n\n  // Merge all oracle price maps\n  results.forEach((resultMap) => {\n    resultMap.forEach((oraclePrice, bankAddress) => {\n      bankOraclePriceMap.set(bankAddress, oraclePrice);\n    });\n  });\n\n  // Build mint-based oracle map\n  allBanks.forEach((bank) => {\n    const bankAddress = bank.address.toBase58();\n    const oraclePrice = bankOraclePriceMap.get(bankAddress);\n    if (oraclePrice) {\n      const mintAddress = bank.mint.toBase58();\n      mintOraclePriceMap.set(mintAddress, oraclePrice);\n    }\n  });\n\n  return {\n    bankOraclePriceMap,\n    mintOraclePriceMap,\n  };\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { BankType, BankConfigType, RiskTier, OperationalState } from \"../../types\";\n\nimport { getAssetQuantity, getLiabilityQuantity } from \"./share-conversions.utils\";\n\nimport { MarginRequirementType } from \"~/services/account/types\";\nimport { OraclePrice, PriceBias, getPrice } from \"~/services/price\";\nimport { Amount } from \"~/types\";\nimport { toBigNumber } from \"~/utils\";\n\n/**\n * Weight, USD Value & Leverage Computation Utilities\n * ==================================================\n */\n\n/**\n * Determines if a margin requirement type uses the time-weighted (TWAP/EMA) price.\n *\n * Mirrors the program's `RequirementType::get_oracle_price_type`: Initial and Equity use the\n * time-weighted price, while Maintenance uses the real-time price (more accurate for liquidations).\n *\n * @param marginRequirement - The margin requirement type to check\n * @returns True for Initial and Equity (time-weighted), false for Maintenance (real-time)\n */\nexport function isWeightedPrice(marginRequirement: MarginRequirementType): boolean {\n  return (\n    marginRequirement === MarginRequirementType.Initial ||\n    marginRequirement === MarginRequirementType.Equity\n  );\n}\n\n/**\n * Configuration for computing asset weight\n */\nexport interface GetAssetWeightParams {\n  /** The bank to compute weight for */\n  bank: BankType;\n  /** Which margin requirement level (Initial, Maintenance, Equity) */\n  marginRequirement: MarginRequirementType;\n  /** Oracle price data (needed for soft limit calculations) */\n  oraclePrice: OraclePrice;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n  /** Optional emode weight overrides */\n  activeEmodeWeights?: {\n    assetWeightInit: BigNumber;\n    assetWeightMaint: BigNumber;\n  };\n  /** Skip soft limit scaling for Initial margin (default: false) */\n  ignoreSoftLimits?: boolean;\n}\n\n/**\n * Computes the asset weight for a bank based on margin requirement type.\n *\n * Asset weights determine how much collateral value an asset provides:\n * - **Initial**: Weight for opening new positions (includes soft limit scaling)\n * - **Maintenance**: Weight for liquidation threshold\n * - **Equity**: No weighting (1.0)\n *\n * For Initial margin, if the total bank collateral exceeds `totalAssetValueInitLimit`,\n * the weight is scaled down proportionally to limit systemic risk.\n *\n * @param params - Configuration object for asset weight computation\n * @returns Asset weight as a decimal (e.g., 0.9 means 90% collateral value)\n *\n * @example\n * ```typescript\n * // Get initial margin weight with soft limits\n * const weight = getAssetWeight({\n *   bank,\n *   marginRequirement: MarginRequirementType.Initial,\n *   oraclePrice,\n * });\n *\n * // Get weight ignoring soft limits\n * const rawWeight = getAssetWeight({\n *   bank,\n *   marginRequirement: MarginRequirementType.Initial,\n *   oraclePrice,\n *   ignoreSoftLimits: true,\n * });\n * ```\n */\nexport function getAssetWeight(params: GetAssetWeightParams): BigNumber {\n  const {\n    bank,\n    marginRequirement,\n    oraclePrice,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n    ignoreSoftLimits,\n  } = params;\n\n  // Isolated-tier banks contribute 0 asset value for all requirement types.\n  // Mirrors the program (RiskTier::Isolated => Ok((ZERO, ZERO)) in calc_weighted_asset_value_standalone).\n  if (bank.config.riskTier === RiskTier.Isolated) {\n    return new BigNumber(0);\n  }\n\n  // ReduceOnly banks should not be counted as collateral for Initial checks.\n  // Mirrors the program ((ReduceOnly, Initial) => Ok((ZERO, ...))). Maintenance/Equity keep normal weights.\n  if (\n    marginRequirement === MarginRequirementType.Initial &&\n    bank.config.operationalState === OperationalState.ReduceOnly\n  ) {\n    return new BigNumber(0);\n  }\n\n  // if emode weight is lower then bank weight, bank weight should be used\n  const assetWeightInit = BigNumber.max(\n    activeEmodeWeights?.assetWeightInit ?? BigNumber(0),\n    bank.config.assetWeightInit\n  );\n  const assetWeightMaint = BigNumber.max(\n    activeEmodeWeights?.assetWeightMaint ?? BigNumber(0),\n    bank.config.assetWeightMaint\n  );\n\n  switch (marginRequirement) {\n    case MarginRequirementType.Initial: {\n      const isSoftLimitDisabled = bank.config.totalAssetValueInitLimit.isZero();\n      if (ignoreSoftLimits || isSoftLimitDisabled) return assetWeightInit;\n      const totalBankCollateralValue = computeAssetUsdValue({\n        bank,\n        oraclePrice,\n        assetShares: bank.totalAssetShares,\n        // Unweighted (Equity => weight 1) total bank value, priced at the same time-weighted\n        // low price used for the Initial balance valuation (program: maybe_get_asset_weight_init_discount).\n        marginRequirement: MarginRequirementType.Equity,\n        priceBias: PriceBias.Lowest,\n        assetShareValueMultiplier,\n        activeEmodeWeights,\n      });\n      if (totalBankCollateralValue.isGreaterThan(bank.config.totalAssetValueInitLimit)) {\n        return bank.config.totalAssetValueInitLimit\n          .div(totalBankCollateralValue)\n          .times(assetWeightInit);\n      } else {\n        return assetWeightInit;\n      }\n    }\n    case MarginRequirementType.Maintenance:\n      return assetWeightMaint;\n    case MarginRequirementType.Equity:\n      return new BigNumber(1);\n    default:\n      throw new Error(\"Invalid margin requirement type\");\n  }\n}\n\n/**\n * Computes the liability weight for a bank based on margin requirement type.\n *\n * Liability weights determine how much a borrowed position counts against health:\n * - **Initial**: Weight for opening new borrows\n * - **Maintenance**: Weight for liquidation threshold\n * - **Equity**: No weighting (1.0)\n *\n * Higher weights mean more conservative (borrow counts more against health).\n *\n * @param config - The bank configuration containing weight parameters\n * @param marginRequirementType - Which margin requirement level\n * @returns Liability weight as a decimal (e.g., 1.1 means borrow counts as 110% of value)\n *\n * @example\n * ```typescript\n * const weight = getLiabilityWeight(bank.config, MarginRequirementType.Initial);\n * ```\n */\nexport function getLiabilityWeight(\n  config: BankConfigType,\n  marginRequirementType: MarginRequirementType\n): BigNumber {\n  switch (marginRequirementType) {\n    case MarginRequirementType.Initial:\n      return config.liabilityWeightInit;\n    case MarginRequirementType.Maintenance:\n      return config.liabilityWeightMaint;\n    case MarginRequirementType.Equity:\n      return new BigNumber(1);\n    default:\n      throw new Error(\"Invalid margin requirement type\");\n  }\n}\n\n/**\n * Computes the maximum leverage achievable between deposit and borrow banks.\n *\n * Max leverage is determined by the loan-to-value (LTV) ratio, which is the ratio\n * of asset weight to liability weight. The formula is: `maxLeverage = 1 / (1 - LTV)`.\n *\n * @param depositBank - The bank being used as collateral\n * @param borrowBank - The bank being borrowed against\n * @param opts - Optional weight overrides\n * @param opts.assetWeightInit - Override deposit bank's initial asset weight\n * @param opts.liabilityWeightInit - Override borrow bank's initial liability weight\n * @returns Object containing maxLeverage and ltv (loan-to-value ratio)\n *\n * @example\n * ```typescript\n * const { maxLeverage, ltv } = computeMaxLeverage(solBank, usdcBank);\n * console.log(`Max leverage: ${maxLeverage.toFixed(2)}x, LTV: ${(ltv * 100).toFixed(1)}%`);\n * ```\n */\nexport function computeMaxLeverage(\n  depositBank: BankType,\n  borrowBank: BankType,\n  opts?: { assetWeightInit?: BigNumber; liabilityWeightInit?: BigNumber }\n): { maxLeverage: number; ltv: number } {\n  const assetWeightInit = opts?.assetWeightInit || depositBank.config.assetWeightInit;\n  const liabilityWeightInit = opts?.liabilityWeightInit || borrowBank.config.liabilityWeightInit;\n\n  const ltv = assetWeightInit.div(liabilityWeightInit).toNumber();\n  const maxLeverage = 1 / (1 - ltv);\n\n  return {\n    maxLeverage,\n    ltv,\n  };\n}\n\n/**\n * Computes the total deposit and borrow amounts needed to achieve a target leverage.\n *\n * This is used for leveraged looping strategies where you:\n * 1. Deposit collateral\n * 2. Borrow against it\n * 3. Swap borrowed assets to deposit asset\n * 4. Repeat to achieve desired leverage\n *\n * The target leverage is automatically clamped between 1x and the maximum achievable leverage.\n *\n * @param principal - Initial collateral amount (in deposit token)\n * @param targetLeverage - Desired leverage multiplier (e.g., 3 for 3x)\n * @param depositBank - The bank receiving deposits\n * @param borrowBank - The bank being borrowed from\n * @param depositOracleInfo - Oracle price for deposit asset\n * @param borrowOracleInfo - Oracle price for borrow asset\n * @param opts - Optional weight overrides\n * @returns Total amounts needed (totalDepositAmount, totalBorrowAmount)\n *\n * @example\n * ```typescript\n * const { totalDepositAmount, totalBorrowAmount } = computeLoopingParams(\n *   new BigNumber(1000), // 1000 SOL principal\n *   3,                   // 3x leverage\n *   solBank,\n *   usdcBank,\n *   solOraclePrice,\n *   usdcOraclePrice\n * );\n * ```\n */\nexport function computeLoopingParams(\n  principal: Amount,\n  targetLeverage: number,\n  depositBank: BankType,\n  borrowBank: BankType,\n  depositPriceUsd: number,\n  borrowPriceUsd: number,\n  opts?: { assetWeightInit?: BigNumber; liabilityWeightInit?: BigNumber }\n): { totalBorrowAmount: BigNumber; totalDepositAmount: BigNumber } {\n  const initialCollateral = toBigNumber(principal);\n  const { maxLeverage } = computeMaxLeverage(depositBank, borrowBank, opts);\n\n  // Clamp target leverage to valid range instead of throwing\n  let clampedLeverage = targetLeverage;\n\n  if (targetLeverage < 1) {\n    console.warn(`computeLoopingParams: targetLeverage ${targetLeverage} < 1, clamping to 1`);\n    clampedLeverage = 1;\n  } else if (targetLeverage > maxLeverage) {\n    console.warn(\n      `computeLoopingParams: targetLeverage ${targetLeverage} > maxLeverage ${maxLeverage}, clamping to ${maxLeverage}`\n    );\n    clampedLeverage = maxLeverage;\n  }\n\n  const totalDepositAmount = initialCollateral.times(new BigNumber(clampedLeverage));\n  const additionalDepositAmount = totalDepositAmount.minus(initialCollateral);\n  const totalBorrowAmount = additionalDepositAmount\n    .times(new BigNumber(depositPriceUsd))\n    .div(new BigNumber(borrowPriceUsd));\n\n  return {\n    totalBorrowAmount: totalBorrowAmount.decimalPlaces(\n      borrowBank.mintDecimals,\n      BigNumber.ROUND_DOWN\n    ),\n    totalDepositAmount: totalDepositAmount.decimalPlaces(\n      depositBank.mintDecimals,\n      BigNumber.ROUND_DOWN\n    ),\n  };\n}\n\n/**\n * Configuration for computing USD value from token quantity\n */\nexport interface ComputeUsdValueParams {\n  /** The bank for decimal scaling */\n  bank: BankType;\n  /** Oracle price data */\n  oraclePrice: OraclePrice;\n  /** Token quantity to value */\n  quantity: BigNumber;\n  /** Price bias to apply (None, Lowest, Highest) */\n  priceBias: PriceBias;\n  /** Whether to use weighted (EMA) or spot price */\n  isWeightedPrice: boolean;\n  /** Collateral/liability weight to apply (default: 1) */\n  weight?: BigNumber;\n  /** Whether to scale by token decimals (default: true) */\n  scaleToBase?: boolean;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n}\n\n/**\n * Core USD value computation from token quantity.\n *\n * This is the fundamental pricing function that:\n * 1. Retrieves the appropriate price (spot or weighted, with bias)\n * 2. Applies asset share multiplier for integrated protocols\n * 3. Applies collateral/liability weight\n * 4. Scales by token decimals to get USD value\n *\n * @param params - Configuration object for USD value computation\n * @returns USD value of the token quantity\n *\n * @example\n * ```typescript\n * // Basic asset valuation\n * const usdValue = computeUsdValue({\n *   bank,\n *   oraclePrice,\n *   quantity: new BigNumber(100),\n *   priceBias: PriceBias.Lowest,\n *   weightedPrice: true,\n *   weight: new BigNumber(0.9), // 90% weight\n * });\n *\n * // Kamino integration with multiplier\n * const kaminoValue = computeUsdValue({\n *   bank,\n *   oraclePrice,\n *   quantity: new BigNumber(100),\n *   priceBias: PriceBias.Lowest,\n *   weightedPrice: true,\n *   weight: new BigNumber(0.9),\n *   assetShareValueMultiplier: kaminoMultiplier,\n * });\n * ```\n */\nexport function computeUsdValue(params: ComputeUsdValueParams): BigNumber {\n  const {\n    bank,\n    oraclePrice,\n    quantity,\n    priceBias,\n    isWeightedPrice,\n    weight = new BigNumber(1),\n    scaleToBase = true,\n    assetShareValueMultiplier,\n  } = params;\n\n  const price = getPrice(oraclePrice, priceBias, isWeightedPrice);\n  return quantity\n    .times(assetShareValueMultiplier ?? 1)\n    .times(price)\n    .times(weight)\n    .dividedBy(scaleToBase ? 10 ** bank.mintDecimals : 1);\n}\n\n/**\n * Configuration for computing liability USD value\n */\nexport interface ComputeLiabilityUsdValueParams {\n  /** The bank containing the liability */\n  bank: BankType;\n  /** Oracle price data */\n  oraclePrice: OraclePrice;\n  /** Number of liability shares */\n  liabilityShares: BigNumber;\n  /** Which margin level (Initial, Maintenance, Equity) */\n  marginRequirement: MarginRequirementType;\n  /** Price bias to apply (Highest for conservative liability valuation) */\n  priceBias: PriceBias;\n}\n\n/**\n * Computes the USD value of a liability position (borrow).\n *\n * Converts liability shares to quantity, applies price and liability weight.\n *\n * @param params - Configuration object for liability USD value computation\n * @returns Weighted USD value of the liability\n *\n * @example\n * ```typescript\n * const liabilityValue = computeLiabilityUsdValue({\n *   bank,\n *   oraclePrice,\n *   liabilityShares: new BigNumber(50),\n *   marginRequirement: MarginRequirementType.Initial,\n *   priceBias: PriceBias.Highest,\n * });\n * ```\n */\nexport function computeLiabilityUsdValue(params: ComputeLiabilityUsdValueParams): BigNumber {\n  const { bank, oraclePrice, liabilityShares, marginRequirement, priceBias } = params;\n\n  const liabilityQuantity = getLiabilityQuantity(bank, liabilityShares);\n  const liabilityWeight = getLiabilityWeight(bank.config, marginRequirement);\n  const isWeighted = isWeightedPrice(marginRequirement);\n  return computeUsdValue({\n    bank,\n    oraclePrice,\n    quantity: liabilityQuantity,\n    priceBias,\n    isWeightedPrice: isWeighted,\n    weight: liabilityWeight,\n  });\n}\n\n/**\n * Configuration for computing asset USD value\n */\nexport interface ComputeAssetUsdValueParams {\n  /** The bank containing the asset */\n  bank: BankType;\n  /** Oracle price data */\n  oraclePrice: OraclePrice;\n  /** Number of asset shares */\n  assetShares: BigNumber;\n  /** Which margin level (Initial, Maintenance, Equity) */\n  marginRequirement: MarginRequirementType;\n  /** Price bias to apply (Lowest for conservative asset valuation) */\n  priceBias: PriceBias;\n  /** Asset share value multiplier for integrated protocols (Kamino, Drift) */\n  assetShareValueMultiplier?: BigNumber;\n  /** Optional emode weight overrides */\n  activeEmodeWeights?: {\n    assetWeightMaint: BigNumber;\n    assetWeightInit: BigNumber;\n  };\n}\n\n/**\n * Computes the USD value of an asset position (deposit).\n *\n * Converts asset shares to quantity, applies price and asset weight (including soft limits).\n *\n * @param params - Configuration object for asset USD value computation\n * @returns Weighted USD value of the asset\n *\n * @example\n * ```typescript\n * const assetValue = computeAssetUsdValue({\n *   bank,\n *   oraclePrice,\n *   assetShares: new BigNumber(100),\n *   marginRequirement: MarginRequirementType.Initial,\n *   priceBias: PriceBias.Lowest,\n * });\n * ```\n */\nexport function computeAssetUsdValue(params: ComputeAssetUsdValueParams): BigNumber {\n  const {\n    bank,\n    oraclePrice,\n    assetShares,\n    marginRequirement,\n    priceBias,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n  } = params;\n  // Asset Quantity is the amount of the asset in the bank\n  // For integrated protocols like Kamino/Drift, this is the collateral token amount (ctoken)\n  // For regular banks this is the token amount\n  const assetQuantity = getAssetQuantity(bank, assetShares);\n  const assetWeight = getAssetWeight({\n    bank,\n    marginRequirement,\n    oraclePrice,\n    assetShareValueMultiplier,\n    activeEmodeWeights,\n  });\n  const isWeighted = isWeightedPrice(marginRequirement);\n  return computeUsdValue({\n    bank,\n    oraclePrice,\n    quantity: assetQuantity,\n    priceBias,\n    isWeightedPrice: isWeighted,\n    weight: assetWeight,\n    assetShareValueMultiplier,\n  });\n}\n\n/**\n * Computes the Total Value Locked (TVL) for a bank.\n *\n * TVL = (Total Assets USD Value) - (Total Liabilities USD Value)\n *\n * Uses Equity margin requirement (no weighting) and neutral price bias.\n *\n * @param bank - The bank to compute TVL for\n * @param oraclePrice - Oracle price data\n * @returns Net TVL in USD\n *\n * @example\n * ```typescript\n * const tvl = computeTvl(usdcBank, usdcOraclePrice);\n * console.log(`Bank TVL: $${tvl.toFormat(2)}`);\n * ```\n */\nexport function computeTvl(bank: BankType, oraclePrice: OraclePrice): BigNumber {\n  return computeAssetUsdValue({\n    bank,\n    oraclePrice,\n    assetShares: bank.totalAssetShares,\n    marginRequirement: MarginRequirementType.Equity,\n    priceBias: PriceBias.None,\n  }).minus(\n    computeLiabilityUsdValue({\n      bank,\n      oraclePrice,\n      liabilityShares: bank.totalLiabilityShares,\n      marginRequirement: MarginRequirementType.Equity,\n      priceBias: PriceBias.None,\n    })\n  );\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { BankVaultType } from \"../../types\";\n\nimport {\n  PDA_BANK_LIQUIDITY_VAULT_SEED,\n  PDA_BANK_INSURANCE_VAULT_SEED,\n  PDA_BANK_FEE_VAULT_SEED,\n  PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED,\n  PDA_BANK_INSURANCE_VAULT_AUTH_SEED,\n  PDA_BANK_FEE_VAULT_AUTH_SEED,\n} from \"~/utils\";\n\n/**\n * Vault PDA Utilities\n * ===================\n */\n\n/**\n * Gets the PDA seed for a specific bank vault type.\n *\n * @param type - The vault type (Liquidity, Insurance, or Fee)\n * @returns The PDA seed buffer for the vault\n * @throws Error if vault type is unknown\n */\nexport function getBankVaultSeeds(type: BankVaultType): Buffer {\n  switch (type) {\n    case BankVaultType.LiquidityVault:\n      return PDA_BANK_LIQUIDITY_VAULT_SEED;\n    case BankVaultType.InsuranceVault:\n      return PDA_BANK_INSURANCE_VAULT_SEED;\n    case BankVaultType.FeeVault:\n      return PDA_BANK_FEE_VAULT_SEED;\n    default:\n      throw Error(`Unknown vault type ${type}`);\n  }\n}\n\n/**\n * Gets the PDA seed for a vault authority.\n *\n * @param type - The vault type (Liquidity, Insurance, or Fee)\n * @returns The PDA seed buffer for the vault authority\n * @throws Error if vault type is unknown\n * @internal\n */\nfunction getBankVaultAuthoritySeeds(type: BankVaultType): Buffer {\n  switch (type) {\n    case BankVaultType.LiquidityVault:\n      return PDA_BANK_LIQUIDITY_VAULT_AUTH_SEED;\n    case BankVaultType.InsuranceVault:\n      return PDA_BANK_INSURANCE_VAULT_AUTH_SEED;\n    case BankVaultType.FeeVault:\n      return PDA_BANK_FEE_VAULT_AUTH_SEED;\n    default:\n      throw Error(`Unknown vault type ${type}`);\n  }\n}\n\n/**\n * Computes the Program Derived Address (PDA) for a bank vault authority.\n *\n * The vault authority is the account that has signing authority over vault operations.\n * This is a PDA derived from the vault type seed and bank public key.\n *\n * @param bankVaultType - The type of vault (Liquidity, Insurance, or Fee)\n * @param bankPk - The bank's public key\n * @param programId - The marginfi program ID\n * @returns Tuple of [PDA PublicKey, bump seed]\n *\n * @example\n * ```typescript\n * const [vaultAuthority, bump] = getBankVaultAuthority(\n *   BankVaultType.LiquidityVault,\n *   bankAddress,\n *   MARGINFI_PROGRAM_ID\n * );\n * ```\n */\nexport function getBankVaultAuthority(\n  bankVaultType: BankVaultType,\n  bankPk: PublicKey,\n  programId: PublicKey\n): [PublicKey, number] {\n  return PublicKey.findProgramAddressSync(\n    [getBankVaultAuthoritySeeds(bankVaultType), bankPk.toBuffer()],\n    programId\n  );\n}\n","import { Address } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { BankRaw } from \"../types\";\n\nimport { MarginfiProgram } from \"~/types\";\n\nexport const fetchBank = async (\n  program: MarginfiProgram,\n  bankAddress: Address\n): Promise<{ address: PublicKey; data: BankRaw }> => {\n  const address = new PublicKey(bankAddress);\n  const data = await program.account.bank.fetch(address);\n\n  if (!data) {\n    throw new Error(`Bank ${address.toBase58()} not found`);\n  }\n\n  return { address, data };\n};\n\nexport const fetchMultipleBanks = async (\n  program: MarginfiProgram,\n  opts?: { bankAddresses?: Address[]; groupAddress?: PublicKey }\n): Promise<{ address: PublicKey; data: BankRaw }[]> => {\n  let bankDatas: { address: PublicKey; data: BankRaw }[] = [];\n\n  if (opts?.bankAddresses && opts.bankAddresses.length > 0) {\n    const addresses = opts.bankAddresses;\n    const data = await program.account.bank.fetchMultiple(addresses);\n\n    data.forEach((d, idx) => {\n      if (d && addresses[idx]) {\n        bankDatas.push({ address: new PublicKey(addresses[idx]), data: d });\n      } else {\n        console.error(`Bank ${addresses[idx]} not found`);\n      }\n    });\n  } else {\n    const bankOpts = opts?.groupAddress\n      ? [\n          {\n            memcmp: { offset: 8 + 32 + 1, bytes: opts.groupAddress.toBase58() },\n          },\n        ]\n      : [];\n    const data = await program.account.bank.all(bankOpts);\n    bankDatas = data.map((d) => ({ address: d.publicKey, data: d.account }));\n  }\n\n  return bankDatas;\n};\n","import BigNumber from \"bignumber.js\";\n\nimport { AssetTag, BankType } from \"../types\";\n\nimport { getTotalAssetQuantity, getTotalLiabilityQuantity } from \"./compute\";\n\n/** On-chain sentinel: a deposit/borrow limit equal to `u64::MAX` means \"no limit\". */\nexport const U64_MAX = new BigNumber(\"18446744073709551615\");\n\n/** Drift balances are tracked in 9-decimal \"scaled balance\" units on-chain. */\nconst DRIFT_SCALED_BALANCE_DECIMALS = 9;\n\n/** Mirrors `BankConfig::is_deposit_limit_active` (limit != u64::MAX). */\nexport function isDepositLimitActive(bank: BankType): boolean {\n  return !bank.config.depositLimit.eq(U64_MAX);\n}\n\n/** Mirrors `BankConfig::is_borrow_limit_active` (limit != u64::MAX). */\nexport function isBorrowLimitActive(bank: BankType): boolean {\n  return !bank.config.borrowLimit.eq(U64_MAX);\n}\n\n/**\n * The deposit limit in the same units as `totalAssetShares * assetShareValue`.\n *\n * For Drift banks the program compares the limit against the 9-decimal scaled balance, so it\n * scales `deposit_limit` (mint decimals) by `10^(9 - mint_decimals)` first\n * (`scale_drift_deposit_limit`). All other banks compare the raw limit.\n */\nexport function getEffectiveDepositLimit(bank: BankType): BigNumber {\n  const limit = bank.config.depositLimit;\n  if (bank.config.assetTag !== AssetTag.DRIFT) return limit;\n  const diff = DRIFT_SCALED_BALANCE_DECIMALS - bank.mintDecimals;\n  if (diff === 0) return limit;\n  return diff > 0 ? limit.times(10 ** diff) : limit.div(10 ** -diff);\n}\n\nexport function computeInterestRates(bank: BankType): {\n  lendingRate: BigNumber;\n  borrowingRate: BigNumber;\n} {\n  const { insuranceFeeFixedApr, insuranceIrFee, protocolFixedFeeApr, protocolIrFee } =\n    bank.config.interestRateConfig;\n\n  const fixedFee = insuranceFeeFixedApr.plus(protocolFixedFeeApr);\n  const rateFee = insuranceIrFee.plus(protocolIrFee);\n\n  const baseInterestRate = computeBaseInterestRate(bank);\n  const utilizationRate = computeUtilizationRate(bank);\n\n  const lendingRate = baseInterestRate.times(utilizationRate);\n  const borrowingRate = baseInterestRate.times(new BigNumber(1).plus(rateFee)).plus(fixedFee);\n\n  return { lendingRate, borrowingRate };\n}\n\n/**\n * Maximum value for u32\n *\n * NOTE: AI-slop\n */\nconst U32_MAX = 0xffffffff;\n\n/**\n * Convert u32 encoded rate to APR percentage (0.0 to 10.0)\n * Rate is encoded as: rate / u32::MAX * 1000%\n * Example: 100% APR = 0.1 * u32::MAX\n *\n * NOTE: AI-slop\n */\nfunction rateFromU32(rate: number): BigNumber {\n  const ratio = new BigNumber(rate).div(U32_MAX);\n  return ratio.times(10);\n}\n\n/**\n * Convert u32 encoded utilization to percentage (0.0 to 1.0)\n * Util is encoded as: util / u32::MAX * 100%\n * Example: 50% = 0.5 * u32::MAX\n *\n * NOTE: AI-slop\n */\nfunction utilFromU32(util: number): BigNumber {\n  return new BigNumber(util).div(U32_MAX);\n}\n\n/**\n * Linear interpolation between two points\n * Given points (startX, startY) and (endX, endY), find Y at targetX\n */\nfunction calculateRateBetweenPoints(\n  startX: BigNumber,\n  startY: BigNumber,\n  endX: BigNumber,\n  endY: BigNumber,\n  targetX: BigNumber\n): BigNumber {\n  // Handle edge cases\n  if (endX.lte(startX)) return startY;\n  if (targetX.lt(startX)) return startY;\n  if (targetX.gt(endX)) return endY;\n  // Program enforces that points must be ascending (or equal)\n  if (endY.lt(startY)) return startY;\n\n  const deltaX = endX.minus(startX);\n  if (deltaX.isZero()) return startY;\n\n  // Calculate interpolation\n  const offset = targetX.minus(startX);\n  const proportion = offset.div(deltaX);\n  const deltaY = endY.minus(startY);\n  const scaledDelta = deltaY.times(proportion);\n\n  return startY.plus(scaledDelta);\n}\n\n/**\n * Compute base interest rate using the legacy 3-point curve\n */\nfunction computeLegacyCurve(\n  utilizationRate: BigNumber,\n  optimalUtilizationRate: BigNumber,\n  plateauInterestRate: BigNumber,\n  maxInterestRate: BigNumber\n): BigNumber {\n  if (utilizationRate.lte(optimalUtilizationRate)) {\n    return utilizationRate.times(plateauInterestRate).div(optimalUtilizationRate);\n  } else {\n    return utilizationRate\n      .minus(optimalUtilizationRate)\n      .div(new BigNumber(1).minus(optimalUtilizationRate))\n      .times(maxInterestRate.minus(plateauInterestRate))\n      .plus(plateauInterestRate);\n  }\n}\n\n/**\n * Compute base interest rate using the 7-point multipoint curve\n * Locates utilization on a linear function with up to 7 points:\n * - Point 1: (0%, zeroUtilRate)\n * - Points 2-6: Custom points from the points array\n * - Point 7: (100%, hundredUtilRate)\n *\n * Note: all will migrate to the new 7 point curve, the result for your normal legacy\n * curve getting migrated over is described in that test there. then we'll start creating curves with more points later\n */\nfunction computeMultipointCurve(\n  utilizationRate: BigNumber,\n  zeroUtilRate: number,\n  hundredUtilRate: number,\n  points: Array<{ util: number; rate: number }>\n): BigNumber {\n  const zeroRate = rateFromU32(zeroUtilRate);\n  const hundredRate = rateFromU32(hundredUtilRate);\n\n  // clamp utilization rate to [0, 1] for safety\n  const clampedUtilizationRate = BigNumber.max(0, BigNumber.min(1, utilizationRate));\n\n  // Filter out padding (where util = 0) to match on-chain behavior\n  // Program enforces: no gaps, ascending order, all padding at end\n  const nonPaddingPoints = points.filter((point) => point.util !== 0);\n\n  // start from point (0%, zeroRate)\n  let prevUtil = new BigNumber(0);\n  let prevRate = zeroRate;\n\n  // Iterate through non-padding custom points\n  for (const point of nonPaddingPoints) {\n    const pointUtil = utilFromU32(point.util);\n    const pointRate = rateFromU32(point.rate);\n\n    // If current utilization is <= this point's utilization,\n    // interpolate between previous point and this point\n    if (clampedUtilizationRate.lte(pointUtil)) {\n      return calculateRateBetweenPoints(\n        prevUtil,\n        prevRate,\n        pointUtil,\n        pointRate,\n        clampedUtilizationRate\n      );\n    }\n\n    // update previous point and continue\n    prevUtil = pointUtil;\n    prevRate = pointRate;\n  }\n\n  // interpolate between points\n  return calculateRateBetweenPoints(\n    prevUtil,\n    prevRate,\n    new BigNumber(1),\n    hundredRate,\n    clampedUtilizationRate\n  );\n}\n\nexport function computeBaseInterestRate(bank: BankType): BigNumber {\n  const interestRateConfig = bank.config.interestRateConfig;\n  const utilizationRate = computeUtilizationRate(bank);\n  const curveType = interestRateConfig.curveType;\n\n  // curveType 0 banks never migrated to the 7-point curve; their legacy 3-point params\n  // still live in the (now deprecated) placeholder slots. Only read the placeholders on a\n  // strict curveType === 0 check — the program team may repurpose those slots for future\n  // curve types, so any other value must take the multipoint path.\n  if (curveType === 0) {\n    return computeLegacyCurve(\n      utilizationRate,\n      interestRateConfig.placeholder0,\n      interestRateConfig.placeholder1,\n      interestRateConfig.placeholder2\n    );\n  }\n\n  return computeMultipointCurve(\n    utilizationRate,\n    interestRateConfig.zeroUtilRate,\n    interestRateConfig.hundredUtilRate,\n    interestRateConfig.points\n  );\n}\n\nexport function computeUtilizationRate(bank: BankType): BigNumber {\n  const assets = getTotalAssetQuantity(bank);\n  const liabilities = getTotalLiabilityQuantity(bank);\n  if (assets.isZero()) return new BigNumber(0);\n  return liabilities.div(assets);\n}\n\nconst SECONDS_PER_DAY = 24 * 60 * 60;\n/** Mirrors the program's `SECONDS_PER_YEAR` (365 days, no leap adjustment). */\nexport const SECONDS_PER_YEAR = SECONDS_PER_DAY * 365;\n\n/**\n * Minimum execution headroom (seconds) assumed between computing a bank-bounded amount and the\n * transaction landing on-chain. Interest keeps accruing in that window, so bounds that depend on\n * accrued interest are projected at least this far ahead.\n */\nexport const EXECUTION_HEADROOM_SECONDS = 120;\n\n/**\n * Seconds of interest accrual to project for a bank-bounded amount: the program accrues\n * `now - lastUpdate` of interest before applying its checks, and the tx lands some time after\n * `now`. Uses `max(2 * age, age + EXECUTION_HEADROOM_SECONDS)` — at least as conservative as the\n * historical \"2x accrued\" buffer, and never less than the execution headroom even for a bank that\n * was touched a second ago.\n */\nexport function computeAccrualProjectionSeconds(\n  bank: BankType,\n  nowSeconds = Date.now() / 1000\n): number {\n  const age = Math.max(0, nowSeconds - bank.lastUpdate);\n  return Math.max(2 * age, age + EXECUTION_HEADROOM_SECONDS);\n}\n\nexport function computeRemainingCapacity(bank: BankType): {\n  depositCapacity: BigNumber;\n  borrowCapacity: BigNumber;\n} {\n  const totalDeposits = getTotalAssetQuantity(bank);\n  const remainingCapacity = isDepositLimitActive(bank)\n    ? BigNumber.max(\n        0,\n        getEffectiveDepositLimit(bank)\n          .minus(totalDeposits)\n          .minus(1)\n          .integerValue(BigNumber.ROUND_FLOOR)\n      )\n    : U64_MAX;\n\n  const totalBorrows = getTotalLiabilityQuantity(bank);\n  const remainingBorrowCapacity = isBorrowLimitActive(bank)\n    ? BigNumber.max(\n        0,\n        bank.config.borrowLimit.minus(totalBorrows).minus(1).integerValue(BigNumber.ROUND_FLOOR)\n      )\n    : U64_MAX;\n\n  const projectionSeconds = computeAccrualProjectionSeconds(bank);\n\n  const { lendingRate, borrowingRate } = computeInterestRates(bank);\n\n  const projectedLendingInterest = lendingRate\n    .times(projectionSeconds)\n    .dividedBy(SECONDS_PER_YEAR)\n    .times(totalDeposits);\n  const projectedBorrowInterest = borrowingRate\n    .times(projectionSeconds)\n    .dividedBy(SECONDS_PER_YEAR)\n    .times(totalBorrows);\n\n  const depositCapacity = remainingCapacity.minus(projectedLendingInterest);\n  const borrowCapacity = remainingBorrowCapacity.minus(projectedBorrowInterest);\n\n  return {\n    depositCapacity,\n    borrowCapacity,\n  };\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { aprToApy } from \"../../../utils/accounting.utils\";\nimport { nativeToUi } from \"../../../utils/conversion.utils\";\nimport { OraclePrice, PriceBias } from \"../../price/types/price.types\";\nimport { AssetTag, BankType, OperationalState } from \"../types\";\n\nimport { computeUsdValue, getTotalAssetQuantity, getTotalLiabilityQuantity } from \"./compute\";\nimport {\n  computeAccrualProjectionSeconds,\n  computeInterestRates,\n  computeRemainingCapacity,\n  computeUtilizationRate,\n  isBorrowLimitActive,\n  isDepositLimitActive,\n  SECONDS_PER_YEAR,\n} from \"./interest-rate.utils\";\n\n/**\n * Whether a bank can be borrowed with the standard `lending_account_borrow` instruction.\n *\n * Only `DEFAULT`/`SOL` asset-tag banks are borrowable on-chain; the integration wrappers\n * (KAMINO/DRIFT/SOLEND/JUPLEND) reuse the same mint with `borrowLimit=0` and reject a standard\n * borrow with `6200 WrongAssetTagForStandardInstructions`. Use this when picking a bank to *borrow*\n * (e.g. the bridge bank for a debt-swap or loop double-hop).\n */\nexport function isStandardBorrowable(bank: BankType): boolean {\n  const { assetTag, operationalState, borrowLimit } = bank.config;\n  return (\n    (assetTag === AssetTag.DEFAULT || assetTag === AssetTag.SOL) &&\n    operationalState === OperationalState.Operational &&\n    borrowLimit.gt(0)\n  );\n}\n\n/**\n * Whether a bank accepts standard deposits. `ReduceOnly`/`Paused` banks reject new deposits with\n * `6017 BankReduceOnly`; integration wrappers aren't standard-depositable either. Use this when\n * picking a bank to *deposit* into (e.g. the bridge bank for a collateral-swap double-hop).\n */\nexport function isStandardDepositable(bank: BankType): boolean {\n  const { assetTag, operationalState } = bank.config;\n  return (\n    (assetTag === AssetTag.DEFAULT || assetTag === AssetTag.SOL) &&\n    operationalState === OperationalState.Operational\n  );\n}\n\n/**\n * Computed metrics describing a bank's state at a given moment.\n *\n * All amounts are UI-scaled (decimals applied). USD values use the bank's\n * realtime oracle price without any margin weight applied.\n */\nexport interface BankMetrics {\n  /** Token symbol hint supplied by the caller (e.g. from bank metadata). Empty string if unknown. */\n  symbol: string;\n  /** Total deposits in UI units (asset share value multiplier applied). */\n  totalDeposits: number;\n  /** Total borrows in UI units. */\n  totalBorrows: number;\n  /** USD value of total deposits (realtime oracle price). */\n  totalDepositsUsd: number;\n  /** USD value of total borrows (realtime oracle price). */\n  totalBorrowsUsd: number;\n  /** Utilization rate in [0,1]. */\n  utilizationRate: number;\n  /** Available liquidity in UI units. */\n  poolSize: number;\n  /** Deposit cap in UI units. */\n  depositCap: number;\n  /** Borrow cap in UI units. */\n  borrowCap: number;\n  /** Remaining deposit capacity. */\n  depositCapRemaining: number;\n  /** Remaining borrow capacity. */\n  borrowCapRemaining: number;\n  /** Supply APY (compounded annually from the base lending rate). */\n  supplyApy: number;\n  /** Borrow APY (compounded annually from the borrowing rate). */\n  borrowApy: number;\n}\n\nexport interface ComputeBankMetricsParams {\n  bank: BankType;\n  oraclePrice: OraclePrice;\n  /** Asset share value multiplier (e.g. Kamino). Defaults to 1. */\n  assetShareValueMultiplier?: BigNumber;\n  /** Symbol hint surfaced on the returned metrics. */\n  symbol?: string;\n}\n\n/**\n * Total deposits in UI units, with the asset-share-value multiplier applied (defaults to 1).\n */\nexport function computeBankTotalDeposits(\n  bank: BankType,\n  assetShareValueMultiplier?: BigNumber\n): number {\n  const totalAssets = getTotalAssetQuantity(bank).times(assetShareValueMultiplier ?? 1);\n  return nativeToUi(totalAssets, bank.mintDecimals);\n}\n\n/**\n * Total borrows in UI units. Borrows aren't share-multiplied.\n */\nexport function computeBankTotalBorrows(bank: BankType): number {\n  return nativeToUi(getTotalLiabilityQuantity(bank), bank.mintDecimals);\n}\n\n/**\n * USD value of total deposits, computed from the realtime oracle price\n * (no margin weight, no price bias).\n */\nexport function computeBankTotalDepositsUsd(\n  bank: BankType,\n  oraclePrice: OraclePrice,\n  assetShareValueMultiplier?: BigNumber\n): number {\n  return computeUsdValue({\n    bank,\n    oraclePrice,\n    quantity: getTotalAssetQuantity(bank),\n    priceBias: PriceBias.None,\n    isWeightedPrice: false,\n    assetShareValueMultiplier,\n  }).toNumber();\n}\n\n/**\n * USD value of total borrows, computed from the realtime oracle price\n * (no margin weight, no price bias).\n */\nexport function computeBankTotalBorrowsUsd(bank: BankType, oraclePrice: OraclePrice): number {\n  return computeUsdValue({\n    bank,\n    oraclePrice,\n    quantity: getTotalLiabilityQuantity(bank),\n    priceBias: PriceBias.None,\n    isWeightedPrice: false,\n  }).toNumber();\n}\n\n/**\n * Available liquidity (UI units) = min(totalDeposits, borrowCap) - totalBorrows, clamped to 0.\n * Matches the existing UI calculation used to gate borrow-side displays.\n */\nexport function computeBankPoolSize(bank: BankType, assetShareValueMultiplier?: BigNumber): number {\n  const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);\n  const totalBorrows = computeBankTotalBorrows(bank);\n  const borrowCap = nativeToUi(bank.config.borrowLimit, bank.mintDecimals);\n  return Math.max(0, Math.min(totalDeposits, borrowCap) - totalBorrows);\n}\n\n/**\n * Available bank liquidity in UI units = max(0, totalDeposits - totalBorrows).\n *\n * This is the amount the bank's liquidity vault can actually pay out for a withdraw or borrow,\n * independent of any account-level health constraints.\n */\nexport function computeBankAvailableLiquidity(\n  bank: BankType,\n  assetShareValueMultiplier?: BigNumber\n): BigNumber {\n  const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);\n  const totalBorrows = computeBankTotalBorrows(bank);\n  return BigNumber.max(0, new BigNumber(totalDeposits).minus(totalBorrows));\n}\n\n/**\n * Remaining deposit capacity in UI units (cap minus deposits, accounting for accrued interest),\n * clamped at 0. `Infinity` when the bank's deposit limit is inactive (`u64::MAX`).\n *\n * For integrated banks this is in the bank's share units (cToken / Drift scaled balance);\n * multiply by the bank's `assetShareValueMultiplier` to convert to underlying tokens.\n */\nexport function computeBankDepositCapRemaining(bank: BankType): number {\n  if (!isDepositLimitActive(bank)) return Infinity;\n  const { depositCapacity } = computeRemainingCapacity(bank);\n  return Math.max(0, nativeToUi(depositCapacity, bank.mintDecimals));\n}\n\n/**\n * Remaining borrow capacity in UI units (cap minus borrows, accounting for accrued interest),\n * clamped at 0. `Infinity` when the bank's borrow limit is inactive (`u64::MAX`).\n */\nexport function computeBankBorrowCapRemaining(bank: BankType): number {\n  if (!isBorrowLimitActive(bank)) return Infinity;\n  const { borrowCapacity } = computeRemainingCapacity(bank);\n  return Math.max(0, nativeToUi(borrowCapacity, bank.mintDecimals));\n}\n\n/**\n * Available liquidity (UI units) projected through interest accrual: `computeBankAvailableLiquidity`\n * minus the net liquidity drain of accrual (`liabilities * borrowRate - assets * lendingRate`,\n * annualized) over {@link computeAccrualProjectionSeconds}. The program runs `accrue_interest`\n * before its `check_utilization_ratio` (assets >= liabilities) check on withdraws and borrows,\n * so this is the amount that can actually leave the bank when the tx lands.\n */\nexport function computeBankProjectedAvailableLiquidity(\n  bank: BankType,\n  assetShareValueMultiplier?: BigNumber\n): BigNumber {\n  const liquidity = computeBankAvailableLiquidity(bank, assetShareValueMultiplier);\n  const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);\n  const totalBorrows = computeBankTotalBorrows(bank);\n  const projectionYears = computeAccrualProjectionSeconds(bank) / SECONDS_PER_YEAR;\n  const { lendingRate, borrowingRate } = computeInterestRates(bank);\n\n  // When interest is accrued, total liabilities grow by the borrow interest and total assets grow\n  // by the lending interest. The difference (the protocol/insurance fee share) is liquidity that\n  // will no longer be available once the instruction runs `accrue_interest`.\n  const projectedBorrowInterest = borrowingRate.times(totalBorrows).times(projectionYears);\n  const projectedLendingInterest = lendingRate.times(totalDeposits).times(projectionYears);\n  const liquidityLostToAccrual = BigNumber.max(\n    0,\n    projectedBorrowInterest.minus(projectedLendingInterest)\n  );\n\n  return BigNumber.max(0, liquidity.minus(liquidityLostToAccrual));\n}\n\n/**\n * Supply APY, compounded from the base lending rate via the shared `aprToApy` helper.\n */\nexport function computeBankSupplyApy(bank: BankType): number {\n  return aprToApy(computeInterestRates(bank).lendingRate.toNumber());\n}\n\n/**\n * Borrow APY, compounded from the borrowing rate via the shared `aprToApy` helper.\n */\nexport function computeBankBorrowApy(bank: BankType): number {\n  return aprToApy(computeInterestRates(bank).borrowingRate.toNumber());\n}\n\n/**\n * Aggregator over all per-metric subfunctions. Use this when you want every UI field\n * for a bank in one call; use the per-metric helpers when you only need one or two\n * (no need to compute oracle math just to read utilization, etc.).\n *\n * Pure: pass whatever `(bank, oraclePrice)` snapshot you want reflected (live,\n * post-simulation, or synthetically mutated).\n */\nexport function computeBankMetrics(params: ComputeBankMetricsParams): BankMetrics {\n  const { bank, oraclePrice, assetShareValueMultiplier, symbol = \"\" } = params;\n\n  return {\n    symbol,\n    totalDeposits: computeBankTotalDeposits(bank, assetShareValueMultiplier),\n    totalBorrows: computeBankTotalBorrows(bank),\n    totalDepositsUsd: computeBankTotalDepositsUsd(bank, oraclePrice, assetShareValueMultiplier),\n    totalBorrowsUsd: computeBankTotalBorrowsUsd(bank, oraclePrice),\n    utilizationRate: computeUtilizationRate(bank).toNumber(),\n    poolSize: computeBankPoolSize(bank, assetShareValueMultiplier),\n    depositCap: nativeToUi(bank.config.depositLimit, bank.mintDecimals),\n    borrowCap: nativeToUi(bank.config.borrowLimit, bank.mintDecimals),\n    depositCapRemaining: computeBankDepositCapRemaining(bank),\n    borrowCapRemaining: computeBankBorrowCapRemaining(bank),\n    supplyApy: computeBankSupplyApy(bank),\n    borrowApy: computeBankBorrowApy(bank),\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { BankType } from \"../types\";\n\n/**\n * Lookup-or-throw helpers for action-builder inputs. The optional `makeError`\n * lets callers throw their own typed error (e.g. a TransactionBuildingError\n * with user-facing copy) instead of a plain Error.\n */\n\nexport function requireBank(\n  bankMap: Map<string, BankType>,\n  address: PublicKey,\n  makeError: (message: string) => Error = (message) => new Error(message)\n): BankType {\n  const bank = bankMap.get(address.toBase58());\n  if (!bank) {\n    throw makeError(`bank ${address.toBase58()} not found`);\n  }\n  return bank;\n}\n\nexport function requireTokenProgram(\n  tokenProgramsByBank: Map<string, PublicKey>,\n  address: PublicKey,\n  makeError: (message: string) => Error = (message) => new Error(message)\n): PublicKey {\n  const tokenProgram = tokenProgramsByBank.get(address.toBase58());\n  if (!tokenProgram) {\n    throw makeError(`token program for bank ${address.toBase58()} not provided`);\n  }\n  return tokenProgram;\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { nativeToUi } from \"../../../utils/conversion.utils\";\nimport { BankRateLimiterType, BankType, RateLimitWindowType } from \"../types\";\n\n/**\n * Remaining outflow capacity of a single sliding rate-limit window at `nowSeconds`,\n * mirroring the on-chain `RateLimitWindow::effective_remaining_capacity` (read-only —\n * applies the pending window roll-over without mutating state).\n *\n * Units match the window: native tokens for bank-level limiters, USD for group-level.\n *\n * @returns Remaining capacity, or `null` when the window is disabled (`maxOutflow == 0`)\n */\nexport function computeRateLimitWindowRemainingCapacity(\n  window: RateLimitWindowType,\n  nowSeconds: number\n): BigNumber | null {\n  const { maxOutflow, windowDuration } = window;\n  if (maxOutflow.lte(0)) return null;\n  if (windowDuration === 0) return maxOutflow;\n\n  // effective_window_state: roll windows forward without mutating\n  let { windowStart, prevWindowOutflow, curWindowOutflow } = window;\n  const elapsedRaw = Math.floor(nowSeconds) - windowStart;\n  if (elapsedRaw >= windowDuration * 2) {\n    windowStart = Math.floor(nowSeconds);\n    prevWindowOutflow = new BigNumber(0);\n    curWindowOutflow = new BigNumber(0);\n  } else if (elapsedRaw >= windowDuration) {\n    windowStart = windowStart + windowDuration;\n    prevWindowOutflow = curWindowOutflow;\n    curWindowOutflow = new BigNumber(0);\n  }\n\n  // remaining_capacity_from_state\n  const elapsed = Math.floor(nowSeconds) - windowStart;\n  if (elapsed < 0) return new BigNumber(0);\n  if (elapsed >= windowDuration) return maxOutflow;\n\n  const remainingTime = windowDuration - elapsed;\n  const weightedPrev = prevWindowOutflow\n    .abs()\n    .times(remainingTime)\n    .idiv(windowDuration)\n    .times(prevWindowOutflow.isNegative() ? -1 : 1);\n\n  const totalNetOutflow = weightedPrev.plus(curWindowOutflow);\n  return maxOutflow.minus(totalNetOutflow);\n}\n\n/**\n * Remaining outflow capacity across both (hourly, daily) windows of a rate limiter:\n * the minimum of the enabled windows, in the limiter's native units.\n *\n * @returns Remaining capacity, or `null` when no window is enabled (no rate limiting)\n */\nexport function computeRateLimiterRemainingCapacity(\n  rateLimiter: BankRateLimiterType | undefined,\n  nowSeconds: number\n): BigNumber | null {\n  if (!rateLimiter) return null;\n  const hourly = computeRateLimitWindowRemainingCapacity(rateLimiter.hourly, nowSeconds);\n  const daily = computeRateLimitWindowRemainingCapacity(rateLimiter.daily, nowSeconds);\n  if (hourly === null) return daily;\n  if (daily === null) return hourly;\n  return BigNumber.min(hourly, daily);\n}\n\n/**\n * Remaining bank-level rate-limit outflow capacity (withdraws + borrows) in UI units of the\n * bank's mint, clamped at 0.\n *\n * @returns Remaining capacity in UI units, or `null` when the bank has no rate limiter enabled\n */\nexport function computeBankRateLimitRemaining(\n  bank: BankType,\n  nowSeconds: number = Date.now() / 1000\n): BigNumber | null {\n  const remaining = computeRateLimiterRemainingCapacity(bank.rateLimiter, nowSeconds);\n  if (remaining === null) return null;\n  return BigNumber.max(0, nativeToUi(remaining, bank.mintDecimals));\n}\n\n/**\n * Remaining group-level rate-limit outflow capacity in USD, clamped at 0.\n *\n * @returns Remaining capacity in USD, or `null` when the group has no rate limiter enabled\n */\nexport function computeGroupRateLimitRemainingUsd(\n  rateLimiter: BankRateLimiterType | undefined,\n  nowSeconds: number = Date.now() / 1000\n): BigNumber | null {\n  const remaining = computeRateLimiterRemainingCapacity(rateLimiter, nowSeconds);\n  if (remaining === null) return null;\n  return BigNumber.max(0, remaining);\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { nativeToUi } from \"../../../utils/conversion.utils\";\nimport { AssetTag, BankType } from \"../types\";\n\nimport { DriftSpotBalanceType, DriftSpotMarket, getDriftTokenAmount } from \"~/vendor/drift\";\nimport { JupTokenReserve } from \"~/vendor/jup-lend\";\nimport { JUP_EXCHANGE_PRICES_PRECISION } from \"~/vendor/jup-lend/utils/interest-rate.utils\";\nimport { KaminoReserve } from \"~/vendor/klend\";\n\n/**\n * The venue-side account states needed to derive an integrated bank's true liquidity.\n *\n * Structurally compatible with `BankIntegrationMetadata` (`client.bankIntegrationMap[address]`),\n * so that map's entries can be passed directly.\n */\nexport interface BankVenueStates {\n  kaminoStates?: { reserveState: KaminoReserve };\n  driftStates?: { spotMarketState: DriftSpotMarket };\n  jupLendStates?: { jupTokenReserveState: JupTokenReserve };\n}\n\n/**\n * Safety buffer applied to venue idle liquidity. Venue reserve states are snapshots refreshed on\n * the caller's cadence, and unlike the marginfi bank we don't project the venue's own interest\n * accrual, so the effective withdrawable amount can drift slightly below what the cached state\n * reports. Shave ~50 bps to avoid simulation failures right at the reported cap.\n */\nexport const VENUE_AVAILABLE_LIQUIDITY_BUFFER = 0.995;\n\n/**\n * Idle liquidity of the external venue backing an integrated bank (Kamino reserve, Drift spot\n * market, JupLend token reserve), in UI units of the underlying token, with\n * {@link VENUE_AVAILABLE_LIQUIDITY_BUFFER} applied.\n *\n * For integrated banks the marginfi-level totals only describe what marginfi has delegated to the\n * venue — the venue's own utilization is the true cap on withdrawals (a fully utilized Kamino\n * reserve pays out nothing even if marginfi's position is large). Returns `undefined` for banks\n * without an external venue (DEFAULT/SOL/STAKED) or when the relevant venue state is missing.\n */\nexport function computeVenueAvailableLiquidity(\n  bank: BankType,\n  venueStates?: BankVenueStates\n): BigNumber | undefined {\n  const decimals = bank.mintDecimals;\n\n  switch (bank.config.assetTag) {\n    case AssetTag.KAMINO: {\n      const reserveState = venueStates?.kaminoStates?.reserveState;\n      if (!reserveState) return undefined;\n      // `reserve.liquidity.availableAmount` is the actual liquid vault balance and therefore the\n      // real cap on withdrawals.\n      return new BigNumber(\n        nativeToUi(reserveState.liquidity.availableAmount.toString(), decimals)\n      ).times(VENUE_AVAILABLE_LIQUIDITY_BUFFER);\n    }\n    case AssetTag.DRIFT: {\n      const spotMarketState = venueStates?.driftStates?.spotMarketState;\n      if (!spotMarketState) return undefined;\n      const deposits = getDriftTokenAmount(\n        spotMarketState.depositBalance,\n        spotMarketState,\n        DriftSpotBalanceType.DEPOSIT\n      );\n      const borrows = getDriftTokenAmount(\n        spotMarketState.borrowBalance,\n        spotMarketState,\n        DriftSpotBalanceType.BORROW\n      );\n      const idle = deposits.sub(borrows);\n      return new BigNumber(nativeToUi(idle.isNeg() ? \"0\" : idle.toString(), decimals)).times(\n        VENUE_AVAILABLE_LIQUIDITY_BUFFER\n      );\n    }\n    case AssetTag.JUPLEND: {\n      const reserveState = venueStates?.jupLendStates?.jupTokenReserveState;\n      if (!reserveState) return undefined;\n      // The `WithInterest` buckets are denominated in internal share units and must be multiplied\n      // by the respective exchange price to get the underlying token amount. The `InterestFree`\n      // buckets are already in native token units.\n      const supplyWithInterestNative = reserveState.totalSupplyWithInterest\n        .mul(reserveState.supplyExchangePrice)\n        .div(JUP_EXCHANGE_PRICES_PRECISION);\n      const borrowWithInterestNative = reserveState.totalBorrowWithInterest\n        .mul(reserveState.borrowExchangePrice)\n        .div(JUP_EXCHANGE_PRICES_PRECISION);\n      const totalSupply = supplyWithInterestNative.add(reserveState.totalSupplyInterestFree);\n      const totalBorrow = borrowWithInterestNative.add(reserveState.totalBorrowInterestFree);\n      const idle = totalSupply.sub(totalBorrow);\n      return new BigNumber(nativeToUi(idle.isNeg() ? \"0\" : idle.toString(), decimals)).times(\n        VENUE_AVAILABLE_LIQUIDITY_BUFFER\n      );\n    }\n    default:\n      return undefined;\n  }\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { InstructionsWrapper } from \"../transaction\";\n\nimport { BankConfigOpt, BankConfigOptRaw, OracleSetup } from \"./types\";\nimport { serializeBankConfigOpt, serializeOracleSetupToIndex } from \"./utils\";\n\nimport instructions from \"~/instructions\";\nimport { MarginfiProgram } from \"~/types\";\nimport { bigNumberToWrappedI80F48 } from \"~/utils\";\n\nexport async function freezeBankConfigIx(\n  program: MarginfiProgram,\n  bankAddress: PublicKey,\n  bankConfigOpt: BankConfigOpt\n): Promise<InstructionsWrapper> {\n  // todo: make bankConfigOpt optional and create function to get bankConfigOptRaw from bank\n  const bankConfigRaw: BankConfigOptRaw = serializeBankConfigOpt(bankConfigOpt);\n\n  const ix = await instructions.makePoolConfigureBankIx(\n    program,\n    {\n      bank: bankAddress,\n    },\n    {\n      bankConfigOpt: {\n        ...bankConfigRaw,\n        assetWeightInit: null,\n        assetWeightMaint: null,\n\n        liabilityWeightInit: null,\n        liabilityWeightMaint: null,\n\n        depositLimit: null,\n        borrowLimit: null,\n        riskTier: null,\n        assetTag: null,\n        totalAssetValueInitLimit: null,\n\n        interestRateConfig: null,\n        operationalState: null,\n\n        oracleMaxAge: null,\n        permissionlessBadDebtSettlement: null,\n        freezeSettings: true,\n        oracleMaxConfidence: null,\n        tokenlessRepaymentsAllowed: null,\n      },\n    }\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n\ntype AddOracleToBanksIxArgs = {\n  program: MarginfiProgram;\n  bankAddress: PublicKey;\n  feedId: PublicKey;\n  /** @deprecated Use oracleAccounts when the setup needs on-chain validation accounts. */\n  oracleKey?: PublicKey;\n  /** Ordered exactly as the program's oracle accounts for the selected setup. */\n  oracleAccounts?: PublicKey[];\n  setup: OracleSetup;\n  groupAddress?: PublicKey;\n  adminAddress?: PublicKey;\n};\n\nexport async function addOracleToBanksIx({\n  program,\n  bankAddress,\n  feedId,\n  oracleKey,\n  oracleAccounts,\n  setup,\n  groupAddress,\n  adminAddress,\n}: AddOracleToBanksIxArgs): Promise<InstructionsWrapper> {\n  if (\n    setup === OracleSetup.Scope ||\n    setup === OracleSetup.PTPyth ||\n    setup === OracleSetup.PTFixed ||\n    setup === OracleSetup.Fixed ||\n    setup === OracleSetup.FixedKamino ||\n    setup === OracleSetup.FixedDrift ||\n    setup === OracleSetup.FixedJuplend\n  ) {\n    throw new Error(\n      `${setup} must be configured with ${\n        setup === OracleSetup.Scope ? \"configureScopeOracleIx\" : \"setOraclePriceIx\"\n      }`\n    );\n  }\n\n  const resolvedOracleAccounts = oracleAccounts ?? (oracleKey ? [oracleKey] : []);\n  const expectedAccountCount =\n    setup === OracleSetup.PythMSOL || setup === OracleSetup.PythLST\n      ? 2\n      : setup === OracleSetup.KaminoMSOL ||\n          setup === OracleSetup.JuplendMSOL ||\n          setup === OracleSetup.KaminoLST ||\n          setup === OracleSetup.JuplendLST\n        ? 3\n        : undefined;\n  if (\n    expectedAccountCount !== undefined &&\n    resolvedOracleAccounts.length !== expectedAccountCount\n  ) {\n    throw new Error(`${setup} requires ${expectedAccountCount} ordered oracle accounts`);\n  }\n  // The program reads the primary feed from remaining[0] and requires it to match `oracle`\n  if (expectedAccountCount !== undefined && !resolvedOracleAccounts[0].equals(feedId)) {\n    throw new Error(\n      `${setup} requires oracleAccounts[0] to be the primary feed ${feedId.toBase58()}`\n    );\n  }\n\n  const ix = await instructions.makeLendingPoolConfigureBankOracleIx(\n    program,\n    {\n      bank: bankAddress,\n      group: groupAddress,\n      admin: adminAddress,\n    },\n    {\n      setup: serializeOracleSetupToIndex(setup),\n      feedId,\n    },\n    resolvedOracleAccounts.map((pubkey) => ({\n      isSigner: false,\n      isWritable: false,\n      pubkey,\n    }))\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n\ntype SetOraclePriceIxArgs = {\n  program: MarginfiProgram;\n  bankAddress: PublicKey;\n  price: BigNumber;\n  setup: OracleSetup.Fixed | OracleSetup.PTPyth | OracleSetup.PTFixed;\n  /** Fixed venue account, [Pyth, Exponent vault], or [Exponent vault], depending on setup. */\n  oracleAccounts?: PublicKey[];\n  groupAddress?: PublicKey;\n  adminAddress?: PublicKey;\n};\n\n/** Configure a flat fixed price or an Exponent PT price using the 0.1.11 instruction. */\nexport async function setOraclePriceIx({\n  program,\n  bankAddress,\n  price,\n  setup,\n  oracleAccounts = [],\n  groupAddress,\n  adminAddress,\n}: SetOraclePriceIxArgs): Promise<InstructionsWrapper> {\n  const expectedAccountCount =\n    setup === OracleSetup.PTPyth ? 2 : setup === OracleSetup.PTFixed ? 1 : undefined;\n  if (expectedAccountCount !== undefined && oracleAccounts.length !== expectedAccountCount) {\n    throw new Error(`${setup} requires ${expectedAccountCount} ordered oracle accounts`);\n  }\n\n  const ix = await instructions.makeLendingPoolSetOraclePriceIx(\n    program,\n    {\n      bank: bankAddress,\n      group: groupAddress,\n      admin: adminAddress,\n    },\n    {\n      price: bigNumberToWrappedI80F48(price),\n      setup: serializeOracleSetupToIndex(setup),\n    },\n    oracleAccounts.map((pubkey) => ({ isSigner: false, isWritable: false, pubkey }))\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n\ntype ConfigureScopeOracleIxArgs = {\n  program: MarginfiProgram;\n  bankAddress: PublicKey;\n  oracle: PublicKey;\n  entryIndex: number;\n  groupAddress?: PublicKey;\n  adminAddress?: PublicKey;\n};\n\nexport async function configureScopeOracleIx({\n  program,\n  bankAddress,\n  oracle,\n  entryIndex,\n  groupAddress,\n  adminAddress,\n}: ConfigureScopeOracleIxArgs): Promise<InstructionsWrapper> {\n  const ix = await instructions.makeLendingPoolConfigureBankOracleScopeIx(\n    program,\n    {\n      bank: bankAddress,\n      group: groupAddress,\n      admin: adminAddress,\n    },\n    {\n      oracle,\n      entryIndex,\n    }\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { BankRateLimiterType, BankRateLimiterDto } from \"~/services/bank\";\n\nexport type MarginfiGroupType = {\n  admin: PublicKey;\n  address: PublicKey;\n  /**\n   * Group-level net-outflow rate limiter (windows denominated in USD, unlike bank\n   * rate limiters which use native tokens). When any window is enabled, every\n   * withdraw/borrow requires a fresh oracle for the affected bank in remaining\n   * accounts — see {@link isGroupRateLimiterEnabled}.\n   */\n  rateLimiter?: BankRateLimiterType;\n};\n\nexport type MarginfiGroupTypeDto = {\n  admin: string;\n  address: string;\n  rateLimiter?: BankRateLimiterDto;\n};\n\n/**\n * Mirrors the on-chain `GroupRateLimiter::is_enabled()`: true when any window has a\n * non-zero max outflow. While enabled, withdraws (including withdraw-all) and borrows\n * need the affected bank's oracle present and non-stale in remaining accounts.\n */\nexport function isGroupRateLimiterEnabled(rateLimiter?: BankRateLimiterType): boolean {\n  if (!rateLimiter) return false;\n  return rateLimiter.hourly.maxOutflow.gt(0) || rateLimiter.daily.maxOutflow.gt(0);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport {\n  BankConfigOptRaw,\n  BankConfigOpt,\n  serializeBankConfigOpt,\n  BankConfigCompactRaw,\n} from \"../bank\";\nimport { InstructionsWrapper } from \"../transaction\";\n\nimport instructions from \"~/instructions\";\nimport { MarginfiProgram } from \"~/types\";\nimport {\n  findPoolAddress,\n  findPoolStakeAddress,\n  findPoolMintAddress,\n  findPoolOnRampAddress,\n} from \"~/vendor/single-spl-pool\";\nimport { TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\nexport async function makePoolConfigureBankIx(\n  program: MarginfiProgram,\n  bank: PublicKey,\n  args: BankConfigOptRaw\n): Promise<InstructionsWrapper> {\n  const ix = await instructions.makePoolConfigureBankIx(\n    program,\n    {\n      bank: bank,\n    },\n    { bankConfigOpt: args }\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n\nexport async function makeAddPermissionlessStakedBankIx(\n  program: MarginfiProgram,\n  group: PublicKey,\n  voteAccountAddress: PublicKey,\n  feePayer: PublicKey,\n  pythOracle: PublicKey // wSOL oracle\n): Promise<InstructionsWrapper> {\n  const [settingsKey] = PublicKey.findProgramAddressSync(\n    [Buffer.from(\"staked_settings\", \"utf-8\"), group.toBuffer()],\n    program.programId\n  );\n  const poolAddress = findPoolAddress(voteAccountAddress);\n  const solPool = findPoolStakeAddress(poolAddress);\n  const lstMint = findPoolMintAddress(poolAddress);\n  const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n  const remainingKeys = [pythOracle, lstMint, solPool];\n\n  const ix = await instructions.makePoolAddPermissionlessStakedBankIx(\n    program,\n    {\n      stakedSettings: settingsKey,\n      feePayer: feePayer,\n      bankMint: lstMint,\n      solPool,\n      poolOnramp: onRampAddress,\n      stakePool: poolAddress,\n      validatorVoteAccount: voteAccountAddress,\n    },\n    remainingKeys.map((key) => ({\n      pubkey: key,\n      isSigner: false,\n      isWritable: false,\n    })),\n    {\n      seed: new BN(0),\n    }\n  );\n\n  return {\n    instructions: [ix],\n    keys: [],\n  };\n}\n\nexport async function makePoolAddBankIx(\n  program: MarginfiProgram,\n  group: PublicKey,\n  bank: PublicKey,\n  feePayer: PublicKey,\n  bankMint: PublicKey,\n  bankConfig: BankConfigOpt,\n  tokenProgram: PublicKey = TOKEN_PROGRAM_ID,\n  overrideOpt: { admin?: PublicKey; globalFeeWallet?: PublicKey } = {}\n): Promise<InstructionsWrapper> {\n  const rawBankConfig = serializeBankConfigOpt(bankConfig);\n\n  // TODO verify this is correct\n  const rawBankConfigCompact = {\n    ...rawBankConfig,\n    oracleMaxAge: bankConfig.oracleMaxAge,\n    auto_padding_0: [0],\n    auto_padding_1: [0],\n    configFlags: 0,\n  } as BankConfigCompactRaw;\n\n  const ix = await instructions.makePoolAddBankIx(\n    program,\n    {\n      marginfiGroup: group,\n      feePayer,\n      bankMint,\n      bank,\n      tokenProgram,\n      ...overrideOpt,\n      // if two oracle keys: first is feed id, second is oracle key\n    },\n    {\n      bankConfig: rawBankConfigCompact,\n    }\n  );\n\n  return {\n    instructions: [ix], //ix\n    keys: [],\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { MarginfiGroupTypeDto, MarginfiGroupType } from \"../types\";\n\nimport { dtoToBankRateLimiter } from \"~/services/bank\";\n\nexport function dtoToGroup(groupDto: MarginfiGroupTypeDto): MarginfiGroupType {\n  return {\n    admin: new PublicKey(groupDto.admin),\n    address: new PublicKey(groupDto.address),\n    rateLimiter: groupDto.rateLimiter ? dtoToBankRateLimiter(groupDto.rateLimiter) : undefined,\n  };\n}\n","import { MarginfiGroupTypeDto, MarginfiGroupType } from \"../types\";\n\nimport { toBankRateLimiterDto } from \"~/services/bank\";\n\nexport function groupToDto(group: MarginfiGroupType): MarginfiGroupTypeDto {\n  return {\n    admin: group.admin.toBase58(),\n    address: group.address.toBase58(),\n    rateLimiter: group.rateLimiter ? toBankRateLimiterDto(group.rateLimiter) : undefined,\n  };\n}\n","import { Buffer } from \"buffer\";\n\nimport {\n  Connection,\n  PublicKey,\n  StakeProgram,\n  ParsedAccountData,\n  LAMPORTS_PER_SOL,\n} from \"@solana/web3.js\";\n\nimport { ValidatorStakeGroup, StakeAccount, StakePoolMevMap } from \"../types\";\n\nimport { MAX_U64 } from \"~/constants\";\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\nimport {\n  findPoolAddress,\n  findPoolStakeAddress,\n  findPoolMintAddress,\n  findPoolOnRampAddress,\n} from \"~/vendor/single-spl-pool\";\n\n/**\n * Retrieves all active stake accounts associated with a given public key grouped by validator\n *\n * @warning this is an expensive rpc call and should be heavily cached\n *\n * @param connection - Solana RPC connection\n * @param publicKey - Users's public key\n * @param opts - Options for filtering inactive stake accounts\n * @returns {Promise<ValidatorStakeGroup[]>} An array of validator stake groups\n */\nexport const fetchNativeStakeAccounts = async (\n  connection: Connection,\n  publicKey: PublicKey,\n  opts: {\n    filterInactive: boolean;\n  } = {\n    filterInactive: true,\n  }\n): Promise<ValidatorStakeGroup[]> => {\n  if (!connection || !publicKey) {\n    throw new Error(\"Invalid connection or public key\");\n  }\n\n  try {\n    const epochInfo = await connection.getEpochInfo();\n    const accounts = await connection.getParsedProgramAccounts(StakeProgram.programId, {\n      filters: [\n        {\n          memcmp: {\n            offset: 12,\n            bytes: publicKey.toBase58(),\n          },\n        },\n      ],\n    });\n\n    const validatorMap = new Map<string, { pubkey: PublicKey; amount: number }[]>();\n\n    // Map accounts to promises and run them in parallel\n    await Promise.all(\n      accounts.map(async (acc) => {\n        const parsedAccount = acc.account.data as ParsedAccountData;\n        const stakeInfo = parsedAccount.parsed.info;\n\n        // filter out inactive stake accounts\n        if (\n          !stakeInfo.stake?.delegation ||\n          (opts.filterInactive &&\n            (Number(stakeInfo.stake.delegation.activationEpoch) >= epochInfo.epoch ||\n              stakeInfo.stake.delegation.deactivationEpoch !== MAX_U64))\n        ) {\n          return;\n        }\n\n        const validatorAddress = stakeInfo.stake.delegation.voter;\n        const accountPubkey = acc.pubkey;\n        const amount = Number(stakeInfo.stake.delegation.stake) / LAMPORTS_PER_SOL;\n\n        const existingAccounts = validatorMap.get(validatorAddress) || [];\n        validatorMap.set(validatorAddress, [\n          ...existingAccounts,\n          { pubkey: accountPubkey, amount },\n        ]);\n      })\n    );\n\n    // Calculate pool keys once per validator when creating return value\n    return Promise.all(\n      Array.from(validatorMap.entries()).map(async ([validatorAddress, accounts]) => {\n        const poolKey = findPoolAddress(new PublicKey(validatorAddress));\n        const poolMintKey = findPoolMintAddress(poolKey);\n        const totalStake = accounts.reduce((acc, curr) => acc + curr.amount, 0);\n        const largestAccount = accounts.reduce((acc, curr) =>\n          acc.amount > curr.amount ? acc : curr\n        );\n        const sortedAccounts = accounts.sort((a, b) => b.amount - a.amount);\n\n        // if the largest account is not the first in the array, move it to the front\n        const firstAccount = sortedAccounts[0];\n        if (firstAccount && !firstAccount.pubkey.equals(largestAccount.pubkey)) {\n          const largestIndex = sortedAccounts.indexOf(largestAccount);\n          if (largestIndex > 0) {\n            const [removed] = sortedAccounts.splice(largestIndex, 1);\n            if (removed) {\n              sortedAccounts.unshift(removed);\n            }\n          }\n        }\n\n        return {\n          validator: new PublicKey(validatorAddress),\n          poolKey,\n          poolMintKey,\n          accounts: sortedAccounts,\n          totalStake,\n          selectedAccount: largestAccount,\n        };\n      })\n    );\n  } catch (e) {\n    console.error(\"Error getting stake accounts\", e);\n    return [];\n  }\n};\n\n/**\n * Gets active states for stake pools associated with staked asset banks\n *\n * @param connection - Solana RPC connection\n * @param bankInfos - Array of ExtendedBankInfo objects\n * @returns Promise<Map<string, boolean>> - Map of bank addresses to active states\n */\nexport const fetchStakePoolActiveStates = async (\n  connection: Connection,\n  validatorVoteAccounts: PublicKey[]\n): Promise<Map<string, boolean>> => {\n  const currentEpoch = await connection.getEpochInfo();\n  const activeStates = new Map<string, boolean>();\n\n  const poolMintAddressRecord: Record<string, PublicKey> = {};\n  const poolStakeAddressRecord: Record<string, PublicKey> = {};\n\n  validatorVoteAccounts.forEach((validatorVoteAccount) => {\n    const poolAddress = findPoolAddress(validatorVoteAccount);\n    const poolStakeAddress = findPoolStakeAddress(poolAddress);\n    const poolMintAddress = findPoolMintAddress(poolAddress);\n\n    poolMintAddressRecord[validatorVoteAccount.toBase58()] = poolMintAddress;\n    poolStakeAddressRecord[poolStakeAddress.toBase58()] = validatorVoteAccount;\n  });\n\n  const poolStakeAddressKeys = Object.keys(poolStakeAddressRecord);\n\n  const poolStakeAccounts = Object.fromEntries(\n    (await chunkedGetRawMultipleAccountInfoOrdered(connection, poolStakeAddressKeys))\n      .map((ai, index) => {\n        const key = poolStakeAddressKeys[index];\n        const validatorVote = key ? poolStakeAddressRecord[key] : undefined;\n        return [validatorVote, ai?.data || null];\n      })\n      .filter(([key]) => key !== undefined)\n  );\n\n  validatorVoteAccounts.map((validatorVoteAccount) => {\n    const voteAccountKey = validatorVoteAccount.toBase58();\n    const stakeAccount = fetchStakeAccount(poolStakeAccounts[voteAccountKey]);\n    const poolMintAddress = poolMintAddressRecord[voteAccountKey];\n\n    if (!poolMintAddress) {\n      return;\n    }\n\n    if (!stakeAccount) {\n      activeStates.set(poolMintAddress.toBase58(), false);\n      return;\n    }\n\n    if (!stakeAccount.stake?.delegation) {\n      activeStates.set(poolMintAddress.toBase58(), false);\n      return;\n    }\n\n    const activationEpoch = stakeAccount.stake.delegation.activationEpoch;\n    const isActive = currentEpoch.epoch > Number(activationEpoch);\n    activeStates.set(validatorVoteAccount.toBase58(), isActive);\n  });\n\n  return activeStates;\n};\n\n/**\n * Gets APY rates for validators associated with staked asset banks\n *\n * @param validatorVoteAccounts - Array of validator vote account public keys\n * @returns Promise<Map<string, number>> - Map of bank addresses to APY rates\n */\n// export const getValidatorRates = async (validatorVoteAccounts: PublicKey[]): Promise<Map<string, number>> => {\n//   const rates = new Map<string, number>();\n\n//   await Promise.all(\n//     validatorVoteAccounts.map(async (validatorVoteAccount) => {\n//       const poolAddress = findPoolAddress(validatorVoteAccount);\n//       const poolMintAddress = findPoolMintAddress(poolAddress);\n\n//       try {\n//         const response = await fetch(`/api/validator-info?validator=${validatorVoteAccount.toBase58()}`);\n\n//         if (!response.ok) {\n//           rates.set(poolMintAddress.toBase58(), 0);\n//           return;\n//         }\n\n//         const data = await response.json();\n//         rates.set(poolMintAddress.toBase58(), data.data?.total_apy ?? 0);\n//       } catch (error) {\n//         console.error(\"Error fetching validator rate:\", error);\n//         rates.set(poolMintAddress.toBase58(), 0);\n//       }\n//     })\n//   );\n\n//   return rates;\n// };\n\nexport const fetchStakeAccount = function (data: Buffer): StakeAccount {\n  let offset = 0;\n\n  // Discriminant (4 bytes)\n  const discriminant = data.readUInt32LE(offset);\n  offset += 4;\n\n  // Meta\n  const rentExemptReserve = data.readBigUInt64LE(offset);\n  offset += 8;\n\n  // Authorized staker and withdrawer (2 public keys)\n  const staker = new PublicKey(data.subarray(offset, offset + 32));\n  offset += 32;\n  const withdrawer = new PublicKey(data.subarray(offset, offset + 32));\n  offset += 32;\n\n  // Lockup: unixTimestamp, epoch, custodian\n  const unixTimestamp = data.readBigUInt64LE(offset);\n  offset += 8;\n  const epoch = data.readBigUInt64LE(offset);\n  offset += 8;\n  const custodian = new PublicKey(data.subarray(offset, offset + 32));\n  offset += 32;\n\n  // Stake: Delegation\n  const voterPubkey = new PublicKey(data.subarray(offset, offset + 32));\n  offset += 32;\n  const stake = data.readBigUInt64LE(offset);\n  offset += 8;\n  const activationEpoch = data.readBigUInt64LE(offset);\n  offset += 8;\n  const deactivationEpoch = data.readBigUInt64LE(offset);\n  offset += 8;\n\n  // Credits observed\n  const creditsObserved = data.readBigUInt64LE(offset);\n\n  // Return the parsed StakeAccount object\n  return {\n    discriminant,\n    meta: {\n      rentExemptReserve,\n      authorized: {\n        staker,\n        withdrawer,\n      },\n      lockup: {\n        unixTimestamp,\n        epoch,\n        custodian,\n      },\n    },\n    stake: {\n      delegation: {\n        voterPubkey,\n        stake,\n        activationEpoch,\n        deactivationEpoch,\n      },\n      creditsObserved,\n    },\n  };\n};\n\nexport const fetchStakePoolMev = async (\n  connection: Connection,\n  validatorVoteAccounts: PublicKey[]\n): Promise<StakePoolMevMap> => {\n  const poolAddressRecord: Record<string, PublicKey> = {};\n  const poolStakeAddressRecord: Record<string, PublicKey> = {};\n  const onRampAddressRecord: Record<string, PublicKey> = {};\n  const mev: StakePoolMevMap = new Map<string, { pool: number; onramp: number }>();\n\n  validatorVoteAccounts.forEach((validatorVoteAccount) => {\n    const poolAddress = findPoolAddress(validatorVoteAccount);\n    const poolStakeAddress = findPoolStakeAddress(poolAddress);\n    const onRampAddress = findPoolOnRampAddress(poolAddress);\n\n    poolAddressRecord[validatorVoteAccount.toBase58()] = poolAddress;\n    poolStakeAddressRecord[validatorVoteAccount.toBase58()] = poolStakeAddress;\n    onRampAddressRecord[validatorVoteAccount.toBase58()] = onRampAddress;\n  });\n\n  const poolStakeAddresses = validatorVoteAccounts\n    .map((validatorVoteAccount) => poolStakeAddressRecord[validatorVoteAccount.toBase58()])\n    .filter((address): address is PublicKey => address !== undefined);\n\n  const onRampAddresses = validatorVoteAccounts\n    .map((validatorVoteAccount) => onRampAddressRecord[validatorVoteAccount.toBase58()])\n    .filter((address): address is PublicKey => address !== undefined);\n\n  const allAddresses = [...poolStakeAddresses, ...onRampAddresses].map((address) =>\n    address.toBase58()\n  );\n\n  return chunkedGetRawMultipleAccountInfoOrdered(connection, allAddresses).then((accountInfos) => {\n    const poolStakeInfos = accountInfos.slice(0, poolStakeAddresses.length);\n    const onRampInfos = accountInfos.slice(poolStakeAddresses.length);\n    const rent = 2282280;\n\n    validatorVoteAccounts.forEach((validatorVoteAccount, index) => {\n      const poolStakeInfo = poolStakeInfos[index];\n      const onRampInfo = onRampInfos[index];\n\n      if (poolStakeInfo && onRampInfo) {\n        const stakeDecoded = fetchStakeAccount(poolStakeInfo.data);\n        const onrampDecoded = fetchStakeAccount(onRampInfo.data);\n        const poolLamps =\n          poolStakeInfo.lamports - rent - Number(stakeDecoded.stake.delegation.stake.toString());\n        const onrampStake = Number(onrampDecoded.stake.delegation.stake.toString());\n\n        mev.set(validatorVoteAccount.toBase58(), {\n          pool: poolLamps >= 1000 ? poolLamps : 0,\n          onramp: onrampStake,\n        });\n      }\n    });\n\n    return mev;\n  });\n};\n","import { ValidatorStakeGroup, ValidatorStakeGroupDto } from \"../types\";\n\nexport function validatorStakeGroupToDto(validatorStakeGroup: ValidatorStakeGroup): ValidatorStakeGroupDto {\n  return {\n    validator: validatorStakeGroup.validator.toBase58(),\n    poolKey: validatorStakeGroup.poolKey.toBase58(),\n    poolMintKey: validatorStakeGroup.poolMintKey.toBase58(),\n    totalStake: validatorStakeGroup.totalStake,\n    selectedAccount: {\n      pubkey: validatorStakeGroup.selectedAccount.pubkey.toBase58(),\n      amount: validatorStakeGroup.selectedAccount.amount,\n    },\n    accounts: validatorStakeGroup.accounts.map((account) => ({\n      pubkey: account.pubkey.toBase58(),\n      amount: account.amount,\n    })),\n  };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { ValidatorStakeGroup, ValidatorStakeGroupDto } from \"../types\";\n\nexport function dtoToValidatorStakeGroup(validatorStakeGroupDto: ValidatorStakeGroupDto): ValidatorStakeGroup {\n  return {\n    validator: new PublicKey(validatorStakeGroupDto.validator),\n    poolKey: new PublicKey(validatorStakeGroupDto.poolKey),\n    poolMintKey: new PublicKey(validatorStakeGroupDto.poolMintKey),\n    totalStake: validatorStakeGroupDto.totalStake,\n    selectedAccount: {\n      pubkey: new PublicKey(validatorStakeGroupDto.selectedAccount.pubkey),\n      amount: validatorStakeGroupDto.selectedAccount.amount,\n    },\n    accounts: validatorStakeGroupDto.accounts.map((account) => ({\n      pubkey: new PublicKey(account.pubkey),\n      amount: account.amount,\n    })),\n  };\n}\n","import type { StakedBankMetadata } from \"./metadata.utils\";\n\n// Source: https://storage.googleapis.com/mrgn-public/mrgn-staked-bank-metadata-cache.json\n// This will eventually be replaced by an API call.\n\nexport const STAKED_BANK_METADATA_JSON: StakedBankMetadata[] = [\n  {\n    bankAddress: \"8g5qG6PVygcVSXV1cJnjXaD1yhrDwcWAMQCY2wR9VuAf\",\n    validatorVoteAccount: \"CooLbbZy5Xmdt7DiHPQ3ss2uRXawnTXXVgpMS8E8jDzr\",\n    tokenAddress: \"BADo3D6nMtGnsAaTv3iEes8mMcq92TuFoBWebFe8kzeA\",\n    tokenName: \"Cavey Cool\",\n    tokenSymbol: \"COOL\",\n  },\n  {\n    bankAddress: \"BuCckNm1djpp3vZVhvh1CrrniirY6sr2hwUmeP5kTcGz\",\n    validatorVoteAccount: \"mrgn4t2JabSgvGnrCaHXMvz8ocr4F52scsxJnkQMQsQ\",\n    tokenAddress: \"FUyAyVbYrMfiaN1QEQYFZTuBNzW5EJf3jWzjjymGqKLv\",\n    tokenName: \"Project 0 Meridian\",\n    tokenSymbol: \"MERIDIAN\",\n  },\n  {\n    bankAddress: \"Hco1P3dGRXz3ZGFvMkbDgghZQy47Tp7vp7koSYRvP6nm\",\n    validatorVoteAccount: \"mrgn6ETrBDM8mjjYN8rbVwFqVwF8z6rtmvGLbdGuVUU\",\n    tokenAddress: \"A4B5MGQvcZCUqeiUEAB4ckZ2tvH2UmEg31vF7TiERDkH\",\n    tokenName: \"MRGN 3\",\n    tokenSymbol: \"MRGN3\",\n  },\n  {\n    bankAddress: \"EPh2abWP8DusPH8myWnECAAeQUZgAz927aMbmwXt3eRY\",\n    validatorVoteAccount: \"mrgn2vsZ5EJ8YEfAMNPXmRux7th9cNfBasQ1JJvVwPn\",\n    tokenAddress: \"6Mt7tBWLUJfDxqCFTsjoRXF9wD55g4Lhs5nAyYp244pX\",\n    tokenName: \"Project 0 Horizon\",\n    tokenSymbol: \"HORIZON\",\n  },\n  {\n    bankAddress: \"6wjAwhnxTMEzHk8NNHVXgkx1jSrb6TX1bC17j3S56FfB\",\n    validatorVoteAccount: \"3N7s9zXMZ4QqvHQR15t5GNHyqc89KduzMP7423eWiD5g\",\n    tokenAddress: \"DKPvRV4dxUejjGpr2XwFmzZbbbTD7vx9Jmt1kk43n4d5\",\n    tokenName: \"Binance\",\n    tokenSymbol: \"BINANCE\",\n  },\n  {\n    bankAddress: \"J9tksvZEDSwtNtZ6yxYjWDDkzhPbwDMnihU61NkFG9FE\",\n    validatorVoteAccount: \"he1iusunGwqrNtafDtLdhsUQDFvo13z9sUa36PauBtk\",\n    tokenAddress: \"2k79y8CApbU9jAvWhLS2j6uRbaVjpLJTUzstBTho9vGq\",\n    tokenName: \"Helius\",\n    tokenSymbol: \"HELIUS\",\n  },\n  {\n    bankAddress: \"Dfr6Sf44ftecaJaoJMzFQABdkt3CEHfBwut1WyacRzaE\",\n    validatorVoteAccount: \"SLaYv7tCwetrFGbPCRnqpHswG5qqKino78EYpbGF7xY\",\n    tokenAddress: \"Vsw4JT33S7bLbhjySMMyrP3JKvTAcNi9WG5Doekrmgg\",\n    tokenName: \"Solayer\",\n    tokenSymbol: \"SOLAYER\",\n  },\n  {\n    bankAddress: \"BZAm4qGscR8gg5bmWrEq6BTofgaZPbg7Fwfa7rFghEXL\",\n    validatorVoteAccount: \"J1to3PQfXidUUhprQWgdKkQAMWPJAEqSJ7amkBDE9qhF\",\n    tokenAddress: \"6B8hZSupE5mcACmjzozP6C1DR2uaCCtmrGqcYWC6SBCc\",\n    tokenName: \"Bonk\",\n    tokenSymbol: \"BONK\",\n  },\n  {\n    bankAddress: \"3UrMZ26NRKu2y6c2dPE7gZVHwEmhpwKLcWACg3tjCVEt\",\n    validatorVoteAccount: \"J2nUHEAgZFRyuJbFjdqPrAa9gyWDuc7hErtDQHPhsYRp\",\n    tokenAddress: \"9M7oMo4oL6RDPG7WbAX3Zz4dPzbMgpiCzwrQPMwG4Wgq\",\n    tokenName: \"Phantom\",\n    tokenSymbol: \"PHANTOM\",\n  },\n  {\n    bankAddress: \"8c269gkonvATm93nviuYiriCQ829f7ypx3aScYDR1YoQ\",\n    validatorVoteAccount: \"D3QPJm7BDzzPeRG51YZSEz3LfV7GvFNu9NkcibzURxuj\",\n    tokenAddress: \"8hXCCQmYFcDhU5Mkuvyixp2Q11sbyQComkceSSh3GY4a\",\n    tokenName: \"Starke Finance\",\n    tokenSymbol: \"STARKE\",\n  },\n  {\n    bankAddress: \"37tiA2NTF6YCt85XzCidPo9ZVpuqkkmfVJCYQ5Yx5Uhs\",\n    validatorVoteAccount: \"SBLZib4npE7svxFA7AsD3ytdQAfYNb39c8zsU82AA2E\",\n    tokenAddress: \"96rXgCFy1Er49169XoKHkeLiKC2k4bTy1641q1TVrMm2\",\n    tokenName: \"SolBlaze Validator\",\n    tokenSymbol: \"SOLBLAZE\",\n  },\n  {\n    bankAddress: \"J9trpcrVdFjVNg6VFrdF1XPGgjftQKZhbbWsxertdv9V\",\n    validatorVoteAccount: \"FACqsS19VScz8oo2YhdMg35EsAy6xsCZ9Y58eJXGv8QJ\",\n    tokenAddress: \"AH6fxpHS2gtMtJgBy8y8pEAPkqyop2pSugF6REs9NaTp\",\n    tokenName: \"Lantern\",\n    tokenSymbol: \"LNTRN\",\n  },\n  {\n    bankAddress: \"EGTfrYiuWpPPZ4yfY9tCxnK6QMkY7pzVie9DxK772iGe\",\n    validatorVoteAccount: \"EfnywDKqArxK6N6FS9ctsuzNdxfx3pzfXEQE5EevQ1SV\",\n    tokenAddress: \"FcXEwHku68ZquqtSj1eSWS1SVWkhAZSyb4usfpiuEJAL\",\n    tokenName: \"PROJECT SUPER\",\n    tokenSymbol: \"SUPER\",\n  },\n  {\n    bankAddress: \"A5e7UTE3g11ZfKgftqRCvxAgcDuFGyeDjMka96zJWSWe\",\n    validatorVoteAccount: \"3ZUQekqiZoybB57y49eqtvSaoonqDwuNbeqEGwN88JkQ\",\n    tokenAddress: \"F1XPjtpsEy23Q7po4JkWjp1jkDZcvFYSrqD8TR1YL3EF\",\n    tokenName: \"Paws\",\n    tokenSymbol: \"PAWS\",\n  },\n  {\n    bankAddress: \"91jkdp4cF8vCDhjwude3SGSGrmVWFk5vTAtR6fsGVAfy\",\n    validatorVoteAccount: \"gangtRyGPTvYWb8K3xS2feJQaCks4iJ7rytFUPtVqSY\",\n    tokenAddress: \"6ZS7ZVDw91BVAC8gsz3SZBSeVeF2GtXtL2BHK31Kvyjm\",\n    tokenName: \"Lotus Validator\",\n    tokenSymbol: \"LOTUS\",\n  },\n  {\n    bankAddress: \"72BS34HkCgq8RWQR7kuVVmiJMtKqSxG4CHX6ZXpSCwg7\",\n    validatorVoteAccount: \"oRAnGeU5h8h2UkvbfnE5cjXnnAa4rBoaxmS4kbFymSe\",\n    tokenAddress: \"9yF8pXctzicum2P73uuk4Dhqf2MVz6tzRAe8THGXCJcp\",\n    tokenName: \"Orangefin Ventures\",\n    tokenSymbol: \"ORANGEFIN\",\n  },\n  {\n    bankAddress: \"8F4DsU3NMFunUxBZkWrpYR8zwhAfoAt7QuiEPMtyhWvX\",\n    validatorVoteAccount: \"3xjfK9C9YNcta8MvK1US4sQ3bc6DEjoJoR3qLExGf9xE\",\n    tokenAddress: \"Akib1NYJzzh9HkiDH41S2LUefUmR1bKsk65xgqUcW5C5\",\n    tokenName: \"pico🙄.sol\",\n    tokenSymbol: \"PICO\",\n  },\n  {\n    bankAddress: \"GdtggomQth6cxuYPdiVhBbcX7VC9rnDDwLMfxipxE2Po\",\n    validatorVoteAccount: \"oPaLTmyvoUhW26QCMwLA5JNUeBYy72PDpFoXQF8SeX4\",\n    tokenAddress: \"C71A3W7g5XALUNwTDWTwHX3qhfypaYZ41aNZjBpcaC9D\",\n    tokenName: \"Temporal Opal\",\n    tokenSymbol: \"OPAL\",\n  },\n  {\n    bankAddress: \"5sJCKePwAhyD3mzrzLRDM2PkFMc85nnvvarxHLsvWvpg\",\n    validatorVoteAccount: \"9jYFwBfbjYmvasFbJyES9apLJDTkwtbgSDRWanHEvcRw\",\n    tokenAddress: \"Hj69K1WbnfZFipLbrzdxgGhDqCR47q48bN5nUHt6xQZo\",\n    tokenName: \"WATCHTOWER\",\n    tokenSymbol: \"WATCHTOWER\",\n  },\n  {\n    bankAddress: \"3F3QXT3BtkegaBfFjn2odKLurFYLHJHJ99xKV2TRTvrk\",\n    validatorVoteAccount: \"6JfBwvcz5QUKQJ37BMKTLrf968DDJBtwoZLw19aHwFtQ\",\n    tokenAddress: \"8FqX86cQofBHReetZgxrxxvzN4iqMVsj2hbiv7pj2h73\",\n    tokenName: \"Spectrum Staking\",\n    tokenSymbol: \"SPECTRUM\",\n  },\n  {\n    bankAddress: \"CFmvdtEPQJPVqS1QRkeRcdQm2itAPk6k8hSJbmt88Sjc\",\n    validatorVoteAccount: \"Haz7b47sZBpxh9SwggGndN3fAyNQ1S949BPdxWXS3ab6\",\n    tokenAddress: \"38ZUTefZnKSUJU3wxpUe3xpiw2j5WQPnmzSTNbS1JqLA\",\n    tokenName: \"Temporal Emerald\",\n    tokenSymbol: \"EMERALD\",\n  },\n  {\n    bankAddress: \"CmBDHSVuodmUnanbBVFvY9cauLeosbdFQn9bJANMVYUG\",\n    validatorVoteAccount: \"mintrNtxN3PhAB45Pt41XqyKghTTpqcoBkQTZqh96iR\",\n    tokenAddress: \"GxGmv7s7s2co3pLZukns946fr5zmR8c5buWRD9prGd6v\",\n    tokenName: \"Hanabi Staking\",\n    tokenSymbol: \"haSOLmrgn\",\n  },\n  {\n    bankAddress: \"7bLfrb4fWVYkVpZ9rg7dBUwKRAqLyiivCW4ahMMGcKyS\",\n    validatorVoteAccount: \"76DafWkJ6pGK2hoD41HjrM4xTBhfKqrDYDazv13n5ir1\",\n    tokenAddress: \"GT7n9uZbYzHv52YqDBowtZ5ZVW91umaBQTNPFQNeLUpR\",\n    tokenName: \"Solana Japan Validator\",\n    tokenSymbol: \"SolJAPAn\",\n  },\n  {\n    bankAddress: \"6q5DB86DhCBQt5bqzZwgopV8EA96aCnngu5ebR1ooDFq\",\n    validatorVoteAccount: \"Cue647T8jgwpRSDUb8ttTYx7NiEfJCRZNiiw1qmchXsG\",\n    tokenAddress: \"EAR6LenhNstHxR9289rWakm82WgLJYvHD7NawfXtuyUx\",\n    tokenName: \"KIWAMI\",\n    tokenSymbol: \"KIWAMI\",\n  },\n  {\n    bankAddress: \"GLSCJ39N82Xo21621jMheinvjQLrBrkG7gzo2C5L1y6y\",\n    validatorVoteAccount: \"7emL18Bnve7wbYE9Az7vYJjikxN6YPU81igf6rVU5FN8\",\n    tokenAddress: \"EQuMUgLZArKwWUk6uGPmTGYUgNbfgJrbBaNR7CQyZ5uf\",\n    tokenName: \"Temporal Topaz\",\n    tokenSymbol: \"TOPAZ\",\n  },\n  {\n    bankAddress: \"4irzCCsU53ffh9XB7NxGzbbHjvSR7FTfPbn6KoXkt7kX\",\n    validatorVoteAccount: \"2iWXwF2Q5W6o7yntV2mkbxncB4rYHnX61y3NU8a8EFMJ\",\n    tokenAddress: \"14Pets6QpE9iXKkXg8Ri4GcDazRMfWR3guM6LZXnFChc\",\n    tokenName: \"Bull Moose SOL\",\n    tokenSymbol: \"bmsSOL\",\n  },\n  {\n    bankAddress: \"C96do7nkEaaFjHq8jHzPpyPTdJSea5xEGwxDzDSepCzf\",\n    validatorVoteAccount: \"voteRnv6PBzmiGP8NicWtQiqEJTwKKq2SxtqtdLUJjd\",\n    tokenAddress: \"3YEDiJ4r4xRGNhq6nudRnkwrdKHG7PAtDim24CjTMtBH\",\n    tokenName: \"diman\",\n    tokenSymbol: \"DIMAN\",\n  },\n  {\n    bankAddress: \"9dZiyG51FBR4BWpAs69XbDpr7GfVAEB1ZB89v38maV36\",\n    validatorVoteAccount: \"Simpj3KyRQmpRkXuBvCQFS7DBBG6vqw93SkZb9UD1hp\",\n    tokenAddress: \"77YLpVLQXr2KU66GM2JykbT9g5du7LarWgehbWD3CJaB\",\n    tokenName: \"SIMPDIGIT\",\n    tokenSymbol: \"SIMPDIGIT\",\n  },\n  {\n    bankAddress: \"2foqT8wWzWRduyV37uRdj81DijkNMKzYD3D6JPfir7La\",\n    validatorVoteAccount: \"48oxpSHQkM4sdXUY9NQ8KnEtebzZbyk8uUT7JRdVQNuf\",\n    tokenAddress: \"42m7Ygk5VxREdKfcFrsH1HnuoqCke8BcVcxNeywMCfp2\",\n    tokenName: \"Infinite Lux\",\n    tokenSymbol: \"LUX\",\n  },\n  {\n    bankAddress: \"FsdWEJzHXkUXejWnb7c1p9UJtF69hVWQNNoakjoXyRCJ\",\n    validatorVoteAccount: \"4AUED4uj6nSTuANzaAUnGBPJQRmhpDYDwoWJNkoUUBBW\",\n    tokenAddress: \"CiyQTfHJ9PbTwC7TGf4pXZk8szcWGJ8TeFhhCuUwybqi\",\n    tokenName: \"Anagram\",\n    tokenSymbol: \"ANAGRAM\",\n  },\n  {\n    bankAddress: \"2hs1pHAzDWGqnn1d8VQkc8bZRfQ45grYvzfau8dnWFUk\",\n    validatorVoteAccount: \"2NxEEbhqqj1Qptq5LXLbDTP5tLa9f7PqkU8zNgxbGU9P\",\n    tokenAddress: \"9yQLxEzusZ7QiZNafDNdzbEaTCPuJToGjMhLRJtZbgsd\",\n    tokenName: \"NANSEN\",\n    tokenSymbol: \"NANSEN\",\n  },\n  {\n    bankAddress: \"FCi8unSVCwJd3QkrhTtv6LTTjw1c4zV65D5cG5N1rAG6\",\n    validatorVoteAccount: \"Va1idkzkB6LEmVFmxWbWU8Ao9qehC62Tjmf68L3uYKj\",\n    tokenAddress: \"AExKb8oJ6mGPYJUyfiX49DMMi226h2AnWeG1G6neQBEz\",\n    tokenName: \"VALIDATOR\",\n    tokenSymbol: \"VALID\",\n  },\n  {\n    bankAddress: \"HzS8RqaQ5syk6EHbVi7h9rFYN48PpxykUXEs6w9wNfNP\",\n    validatorVoteAccount: \"sTach38ebT8jnGH8i2D1g8NDAS6An19whVMnSSWPXt4\",\n    tokenAddress: \"AFDVYBqxADagPfN9DdbrNrf9zZqugub7CV4kUJEUrK6J\",\n    tokenName: \"Stache Node\",\n    tokenSymbol: \"STACHE\",\n  },\n  {\n    bankAddress: \"9Hs4E6ACNw6Hmwjvm1duXzbaWmvXxSxN11agw4updEn1\",\n    validatorVoteAccount: \"EtMSc3MvcDXUr6ChK5GxyFVwTxYA3zqP5XzjE9jwKvSV\",\n    tokenAddress: \"ENKFyZQZHzNNSxcKYoaVsNLi2xoGPoStZH4A9xxezjbC\",\n    tokenName: \"Mad Lads CN\",\n    tokenSymbol: \"MadLadsCN\",\n  },\n  {\n    bankAddress: \"4watsWcjTBAwsrZpArwQbnNX4bQ1yeHBxgdbrGT4eMu9\",\n    validatorVoteAccount: \"EARNynHRWg6GfyJCmrrizcZxARB3HVzcaasvNa8kBS72\",\n    tokenAddress: \"8fhkWcm2n28JuadzY7mRR8FFDZZfnaPfWgw7pLNVZCbE\",\n    tokenName: \"Solana Compass Stake\",\n    tokenSymbol: \"compaStake\",\n  },\n  {\n    bankAddress: \"9d7MTvcz1VMB1rK6H73quMxkR26dLPz5HDaac2eGRjQx\",\n    validatorVoteAccount: \"nymsndUdAZyUPpWYz5VEg8Ghj9cFvwTRgciLogpmYaQ\",\n    tokenAddress: \"FWFeaqpkgDr3ejVSY3HjiUmUg3u9fcr5d66HvimnDLWE\",\n    tokenName: \"Hypo Nyms\",\n    tokenSymbol: \"NYMS\",\n  },\n  {\n    bankAddress: \"6V4vCK3n3JVncfpS16mW8ceLoNPatvu61pKxFmWx8adi\",\n    validatorVoteAccount: \"BT8LZUvQVwFHRGw2Dwv7UeqDUq7btfjegLpuz5bwgziD\",\n    tokenAddress: \"9YRS7Stf9dVibTT1M4uVEAuRMcoS4MH1QxqXy9Lssrab\",\n    tokenName: \"private\",\n    tokenSymbol: \"private\",\n  },\n  {\n    bankAddress: \"CK8qRAcmvkDXaqX2S5GkgTCZT5pCz34me1neQhpJYe1Z\",\n    validatorVoteAccount: \"Ac1beBKixfNdrTAac7GRaTsJTxLyvgGvJjvy4qQfvyfc\",\n    tokenAddress: \"DLTAbTL5NXhbqX6LX3ie3tf52pdtGpxe2DrZUr1RhgY6\",\n    tokenName: \"Stronghold\",\n    tokenSymbol: \"Stronghold\",\n  },\n  {\n    bankAddress: \"H6CT1aiCgSNw9S6aq38npEhdoN2UPhSKe8Lj9fQqqjuu\",\n    validatorVoteAccount: \"FREEL1BCzmPpNneC7FHCtBqzeWYrHRbtisFvi4N8XUP9\",\n    tokenAddress: \"AKFuMoM5rjSpQSL4p6TBoc7D4dmEem9QrHhuSDCBYyZ8\",\n    tokenName: \"Ross\",\n    tokenSymbol: \"Ross\",\n  },\n  {\n    bankAddress: \"G46aHuakgStymbE2WsLbja61mH5UXBPdSdpwf6Ci3saG\",\n    validatorVoteAccount: \"mnvkHm47ZmRKoSWuQZAfXLRiDPiKCq8PWkMWrp1Wwqe\",\n    tokenAddress: \"Cq9S5UB9BviPn5yoGkEDk3m7neQag4KJnhPWGyuev9W8\",\n    tokenName: \"gripto staked sol\",\n    tokenSymbol: \"GRIPTO\",\n  },\n  {\n    bankAddress: \"75UmeEMdqVnGn3JHx8yVZEn7viybJ73XYSjhYCYfyhp2\",\n    validatorVoteAccount: \"4m1PbxzwLdUnEwog3T9UKxgjktgriHgE1CfAhMqDw7Xx\",\n    tokenAddress: \"432SogPNunjZMneDV6goZ8ZcCQz282GxoSJ4rwqx95pT\",\n    tokenName: \"kumasol\",\n    tokenSymbol: \"kumasol\",\n  },\n  {\n    bankAddress: \"3zk6EmXANYQK12bwy9dySRAM4cT2vT5cDcAB79j8G33B\",\n    validatorVoteAccount: \"HvsD9L5t62MGv3QBD2K7xjkipGYr9UZN7BtsW8NuSPpg\",\n    tokenAddress: \"5vmwd6JHDCmX9W2XT1n2QpvYGA2kk4Xf7qWSayDU6caT\",\n    tokenName: \"ArgenTerraSOL\",\n    tokenSymbol: \"atSOL\",\n  },\n  {\n    bankAddress: \"4C2vPweGNpiE6kTEbYvcbUBHNWxrn4ErQYaqWm5zDexx\",\n    validatorVoteAccount: \"FnAPJkzf19s87sm24Qhv6bHZMZvZ43gjNUBRgjwXpD4v\",\n    tokenAddress: \"6q4kVnwUpkE3i7W32dqaX6V12pbsrCnMqZ7TWz9yp1m5\",\n    tokenName: \"BLOCKPORT\",\n    tokenSymbol: \"BPT\",\n  },\n  {\n    bankAddress: \"E5hZu5QQ1pRmGvyS4JHGXVQwzdUPaYM4yEiNKr64YzyG\",\n    validatorVoteAccount: \"nfGcSJkP35SkPa5475iBChmq1UNcj7JE1uQHrrasymm\",\n    tokenAddress: \"AQpQoJ3tJKGH9Yn8GSzoUsVcHPJjj3xYfQFp9XVr74F6\",\n    tokenName: \"Test01\",\n    tokenSymbol: \"TEST01\",\n  },\n  {\n    bankAddress: \"3VCkXWAmE5DSwYRpqGFnkUz7vvD2RKbhFvrhzLuE8msu\",\n    validatorVoteAccount: \"abc1zP7ihWsgQW8z5YmfQNqMckJE5Dfx8fwUNMNVNkY\",\n    tokenAddress: \"BNisp3omkr6Rg5nHESWafjUbeCpGPy6MYq1iRJRgSAsh\",\n    tokenName: \"ALGO STAKE\",\n    tokenSymbol: \"ALGO\",\n  },\n  {\n    bankAddress: \"7BHHMWw3P1AyebLhX9A8wnDeeGy8jgFXqqHuEZt7BVmW\",\n    validatorVoteAccount: \"8Pep3GmYiijRALqrMKpez92cxvF4YPTzoZg83uXh14pW\",\n    tokenAddress: \"zBH13AzXYCqHZKS8NGa4KR8zQhWiyvFdDY15nmfrHgS\",\n    tokenName: \"8Pep\",\n    tokenSymbol: \"8Pep\",\n  },\n  {\n    bankAddress: \"9QWUatjtJtc98yts4ufWnmNeaWQRmaaLjFwbK3iMdS47\",\n    validatorVoteAccount: \"CatzoSMUkTRidT5DwBxAC2pEtnwMBTpkCepHkFgZDiqb\",\n    tokenAddress: \"98B1NMLYaNJQNxiQGr53vbjNFMNTYFmDqoCgj7qD9Vhm\",\n    tokenName: \"JUPITER \",\n    tokenSymbol: \"JUPITER\",\n  },\n  {\n    bankAddress: \"5q1wJkGqqRh6mSBtjG8sfjBsgJSGdA2QoXTWv4UQbHGk\",\n    validatorVoteAccount: \"shft7Fry1js37Hm9wq4dfwcZSp2DyKszeWMvEpjYCQ1\",\n    tokenAddress: \"C1KwBJZNwUaodUcP5kXqD52NCuZzThNAG2cw3vt5H6iE\",\n    tokenName: \"BLUESHIFT\",\n    tokenSymbol: \"SHIFT\",\n  },\n  {\n    bankAddress: \"FZaHyfg9hmNMKpfUJ474wNKPaPdXMpnJouasKnndECiZ\",\n    validatorVoteAccount: \"DdCNGDpP7qMgoAy6paFzhhak2EeyCZcgjH7ak5u5v28m\",\n    tokenAddress: \"PhxXAYTkFZS23ZWvFcz6H6Uq4VnVBMa6hniiAyudjaW\",\n    tokenName: \"KILN1\",\n    tokenSymbol: \"KILN1\",\n  },\n  {\n    bankAddress: \"5CBocarwfJeWGNozGemWktRYSz6kPikRPdfH8ZHSFrsg\",\n    validatorVoteAccount: \"8zuMRTXThoPTTPLLvaiKiJshLLCqGMt9BdRjjCL19xBc\",\n    tokenAddress: \"BDsEuxFWznAP5cUCannnfjyjDtTwqN57CkGfDbjx2nNZ\",\n    tokenName: \"DawnLabs\",\n    tokenSymbol: \"DawnLabs\",\n  },\n  {\n    bankAddress: \"9ivswG37QpCUmkPkLMpRZT7PMyP64V9dDpZdteM254ec\",\n    validatorVoteAccount: \"gaToR246dheK1DGAMEqxMdBJZwU4qFyt7DzhSwAHFWF\",\n    tokenAddress: \"TjA2rtxoUFzyPVAw35VQGEQnNXiwcmNjKSk29nmkq1P\",\n    tokenName: \"Valigator Open\",\n    tokenSymbol: \"Valigator\",\n  },\n  {\n    bankAddress: \"7jDJDLjjPZG3M2C8XAEJxDbvHz1e9c7zWzGX4itnKicR\",\n    validatorVoteAccount: \"7K8DVxtNJGnMtUY1CQJT5jcs8sFGSZTDiG7kowvFpECh\",\n    tokenAddress: \"CRpAn8E5k9G5VSRuzGfSyfL3Dhtq3phHZbfRwMQnCe2Z\",\n    tokenName: \"Hubra\",\n    tokenSymbol: \"HUBRA\",\n  },\n  {\n    bankAddress: \"62KsgJK5e1WM1uJ3KDgVdizHqLYfbMthNZLnJQRRJKRG\",\n    validatorVoteAccount: \"FKsC411dik9ktS6xPADxs4Fk2SCENvAiuccQHLAPndvk\",\n    tokenAddress: \"2pMCRTPxF355vC56r6mL8vfnqa24up5CfZmcX1HkFj7i\",\n    tokenName: \"P2P org\",\n    tokenSymbol: \"P2P\",\n  },\n  {\n    bankAddress: \"3DGvNzGY1QiabuUiuC8HwTZ58eZK6YtLknsvXksWzQap\",\n    validatorVoteAccount: \"CcaHc2L43ZWjwCHART3oZoJvHLAe9hzT2DJNUpBzoTN1\",\n    tokenAddress: \"E7fosu1BW5ELQwDpipNK9TVSq9eRroPz9AhnnrfhNNYQ\",\n    tokenName: \"Figment\",\n    tokenSymbol: \"FIGMENT\",\n  },\n];\n","/**\n * @module metadata.utils\n *\n * Temporary hardcoded staked bank metadata.\n * This will be replaced by a dynamic API fetch once the backend endpoint is available.\n *\n * Source: https://storage.googleapis.com/mrgn-public/mrgn-staked-bank-metadata-cache.json\n *\n * TODO: Replace with dynamic fetch from API when available.\n */\nimport { STAKED_BANK_METADATA_JSON } from \"./metadata.data\";\n\n// -- Types ----\n\n/**\n * Metadata for a staked bank entry.\n * Sourced from hardcoded JSON — update via `metadata.data.ts` until dynamic fetching is implemented.\n */\nexport interface StakedBankMetadata {\n  bankAddress: string;\n  validatorVoteAccount: string;\n  tokenAddress: string;\n  tokenName: string;\n  tokenSymbol: string;\n}\n\n// -- Cached Maps ----\n\nlet _metadataMap: Map<string, StakedBankMetadata> | null = null;\nlet _voteAccountByBank: Record<string, string> | null = null;\n\n// -- Public API ----\n\n/**\n * Returns a Map of bankAddress → StakedBankMetadata (lazy-cached).\n *\n * @remarks Uses hardcoded data. TODO: Replace with dynamic API fetch.\n */\nexport function getStakedBankMetadataMap(): Map<string, StakedBankMetadata> {\n  if (!_metadataMap) {\n    _metadataMap = new Map();\n    for (const entry of STAKED_BANK_METADATA_JSON) {\n      _metadataMap.set(entry.bankAddress, entry);\n    }\n  }\n  return _metadataMap;\n}\n\n/**\n * Returns a Record of bankAddress → validatorVoteAccount (lazy-cached).\n *\n * @remarks Uses hardcoded data. TODO: Replace with dynamic API fetch.\n */\nexport function getValidatorVoteAccountByBank(): Record<string, string> {\n  if (!_voteAccountByBank) {\n    _voteAccountByBank = {};\n    for (const entry of STAKED_BANK_METADATA_JSON) {\n      _voteAccountByBank[entry.bankAddress] = entry.validatorVoteAccount;\n    }\n  }\n  return _voteAccountByBank;\n}\n","import { Buffer } from \"buffer\";\n\nimport { Connection, LAMPORTS_PER_SOL, PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { getStakedBankMetadataMap } from \"./metadata.utils\";\n\nimport { chunkedGetRawMultipleAccountInfoOrdered } from \"~/services/misc\";\nimport {\n  findPoolAddress,\n  findPoolStakeAddress,\n  findPoolMintAddress,\n} from \"~/vendor/single-spl-pool\";\n\n/**\n * Minimal bank shape required to compute staked-bank multipliers.\n * Kept local to avoid a hard dependency on the Bank model.\n */\ninterface StakedBankLike {\n  address: PublicKey;\n}\n\n/**\n * Computes the asset-share multiplier (LST → SOL ratio) for each staked bank.\n *\n * For each staked bank:\n *   multiplier = max(stakeLamports - LAMPORTS_PER_SOL, 0) / lstMintSupply\n *\n * Banks whose metadata cannot be resolved, or whose pool accounts cannot be\n * fetched, default to a multiplier of 1.\n *\n * @param stakedBanks - Banks with `assetTag === AssetTag.STAKED`\n * @param connection  - Solana RPC connection\n * @returns Map of bank address (base58) → BigNumber multiplier\n */\nexport async function computeStakedBankMultipliers(\n  stakedBanks: StakedBankLike[],\n  connection: Connection\n): Promise<Map<string, BigNumber>> {\n  const multiplierByBank = new Map<string, BigNumber>();\n\n  if (stakedBanks.length === 0) {\n    return multiplierByBank;\n  }\n\n  const metadataMap = getStakedBankMetadataMap();\n\n  // Derive pool stake addresses and LST mint addresses for each staked bank\n  const stakedBankAddresses: string[] = [];\n  const poolStakeAddresses: PublicKey[] = [];\n  const lstMintAddresses: PublicKey[] = [];\n\n  for (const bank of stakedBanks) {\n    const metadata = metadataMap.get(bank.address.toBase58());\n    if (!metadata) {\n      multiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n      continue;\n    }\n    const pool = findPoolAddress(new PublicKey(metadata.validatorVoteAccount));\n    stakedBankAddresses.push(bank.address.toBase58());\n    poolStakeAddresses.push(findPoolStakeAddress(pool));\n    lstMintAddresses.push(findPoolMintAddress(pool));\n  }\n\n  if (stakedBankAddresses.length === 0) {\n    return multiplierByBank;\n  }\n\n  // Batch-fetch pool stake accounts and LST mint supplies\n  const allAddresses = [\n    ...poolStakeAddresses.map((a) => a.toBase58()),\n    ...lstMintAddresses.map((a) => a.toBase58()),\n  ];\n  const accountInfos = await chunkedGetRawMultipleAccountInfoOrdered(connection, allAddresses);\n  const poolStakeInfos = accountInfos.slice(0, poolStakeAddresses.length);\n  const lstMintInfos = accountInfos.slice(poolStakeAddresses.length);\n\n  for (let i = 0; i < stakedBankAddresses.length; i++) {\n    const bankAddr = stakedBankAddresses[i];\n    const poolStakeInfo = poolStakeInfos[i];\n    const lstMintInfo = lstMintInfos[i];\n\n    if (!poolStakeInfo || !lstMintInfo) {\n      multiplierByBank.set(bankAddr, new BigNumber(1));\n      continue;\n    }\n\n    const stakeLamports = poolStakeInfo.lamports;\n    // LST mint supply is stored at offset 36, as a little-endian u64\n    const supplyBuffer = lstMintInfo.data.slice(36, 44);\n    const lstMintSupply = Number(Buffer.from(supplyBuffer).readBigUInt64LE(0));\n\n    if (lstMintSupply === 0) {\n      multiplierByBank.set(bankAddr, new BigNumber(1));\n      continue;\n    }\n\n    // multiplier = (stakeInPool - LAMPORTS_PER_SOL) / lstMintSupply\n    const adjustedStake = Math.max(stakeLamports - LAMPORTS_PER_SOL, 0);\n    const multiplier = new BigNumber(adjustedStake).dividedBy(lstMintSupply);\n    multiplierByBank.set(bankAddr, multiplier);\n  }\n\n  return multiplierByBank;\n}\n","import {\n  Keypair,\n  LAMPORTS_PER_SOL,\n  PublicKey,\n  StakeAuthorizationLayout,\n  StakeProgram,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport type { MakeMintStakedLstIxParams, MakeMintStakedLstTxParams } from \"../types\";\n\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  TransactionType,\n} from \"~/services/transaction\";\nimport {\n  SinglePoolInstruction,\n  findPoolAddress,\n  findPoolMintAddress,\n  findPoolStakeAuthorityAddress,\n} from \"~/vendor/single-spl-pool\";\nimport {\n  getAssociatedTokenAddressSync,\n  createAssociatedTokenAccountInstruction,\n} from \"~/vendor/spl\";\n\nconst SYSVAR_CLOCK_ID = new PublicKey(\"SysvarC1ock11111111111111111111111111111111\");\n\n/**\n * Creates instructions to convert a native stake account into LST tokens.\n *\n * Steps:\n * 1. Create LST ATA if needed\n * 2. Split stake account if partial amount\n * 3. Authorize staker + withdrawer to pool\n * 4. Deposit stake into pool → user receives LST\n */\nexport async function makeMintStakedLstIx(\n  params: MakeMintStakedLstIxParams\n): Promise<InstructionsWrapper> {\n  const { amount, authority, stakeAccountPk, validator, connection } = params;\n\n  // Derive addresses\n  const pool = findPoolAddress(validator);\n  const lstMint = findPoolMintAddress(pool);\n  const poolStakeAuth = findPoolStakeAuthorityAddress(pool);\n  const lstAta = getAssociatedTokenAddressSync(lstMint, authority);\n\n  // Fetch account info\n  const [lstAccInfo, stakeAccInfoParsed, rentExemptReserve] = await Promise.all([\n    connection.getAccountInfo(lstAta),\n    connection.getParsedAccountInfo(stakeAccountPk),\n    connection.getMinimumBalanceForRentExemption(StakeProgram.space),\n  ]);\n\n  const stakeAccParsed = stakeAccInfoParsed?.value?.data as {\n    parsed: { info: { stake?: { delegation?: { stake?: string } } } };\n  };\n\n  // Calculate amounts\n  const amountLamports = Math.round(Number(amount) * LAMPORTS_PER_SOL);\n  const stakeAccLamports = Number(stakeAccParsed?.parsed?.info?.stake?.delegation?.stake ?? 0);\n  const isFullStake = amountLamports >= stakeAccLamports;\n\n  // Build instructions\n  const instructions: TransactionInstruction[] = [];\n  const signers: Keypair[] = [];\n\n  // Create ATA if needed\n  if (!lstAccInfo) {\n    instructions.push(\n      createAssociatedTokenAccountInstruction(authority, lstAta, authority, lstMint)\n    );\n  }\n\n  // Handle stake splitting if partial\n  let targetStakePubkey: PublicKey;\n  if (!isFullStake) {\n    const splitStakeAccount = Keypair.generate();\n    signers.push(splitStakeAccount);\n    targetStakePubkey = splitStakeAccount.publicKey;\n\n    instructions.push(\n      ...StakeProgram.split(\n        {\n          stakePubkey: stakeAccountPk,\n          authorizedPubkey: authority,\n          splitStakePubkey: splitStakeAccount.publicKey,\n          lamports: amountLamports,\n        },\n        rentExemptReserve\n      ).instructions\n    );\n  } else {\n    targetStakePubkey = stakeAccountPk;\n  }\n\n  // Authorize pool stake authority as staker + withdrawer\n  const [authorizeStakerIx, authorizeWithdrawIx] = await Promise.all([\n    StakeProgram.authorize({\n      stakePubkey: targetStakePubkey,\n      authorizedPubkey: authority,\n      newAuthorizedPubkey: poolStakeAuth,\n      stakeAuthorizationType: StakeAuthorizationLayout.Staker,\n    }).instructions,\n    StakeProgram.authorize({\n      stakePubkey: targetStakePubkey,\n      authorizedPubkey: authority,\n      newAuthorizedPubkey: poolStakeAuth,\n      stakeAuthorizationType: StakeAuthorizationLayout.Withdrawer,\n    }).instructions,\n  ]);\n\n  // Fix SYSVAR_CLOCK_ID writability (known Solana SDK quirk)\n  [authorizeStakerIx[0], authorizeWithdrawIx[0]].forEach((ix) => {\n    if (ix) {\n      ix.keys = ix.keys.map((key) => ({\n        ...key,\n        isWritable: key.pubkey.equals(SYSVAR_CLOCK_ID) ? false : key.isWritable,\n      }));\n    }\n  });\n\n  instructions.push(...authorizeStakerIx, ...authorizeWithdrawIx);\n\n  // Deposit stake into pool → user receives LST\n  const depositStakeIx = await SinglePoolInstruction.depositStake(\n    pool,\n    targetStakePubkey,\n    lstAta,\n    authority\n  );\n  instructions.push(depositStakeIx);\n\n  return { instructions, keys: signers };\n}\n\n/**\n * Creates a versioned transaction to convert a native stake account into LST tokens.\n */\nexport async function makeMintStakedLstTx(\n  params: MakeMintStakedLstTxParams\n): Promise<ExtendedV0Transaction> {\n  const { connection, luts, blockhash: providedBlockhash } = params;\n\n  const { instructions, keys } = await makeMintStakedLstIx(params);\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: params.authority,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    signers: keys,\n    addressLookupTables: luts,\n    type: TransactionType.DEPOSIT_STAKE,\n  });\n}\n","import {\n  Keypair,\n  StakeProgram,\n  SystemProgram,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport type { MakeRedeemStakedLstIxParams, MakeRedeemStakedLstTxParams } from \"../types\";\n\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  TransactionType,\n} from \"~/services/transaction\";\nimport {\n  SinglePoolInstruction,\n  findPoolAddress,\n  findPoolMintAddress,\n  findPoolMintAuthorityAddress,\n} from \"~/vendor/single-spl-pool\";\nimport { getAssociatedTokenAddressSync, createApproveInstruction } from \"~/vendor/spl\";\n\n/**\n * Creates instructions to convert LST tokens back to a native stake account.\n *\n * Steps:\n * 1. Create new stake account (rent-exempt)\n * 2. Approve pool mint authority to burn LST\n * 3. Withdraw stake from pool → user receives stake account\n */\nexport async function makeRedeemStakedLstIx(\n  params: MakeRedeemStakedLstIxParams\n): Promise<InstructionsWrapper> {\n  const { amount, authority, validator, connection } = params;\n\n  // Derive addresses\n  const pool = findPoolAddress(validator);\n  const lstMint = findPoolMintAddress(pool);\n  const mintAuthority = findPoolMintAuthorityAddress(pool);\n  const lstAta = getAssociatedTokenAddressSync(lstMint, authority);\n\n  // Calculate rent exemption for new stake account\n  const rentExemption = await connection.getMinimumBalanceForRentExemption(StakeProgram.space);\n\n  const stakeAmount = new BigNumber(new BigNumber(amount).toString());\n\n  // Build instructions\n  const instructions: TransactionInstruction[] = [];\n  const signers: Keypair[] = [];\n\n  // Create new stake account to receive the withdrawn stake\n  const stakeAccount = Keypair.generate();\n  signers.push(stakeAccount);\n\n  instructions.push(\n    SystemProgram.createAccount({\n      fromPubkey: authority,\n      newAccountPubkey: stakeAccount.publicKey,\n      lamports: rentExemption,\n      space: StakeProgram.space,\n      programId: StakeProgram.programId,\n    })\n  );\n\n  // Approve mint authority to burn LST tokens\n  instructions.push(\n    createApproveInstruction(\n      lstAta,\n      mintAuthority,\n      authority,\n      BigInt(stakeAmount.multipliedBy(1e9).toFixed(0))\n    )\n  );\n\n  // Withdraw stake from pool (LST → stake account)\n  const withdrawStakeIx = await SinglePoolInstruction.withdrawStake(\n    pool,\n    stakeAccount.publicKey,\n    authority,\n    lstAta,\n    stakeAmount\n  );\n  instructions.push(withdrawStakeIx);\n\n  return { instructions, keys: signers };\n}\n\n/**\n * Creates a versioned transaction to convert LST tokens back to a native stake account.\n */\nexport async function makeRedeemStakedLstTx(\n  params: MakeRedeemStakedLstTxParams\n): Promise<ExtendedV0Transaction> {\n  const { connection, luts, blockhash: providedBlockhash } = params;\n\n  const { instructions, keys } = await makeRedeemStakedLstIx(params);\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: params.authority,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    signers: keys,\n    addressLookupTables: luts,\n    type: TransactionType.WITHDRAW_STAKE,\n  });\n}\n","import { StakeProgram, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\n\nimport type { MakeMergeStakeAccountsTxParams } from \"../types\";\n\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  TransactionType,\n} from \"~/services/transaction\";\n\n/**\n * Creates a versioned transaction to merge two stake accounts.\n *\n * The source stake account will be merged into the destination stake account.\n * Both accounts must share the same authorized staker/withdrawer and vote account.\n */\nexport async function makeMergeStakeAccountsTx(\n  params: MakeMergeStakeAccountsTxParams\n): Promise<ExtendedV0Transaction> {\n  const {\n    authority,\n    sourceStakeAccount,\n    destinationStakeAccount,\n    connection,\n    luts,\n    blockhash: providedBlockhash,\n  } = params;\n\n  const mergeIx = StakeProgram.merge({\n    stakePubkey: destinationStakeAccount,\n    sourceStakePubKey: sourceStakeAccount,\n    authorizedPubkey: authority,\n  }).instructions;\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: authority,\n    recentBlockhash: blockhash,\n    instructions: mergeIx,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    addressLookupTables: luts,\n    type: TransactionType.MERGE_STAKE_ACCOUNTS,\n  });\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport {\n  decodeGammaLpVaultData,\n  decodeGammaWithdrawReceiptData,\n  deriveGammaWithdrawReceipt,\n  GammaLpVaultRaw,\n  GammaWithdrawReceiptRaw,\n} from \"~/vendor/gamma\";\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n/** Fetch and decode a Gamma `LpVault` account. Throws if it does not exist. */\nexport async function fetchGammaLpVault(\n  connection: Connection,\n  lpVault: PublicKey\n): Promise<GammaLpVaultRaw> {\n  const info = await connection.getAccountInfo(lpVault);\n  if (!info) {\n    throw new Error(`Gamma LpVault account not found: ${lpVault.toBase58()}`);\n  }\n  return decodeGammaLpVaultData(info.data, lpVault);\n}\n\n/**\n * Fetch and decode a user's `WithdrawReceipt` for a Gamma LP vault. The receipt\n * is a singleton PDA per (user, vault) that tracks a queued withdrawal\n * (`pendingShares` awaiting keeper fulfillment → `claimableShares`/\n * `claimableAssets` once fulfilled). Returns `null` when no account exists,\n * i.e. the user has no active withdrawal (the common case — withdrawals only\n * queue when the vault is temporarily illiquid).\n */\nexport async function fetchGammaWithdrawReceipt(\n  connection: Connection,\n  user: PublicKey,\n  lpVault: PublicKey\n): Promise<GammaWithdrawReceiptRaw | null> {\n  const [receipt] = deriveGammaWithdrawReceipt(user, lpVault);\n  const info = await connection.getAccountInfo(receipt);\n  if (!info) return null;\n  return decodeGammaWithdrawReceiptData(info.data, receipt);\n}\n\n/**\n * Resolve the SPL token program the vault's mints live under by reading the\n * asset mint's owner. The Gamma program uses a single `token_program` account\n * for both the asset and share mints, so one lookup is sufficient.\n */\nexport async function resolveVaultTokenProgram(\n  connection: Connection,\n  assetsMint: PublicKey\n): Promise<PublicKey> {\n  const info = await connection.getAccountInfo(assetsMint);\n  if (info && info.owner.equals(TOKEN_2022_PROGRAM_ID)) {\n    return TOKEN_2022_PROGRAM_ID;\n  }\n  return TOKEN_PROGRAM_ID;\n}\n","import { TransactionInstruction, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport type { MakeVaultDepositIxParams, MakeVaultDepositTxParams } from \"../types\";\nimport { fetchGammaLpVault, resolveVaultTokenProgram } from \"../utils\";\n\nimport { WSOL_MINT } from \"~/constants\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  makeWrapSolIxs,\n  TransactionType,\n} from \"~/services/transaction\";\nimport {\n  deriveGammaAta,\n  deriveGammaDepositPolicy,\n  deriveGammaDepositReceipt,\n  deriveGammaWithdrawalPolicy,\n  makeGammaDepositIx,\n} from \"~/vendor/gamma\";\nimport { createAssociatedTokenAccountIdempotentInstruction } from \"~/vendor/spl\";\n\n/**\n * Build the instruction to deposit into a Gamma LP vault. Instant deposit —\n * the user receives vault shares in the same transaction. The program creates\n * the user's share ATA and deposit receipt if they do not yet exist.\n *\n * `amount` is interpreted as raw base units of the vault's asset mint.\n */\nexport async function makeVaultDepositIx(\n  params: MakeVaultDepositIxParams\n): Promise<InstructionsWrapper> {\n  const { amount, user, lpVault, connection } = params;\n\n  const vault = await fetchGammaLpVault(connection, lpVault);\n  const tokenProgram =\n    params.tokenProgram ?? (await resolveVaultTokenProgram(connection, vault.assetsMint));\n\n  const [withdrawalPolicy] = deriveGammaWithdrawalPolicy(lpVault);\n  const [depositPolicy] = deriveGammaDepositPolicy(lpVault);\n  const [depositReceipt] = deriveGammaDepositReceipt(user, lpVault);\n  const userAssetAta = deriveGammaAta(vault.assetsMint, user, tokenProgram);\n  const userShareAta = deriveGammaAta(vault.sharesMint, user, tokenProgram);\n\n  const amountNative = new BN(new BigNumber(amount).toFixed(0));\n\n  // Native-SOL vault: the deposit spends WSOL from the user's asset ATA, but the\n  // user holds native SOL (no WSOL ATA → \"AccountOwnedByWrongProgram\"). Wrap the\n  // deposit amount into the WSOL ATA first (idempotent create + fund + sync).\n  // `makeWrapSolIxs` takes a UI amount; the asset is WSOL (9 decimals).\n  const wrapIxs: TransactionInstruction[] = vault.assetsMint.equals(WSOL_MINT)\n    ? makeWrapSolIxs(user, new BigNumber(amountNative.toString()).shiftedBy(-9))\n    : [];\n\n  // The Gamma deposit ix does NOT create the user's share ATA — a first-time\n  // depositor has none, so the (System-owned) account fails the deposit's token\n  // constraint with \"AccountOwnedByWrongProgram\". Idempotently create it first.\n  const createShareAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n    user,\n    userShareAta,\n    user,\n    vault.sharesMint,\n    tokenProgram\n  );\n\n  const ix = makeGammaDepositIx(\n    {\n      user,\n      lpVault,\n      withdrawalPolicy,\n      depositPolicy,\n      assetsAccount: vault.assetsAccount,\n      userAssetAta,\n      userShareAta,\n      depositReceipt,\n      assetsMint: vault.assetsMint,\n      sharesMint: vault.sharesMint,\n      tokenProgram,\n    },\n    amountNative\n  );\n\n  const instructions: TransactionInstruction[] = [...wrapIxs, createShareAtaIx, ix];\n\n  return { instructions, keys: [] };\n}\n\n/** Build a versioned transaction to deposit into a Gamma LP vault. */\nexport async function makeVaultDepositTx(\n  params: MakeVaultDepositTxParams\n): Promise<ExtendedV0Transaction> {\n  const { connection, user, luts, blockhash: providedBlockhash } = params;\n\n  const { instructions, keys } = await makeVaultDepositIx(params);\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: user,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    signers: keys,\n    addressLookupTables: luts,\n    type: TransactionType.VAULT_DEPOSIT,\n  });\n}\n","import {\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport type { MakeVaultDepositWithSwapTxParams } from \"../types\";\nimport { fetchGammaLpVault } from \"../utils\";\n\nimport { MAX_ACCOUNT_LOCKS, MAX_TX_SIZE, WSOL_MINT } from \"~/constants\";\nimport {\n  runSwapEngine,\n  swapEngineProvidersFromOpts,\n  swapEngineQuoteFieldsFromOpts,\n  type SwapQuoteResult,\n} from \"~/services/account\";\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  getTotalAccountKeys,\n  getTxSize,\n  makeWrapSolIxs,\n  TransactionType,\n} from \"~/services/transaction\";\nimport { nativeToUi, uiToNative } from \"~/utils\";\nimport {\n  deriveGammaAta,\n  deriveGammaDepositPolicy,\n  deriveGammaDepositReceipt,\n  deriveGammaWithdrawalPolicy,\n  makeGammaDepositIx,\n} from \"~/vendor/gamma\";\nimport {\n  createAssociatedTokenAccountIdempotentInstruction,\n  TOKEN_2022_PROGRAM_ID,\n  TOKEN_PROGRAM_ID,\n} from \"~/vendor/spl\";\n\n/**\n * Zap-deposit into a Gamma LP vault: swap `inputMint` into the vault's asset\n * mint and deposit the swapped output — all in one transaction. Mirrors\n * `makeSwapCollateralTx`'s swap-engine composition, minus the flashloan/withdraw\n * parts (the input is wallet-funded, not borrowed).\n *\n * The deposit is sized from the swap's **minimum guaranteed output**\n * (`otherAmountThreshold`), so it can never exceed what the swap actually\n * yields; the small surplus stays in the wallet as dust.\n *\n * `inputAmount` is a UI amount of `inputMint`.\n */\nexport async function makeVaultDepositWithSwapTx(\n  params: MakeVaultDepositWithSwapTxParams\n): Promise<{\n  transaction: ExtendedV0Transaction;\n  quoteResponse: SwapQuoteResult;\n  /** Minimum vault-asset amount received (UI units) — what gets deposited. */\n  destinationAmount: number;\n}> {\n  const {\n    user,\n    lpVault,\n    connection,\n    inputMint,\n    inputAmount,\n    inputDecimals,\n    swapOpts,\n    swapEngineRunner,\n    luts,\n    blockhash: providedBlockhash,\n  } = params;\n\n  const vault = await fetchGammaLpVault(connection, lpVault);\n\n  // One account read resolves both the token program and the asset decimals\n  // (decimals is byte 44 of the SPL/Token-2022 Mint layout).\n  const mintInfo = await connection.getAccountInfo(vault.assetsMint);\n  if (!mintInfo) {\n    throw new Error(`Vault asset mint not found: ${vault.assetsMint.toBase58()}`);\n  }\n  const tokenProgram =\n    params.tokenProgram ??\n    (mintInfo.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID);\n  const assetDecimals = mintInfo.data[44];\n\n  const [withdrawalPolicy] = deriveGammaWithdrawalPolicy(lpVault);\n  const [depositPolicy] = deriveGammaDepositPolicy(lpVault);\n  const [depositReceipt] = deriveGammaDepositReceipt(user, lpVault);\n  const userAssetAta = deriveGammaAta(vault.assetsMint, user, tokenProgram);\n  const userShareAta = deriveGammaAta(vault.sharesMint, user, tokenProgram);\n\n  // The Gamma deposit ix doesn't create the user's share ATA — create it\n  // (idempotent) so a first-time depositor's deposit doesn't fail with\n  // \"AccountOwnedByWrongProgram\" on the (System-owned) missing account.\n  const createShareAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n    user,\n    userShareAta,\n    user,\n    vault.sharesMint,\n    tokenProgram\n  );\n\n  const depositAccounts = {\n    user,\n    lpVault,\n    withdrawalPolicy,\n    depositPolicy,\n    assetsAccount: vault.assetsAccount,\n    userAssetAta,\n    userShareAta,\n    depositReceipt,\n    assetsMint: vault.assetsMint,\n    sharesMint: vault.sharesMint,\n    tokenProgram,\n  };\n\n  // Native SOL must be wrapped to wSOL before the swap can spend it (the engine\n  // builds swaps with wrapAndUnwrapSol: false). The wrap ixs are part of the\n  // non-swap footprint the engine fits its route around.\n  const inputAmountBn = new BigNumber(inputAmount);\n  const isNativeSol = new PublicKey(inputMint).equals(WSOL_MINT);\n  const wrapIxs: TransactionInstruction[] = isNativeSol ? makeWrapSolIxs(user, inputAmountBn) : [];\n\n  const amountNative = uiToNative(inputAmountBn, inputDecimals);\n\n  // Placeholder deposit ix (amount-independent byte size) so the engine can\n  // measure the combined tx footprint before the swap output is known.\n  const placeholderDepositIx = makeGammaDepositIx(depositAccounts, new BN(0));\n\n  const runEngine = swapEngineRunner ?? runSwapEngine;\n  const engineResult = await runEngine({\n    inputMint,\n    outputMint: vault.assetsMint.toBase58(),\n    amountNative: amountNative.toNumber(),\n    inputDecimals,\n    outputDecimals: assetDecimals,\n    ...swapEngineQuoteFieldsFromOpts(swapOpts),\n    taker: user,\n    destinationTokenAccount: userAssetAta,\n    connection,\n    footprint: {\n      instructions: [...wrapIxs, createShareAtaIx, placeholderDepositIx],\n      luts: luts ?? [],\n      payer: user,\n      // Non-flashloan single tx: the swap may use the full tx budget.\n      sizeConstraint: MAX_TX_SIZE,\n      maxSwapTotalAccounts: MAX_ACCOUNT_LOCKS,\n    },\n    providers: swapEngineProvidersFromOpts(swapOpts),\n  });\n\n  // Deposit the minimum guaranteed swap output; the surplus is left as dust.\n  const depositIx = makeGammaDepositIx(depositAccounts, engineResult.outputAmountNative);\n\n  const instructions = [\n    ...wrapIxs,\n    createShareAtaIx,\n    ...engineResult.setupInstructions,\n    ...engineResult.swapInstructions,\n    depositIx,\n  ];\n  const allLuts = [...(luts ?? []), ...engineResult.swapLuts];\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: user,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(allLuts);\n\n  const tx = new VersionedTransaction(message);\n\n  if (getTxSize(tx) > MAX_TX_SIZE || getTotalAccountKeys(tx) > MAX_ACCOUNT_LOCKS) {\n    throw new Error(\"vault deposit-with-swap: swap route too large to fit in one transaction\");\n  }\n\n  return {\n    transaction: addTransactionMetadata(tx, {\n      signers: [],\n      addressLookupTables: allLuts,\n      type: TransactionType.VAULT_DEPOSIT,\n    }),\n    quoteResponse: engineResult.quoteResponse,\n    destinationAmount: nativeToUi(engineResult.outputAmountNative, assetDecimals),\n  };\n}\n","import {\n  PublicKey,\n  TransactionInstruction,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport type {\n  MakeVaultCompleteWithdrawalIxParams,\n  MakeVaultCompleteWithdrawalTxParams,\n  MakeVaultWithdrawIxParams,\n  MakeVaultWithdrawTxParams,\n} from \"../types\";\nimport { fetchGammaLpVault, resolveVaultTokenProgram } from \"../utils\";\n\nimport {\n  addTransactionMetadata,\n  ExtendedV0Transaction,\n  InstructionsWrapper,\n  TransactionType,\n} from \"~/services/transaction\";\nimport {\n  deriveGammaAta,\n  deriveGammaDepositPolicy,\n  deriveGammaWithdrawEscrow,\n  deriveGammaWithdrawReceipt,\n  deriveGammaWithdrawalPolicy,\n  makeGammaCompleteWithdrawalIx,\n  makeGammaWithdrawIx,\n} from \"~/vendor/gamma\";\n\n/**\n * Build the instruction to initiate a withdrawal from a Gamma LP vault. Shares\n * are escrowed and a WithdrawReceipt is created/updated; the assets become\n * claimable via {@link makeVaultCompleteWithdrawalIx} once a keeper fulfills\n * the withdrawal.\n *\n * `sharesAmount` is interpreted as raw base units of the vault's share mint.\n */\nexport async function makeVaultWithdrawIx(\n  params: MakeVaultWithdrawIxParams\n): Promise<InstructionsWrapper> {\n  const { sharesAmount, user, lpVault, connection } = params;\n\n  const vault = await fetchGammaLpVault(connection, lpVault);\n  const tokenProgram =\n    params.tokenProgram ?? (await resolveVaultTokenProgram(connection, vault.assetsMint));\n\n  const [withdrawalPolicy] = deriveGammaWithdrawalPolicy(lpVault);\n  const [depositPolicy] = deriveGammaDepositPolicy(lpVault);\n  const [withdrawEscrow] = deriveGammaWithdrawEscrow(user, lpVault);\n  const [withdrawReceipt] = deriveGammaWithdrawReceipt(user, lpVault);\n\n  const userShareAta = deriveGammaAta(vault.sharesMint, user, tokenProgram);\n\n  // `fee_recipient` is itself the token account that receives fee shares — the\n  // program mints into it (`shares_mint` is writable \"for fee mint CPI\"), so it\n  // lives on the *share* mint and must be passed through as-is. Deriving an ATA\n  // from it yields an uninitialized address and the withdraw fails Anchor\n  // account validation with AccountNotInitialized (3012).\n  //\n  // When the vault has no fee config, `fee_recipient` is the default pubkey and\n  // the account is unused; the program still deserializes whatever is passed in\n  // this (non-optional in our encoding) slot, so keep sending the historical\n  // derived placeholder — those ATAs exist on-chain for the live vaults.\n  const feeRecipientAccount = vault.feeRecipient.equals(PublicKey.default)\n    ? deriveGammaAta(vault.assetsMint, vault.feeRecipient, tokenProgram)\n    : vault.feeRecipient;\n\n  const escrowAssetsAccount = deriveGammaAta(vault.assetsMint, withdrawEscrow, tokenProgram);\n  const escrowSharesAccount = deriveGammaAta(vault.sharesMint, withdrawEscrow, tokenProgram);\n\n  const sharesNative = new BN(new BigNumber(sharesAmount).toFixed(0));\n\n  const ix = makeGammaWithdrawIx(\n    {\n      user,\n      lpVault,\n      withdrawalPolicy,\n      depositPolicy,\n      assetsAccount: vault.assetsAccount,\n      userShareAta,\n      assetsMint: vault.assetsMint,\n      sharesMint: vault.sharesMint,\n      feeRecipientAccount,\n      withdrawEscrow,\n      escrowAssetsAccount,\n      escrowSharesAccount,\n      withdrawReceipt,\n      tokenProgram,\n    },\n    sharesNative\n  );\n\n  const instructions: TransactionInstruction[] = [ix];\n\n  return { instructions, keys: [] };\n}\n\n/** Build a versioned transaction to initiate a withdrawal from a Gamma LP vault. */\nexport async function makeVaultWithdrawTx(\n  params: MakeVaultWithdrawTxParams\n): Promise<ExtendedV0Transaction> {\n  const { connection, user, luts, blockhash: providedBlockhash } = params;\n\n  const { instructions, keys } = await makeVaultWithdrawIx(params);\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: user,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    signers: keys,\n    addressLookupTables: luts,\n    type: TransactionType.VAULT_WITHDRAW,\n  });\n}\n\n/**\n * Build the instruction to claim assets from a fulfilled Gamma withdrawal.\n * Transfers the claimable assets from the escrow to the user's asset ATA\n * (created by the program if needed).\n */\nexport async function makeVaultCompleteWithdrawalIx(\n  params: MakeVaultCompleteWithdrawalIxParams\n): Promise<InstructionsWrapper> {\n  const { user, lpVault, connection } = params;\n\n  const vault = await fetchGammaLpVault(connection, lpVault);\n  const tokenProgram =\n    params.tokenProgram ?? (await resolveVaultTokenProgram(connection, vault.assetsMint));\n\n  const [withdrawEscrow] = deriveGammaWithdrawEscrow(user, lpVault);\n  const [withdrawReceipt] = deriveGammaWithdrawReceipt(user, lpVault);\n\n  const userAssetAta = deriveGammaAta(vault.assetsMint, user, tokenProgram);\n  const escrowAssetsAccount = deriveGammaAta(vault.assetsMint, withdrawEscrow, tokenProgram);\n  const escrowSharesAccount = deriveGammaAta(vault.sharesMint, withdrawEscrow, tokenProgram);\n\n  const ix = makeGammaCompleteWithdrawalIx({\n    user,\n    lpVault,\n    assetsMint: vault.assetsMint,\n    sharesMint: vault.sharesMint,\n    userAssetAta,\n    withdrawEscrow,\n    escrowAssetsAccount,\n    escrowSharesAccount,\n    withdrawReceipt,\n    tokenProgram,\n  });\n\n  return { instructions: [ix], keys: [] };\n}\n\n/** Build a versioned transaction to claim a fulfilled Gamma withdrawal. */\nexport async function makeVaultCompleteWithdrawalTx(\n  params: MakeVaultCompleteWithdrawalTxParams\n): Promise<ExtendedV0Transaction> {\n  const { connection, user, luts, blockhash: providedBlockhash } = params;\n\n  const { instructions, keys } = await makeVaultCompleteWithdrawalIx(params);\n\n  const blockhash =\n    providedBlockhash ?? (await connection.getLatestBlockhash(\"confirmed\")).blockhash;\n\n  const message = new TransactionMessage({\n    payerKey: user,\n    recentBlockhash: blockhash,\n    instructions,\n  }).compileToV0Message(luts);\n\n  const tx = new VersionedTransaction(message);\n\n  return addTransactionMetadata(tx, {\n    signers: keys,\n    addressLookupTables: luts,\n    type: TransactionType.VAULT_COMPLETE_WITHDRAWAL,\n  });\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { DriftStateJsonByBank } from \"./drift.types\";\n\nimport { Bank } from \"~/models/bank\";\nimport { AssetTag } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\nimport {\n  DriftSpotMarket,\n  DriftUser,\n  DriftRewards,\n  decodeDriftSpotMarketData,\n  decodeDriftUserData,\n  getAllRequiredMarkets,\n  getDriftRewards,\n  driftSpotMarketRawToDto,\n  driftUserRawToDto,\n  driftRewardsRawToDto,\n  dtoToDriftSpotMarketRaw,\n  dtoToDriftUserRaw,\n  dtoToDriftRewardsRaw,\n} from \"~/vendor/drift\";\n\nexport interface DriftMetadata {\n  driftStates: {\n    spotMarketState: DriftSpotMarket;\n    userState: DriftUser;\n    userRewards: DriftRewards[];\n  };\n}\n\nexport interface FetchDriftMetadataOptions {\n  connection: Connection;\n  banks: Bank[];\n}\n\nexport interface DriftBankInput {\n  bankAddress: string;\n  spotMarket: string;\n  user: string;\n  userStats: string;\n}\n\n/**\n * Fetch Drift spot market, user, and rewards states for banks with Drift integration\n *\n * This function:\n * 1. Filters banks that have Drift integration accounts\n * 2. Batch fetches all spot market, user, and userStats data in one RPC call\n * 3. Decodes spot market and user states\n * 4. Fetches all required markets for reward calculation\n * 5. Calculates rewards for all banks\n * 6. Returns a complete map keyed by bank address\n *\n * @param options - Connection and banks to fetch metadata for\n * @returns Map of bank addresses to their complete Drift metadata (spot market, user, rewards)\n */\nexport async function getDriftMetadata(\n  options: FetchDriftMetadataOptions\n): Promise<Map<string, DriftMetadata>> {\n  const driftBanks = options.banks.filter((b) => b.config.assetTag === AssetTag.DRIFT);\n  const DEFAULT_PUBKEY = PublicKey.default;\n\n  const driftBankInputs: DriftBankInput[] = driftBanks\n    .map((bank) => {\n      const accounts = bank.driftIntegrationAccounts;\n      if (!accounts) {\n        console.warn(\"Drift data not found for bank: \", bank.address.toBase58());\n        return null;\n      }\n      const spotMarketKey = accounts.driftSpotMarket;\n      const userKey = accounts.driftUser;\n      const userStatsKey = accounts.driftUserStats;\n      if (\n        spotMarketKey.equals(DEFAULT_PUBKEY) ||\n        userKey.equals(DEFAULT_PUBKEY) ||\n        userStatsKey.equals(DEFAULT_PUBKEY)\n      ) {\n        return null;\n      }\n      return {\n        bankAddress: bank.address.toBase58(),\n        spotMarket: spotMarketKey.toBase58(),\n        user: userKey.toBase58(),\n        userStats: userStatsKey.toBase58(),\n      };\n    })\n    .filter((b): b is DriftBankInput => b !== null);\n\n  const driftStates = await getDriftStatesDto(options.connection, driftBankInputs);\n\n  const driftMetadataMap = new Map<string, DriftMetadata>();\n  for (const [bankAddress, state] of Object.entries(driftStates)) {\n    driftMetadataMap.set(bankAddress, {\n      driftStates: {\n        spotMarketState: dtoToDriftSpotMarketRaw(state.driftSpotMarketState),\n        userState: dtoToDriftUserRaw(state.driftUserState),\n        userRewards: state.driftUserRewards.map((r) => dtoToDriftRewardsRaw(r)),\n      },\n    });\n  }\n\n  return driftMetadataMap;\n}\n\nexport async function getDriftStatesDto(\n  connection: Connection,\n  driftBanks: DriftBankInput[]\n): Promise<DriftStateJsonByBank> {\n  const DEFAULT_PUBKEY = PublicKey.default;\n  const DEFAULT_PUBKEY_BASE = DEFAULT_PUBKEY.toBase58();\n\n  const rawDriftStatesMap: Record<\n    string,\n    {\n      driftSpotMarketState: DriftSpotMarket;\n      driftUserState: DriftUser;\n    }\n  > = {};\n\n  // Filter banks with valid (non-default) keys\n  const validBanks = driftBanks.filter(\n    (bank) =>\n      bank.spotMarket !== DEFAULT_PUBKEY_BASE &&\n      bank.user !== DEFAULT_PUBKEY_BASE &&\n      bank.userStats !== DEFAULT_PUBKEY_BASE\n  );\n\n  // Early return if no valid banks\n  if (validBanks.length === 0) {\n    return {};\n  }\n\n  // Flatten all keys for batch fetching (triplets: spotMarket, user, userStats)\n  const allKeys: string[] = validBanks.flatMap((bank) => [\n    bank.spotMarket,\n    bank.user,\n    bank.userStats,\n  ]);\n\n  const allResults = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(connection, allKeys);\n\n  const allBankMarkets: DriftSpotMarket[] = [];\n  const allDriftUsers: DriftUser[] = [];\n\n  // Process results - they come in triplets (spotMarket, user, userStats)\n  for (const [index, bank] of validBanks.entries()) {\n    const driftSpotMarketAccount = allResults[index * 3];\n    const driftUserAccount = allResults[index * 3 + 1];\n    const driftUserStatsAccount = allResults[index * 3 + 2];\n\n    if (!driftSpotMarketAccount || !driftUserAccount || !driftUserStatsAccount) {\n      continue;\n    }\n\n    const driftSpotMarketState = decodeDriftSpotMarketData(driftSpotMarketAccount.data);\n    const driftUserState = decodeDriftUserData(driftUserAccount.data);\n\n    allBankMarkets.push(driftSpotMarketState);\n    allDriftUsers.push(driftUserState);\n\n    rawDriftStatesMap[bank.bankAddress] = {\n      driftSpotMarketState,\n      driftUserState,\n    };\n  }\n\n  // Get all required markets for reward calculation\n  const allMarkets = await getAllRequiredMarkets(allBankMarkets, allDriftUsers, connection);\n\n  // Prepare user states for reward calculation\n  const userStates = Object.entries(rawDriftStatesMap).map(([bankKey, driftStates]) => ({\n    bankAddress: new PublicKey(bankKey),\n    marketMint: driftStates.driftSpotMarketState.mint,\n    driftUser: driftStates.driftUserState,\n  }));\n\n  // Calculate rewards for all banks\n  const driftRewardsByBank = await getDriftRewards(allMarkets, userStates, connection);\n\n  // Convert raw states to DTO format and attach rewards\n  const driftStatesMap: DriftStateJsonByBank = Object.entries(rawDriftStatesMap).reduce(\n    (acc, [bankKey, driftStates]) => {\n      const rewards = driftRewardsByBank.get(bankKey) || [];\n\n      acc[bankKey] = {\n        driftSpotMarketState: driftSpotMarketRawToDto(driftStates.driftSpotMarketState),\n        driftUserState: driftUserRawToDto(driftStates.driftUserState),\n        driftUserRewards: rewards.map((r) => driftRewardsRawToDto(r)),\n      };\n\n      return acc;\n    },\n    {} as DriftStateJsonByBank\n  );\n\n  return driftStatesMap;\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { DriftSpotMarket } from \"~/vendor/drift\";\n\nexport function getDriftCTokenMultiplier(spotMarket: DriftSpotMarket): BigNumber {\n  const cumulativeDepositInterest = new BigNumber(spotMarket.cumulativeDepositInterest.toNumber());\n\n  const SPOT_BALANCE_PRECISION = new BigNumber(10).pow(19 - spotMarket.decimals);\n\n  return cumulativeDepositInterest.dividedBy(SPOT_BALANCE_PRECISION);\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport { JupLendStateJsonByBank } from \"./juplend.types\";\n\nimport { Bank } from \"~/models/bank\";\nimport { AssetTag } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\nimport {\n  JupLendingState,\n  JupLendingStateRaw,\n  JupLendingRewardsRateModel,\n  JupRateModel,\n  JupTokenReserve,\n  decodeJupLendingStateData,\n  decodeJupLendingRewardsRateModelData,\n  decodeJupTokenReserveData,\n  decodeJupRateModelData,\n  jupLendingStateRawToDto,\n  jupLendingRewardsRateModelRawToDto,\n  jupTokenReserveRawToDto,\n  jupRateModelRawToDto,\n  dtoToJupLendingStateRaw,\n  dtoToJupLendingRewardsRateModelRaw,\n  dtoToJupTokenReserveRaw,\n  dtoToJupRateModelRaw,\n  deriveJupLendRateModel,\n} from \"~/vendor/jup-lend\";\nimport { MintLayout } from \"~/vendor/spl\";\n\nexport interface JupLendMetadata {\n  jupLendStates: {\n    jupLendingState: JupLendingState;\n    jupTokenReserveState: JupTokenReserve;\n    jupRewardsRateModel: JupLendingRewardsRateModel | null;\n    jupRateModel: JupRateModel | null;\n    fTokenTotalSupply: BN;\n  };\n}\n\nexport interface FetchJupLendMetadataOptions {\n  connection: Connection;\n  banks: Bank[];\n}\n\nexport interface JupLendBankInput {\n  bankAddress: string;\n  lendingState: string;\n}\n\n/**\n * Fetch JupLend Lending state, TokenReserve, and RewardsRateModel for banks with JupLend integration.\n *\n * This function:\n * 1. Filters banks that have JupLend integration accounts\n * 2. Batch fetches all Lending state accounts in one RPC call\n * 3. Decodes Lending states to extract TokenReserve and RewardsRateModel addresses\n * 4. Batch fetches TokenReserve and RewardsRateModel accounts in a second RPC call\n * 5. Returns a complete map keyed by bank address\n *\n * @param options - Connection and banks to fetch metadata for\n * @returns Map of bank addresses to their complete JupLend metadata\n */\nexport async function getJupLendMetadata(\n  options: FetchJupLendMetadataOptions\n): Promise<Map<string, JupLendMetadata>> {\n  const jupLendBanks = options.banks.filter((b) => b.config.assetTag === AssetTag.JUPLEND);\n  const DEFAULT_PUBKEY = PublicKey.default;\n\n  const jupLendBankInputs: JupLendBankInput[] = jupLendBanks\n    .map((bank) => {\n      const accounts = bank.jupLendIntegrationAccounts;\n      if (!accounts) {\n        console.warn(\"JupLend data not found for bank: \", bank.address.toBase58());\n        return null;\n      }\n      if (accounts.jupLendingState.equals(DEFAULT_PUBKEY)) {\n        return null;\n      }\n      return {\n        bankAddress: bank.address.toBase58(),\n        lendingState: accounts.jupLendingState.toBase58(),\n      };\n    })\n    .filter((b): b is JupLendBankInput => b !== null);\n\n  const jupLendStatesDto = await getJupLendStatesDto(options.connection, jupLendBankInputs);\n\n  const jupLendMetadataMap = new Map<string, JupLendMetadata>();\n  for (const [bankAddress, state] of Object.entries(jupLendStatesDto)) {\n    jupLendMetadataMap.set(bankAddress, {\n      jupLendStates: {\n        jupLendingState: dtoToJupLendingStateRaw(state.jupLendingState),\n        jupTokenReserveState: dtoToJupTokenReserveRaw(state.jupTokenReserveState),\n        jupRewardsRateModel: state.jupRewardsRateModel\n          ? dtoToJupLendingRewardsRateModelRaw(state.jupRewardsRateModel)\n          : null,\n        jupRateModel: state.jupRateModel ? dtoToJupRateModelRaw(state.jupRateModel) : null,\n        fTokenTotalSupply: new BN(state.fTokenTotalSupply),\n      },\n    });\n  }\n\n  return jupLendMetadataMap;\n}\n\nexport async function getJupLendStatesDto(\n  connection: Connection,\n  jupLendBanks: JupLendBankInput[]\n): Promise<JupLendStateJsonByBank> {\n  const DEFAULT_PUBKEY_BASE = PublicKey.default.toBase58();\n\n  const validBanks = jupLendBanks.filter((bank) => bank.lendingState !== DEFAULT_PUBKEY_BASE);\n\n  if (validBanks.length === 0) {\n    return {};\n  }\n\n  // ── Pass 1: fetch all Lending state accounts ──────────────────────────────\n  const lendingStateKeys = validBanks.map((b) => b.lendingState);\n  const lendingStateResults = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n    connection,\n    lendingStateKeys\n  );\n\n  const rawLendingStatesMap: Record<string, JupLendingStateRaw> = {};\n\n  for (const [index, bank] of validBanks.entries()) {\n    const account = lendingStateResults[index];\n    if (!account) {\n      console.warn(\"JupLend Lending state account not found for bank:\", bank.bankAddress);\n      continue;\n    }\n    try {\n      const lendingState = decodeJupLendingStateData(\n        account.data,\n        new PublicKey(bank.lendingState)\n      );\n      rawLendingStatesMap[bank.bankAddress] = lendingState;\n    } catch (e) {\n      console.warn(\"Failed to decode JupLend Lending state for bank:\", bank.bankAddress, e);\n    }\n  }\n\n  if (Object.keys(rawLendingStatesMap).length === 0) {\n    return {};\n  }\n\n  // ── Pass 2: fetch TokenReserve + RewardsRateModel + fToken mint + RateModel from addresses on Lending state ──\n  const bankAddresses = Object.keys(rawLendingStatesMap);\n  const secondPassKeys: string[] = [];\n\n  for (const bankAddress of bankAddresses) {\n    const lendingState = rawLendingStatesMap[bankAddress];\n    secondPassKeys.push(lendingState.tokenReservesLiquidity.toBase58());\n    secondPassKeys.push(lendingState.rewardsRateModel.toBase58());\n    secondPassKeys.push(lendingState.fTokenMint.toBase58());\n    const [rateModelPda] = deriveJupLendRateModel(lendingState.mint);\n    secondPassKeys.push(rateModelPda.toBase58());\n  }\n\n  const secondPassResults = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n    connection,\n    secondPassKeys\n  );\n\n  const jupLendStatesMap: JupLendStateJsonByBank = {};\n\n  for (const [i, bankAddress] of bankAddresses.entries()) {\n    const lendingState = rawLendingStatesMap[bankAddress];\n    const tokenReserveAccount = secondPassResults[i * 4];\n    const rewardsRateModelAccount = secondPassResults[i * 4 + 1];\n    const fTokenMintAccount = secondPassResults[i * 4 + 2];\n    const rateModelAccount = secondPassResults[i * 4 + 3];\n\n    if (!tokenReserveAccount) {\n      console.warn(\"JupLend TokenReserve account not found for bank:\", bankAddress);\n      continue;\n    }\n\n    if (!fTokenMintAccount) {\n      console.warn(\"JupLend fToken mint account not found for bank:\", bankAddress);\n      continue;\n    }\n\n    let tokenReserveState: JupTokenReserve;\n    try {\n      tokenReserveState = decodeJupTokenReserveData(\n        tokenReserveAccount.data,\n        lendingState.tokenReservesLiquidity\n      );\n    } catch (e) {\n      console.warn(\"Failed to decode JupLend TokenReserve for bank:\", bankAddress, e);\n      continue;\n    }\n\n    let fTokenTotalSupply: bigint;\n    try {\n      const rawMint = MintLayout.decode(fTokenMintAccount.data);\n      fTokenTotalSupply = rawMint.supply;\n    } catch (e) {\n      console.warn(\"Failed to decode JupLend fToken mint for bank:\", bankAddress, e);\n      continue;\n    }\n\n    let rewardsRateModel: JupLendingRewardsRateModel | null = null;\n    if (rewardsRateModelAccount && !lendingState.rewardsRateModel.equals(PublicKey.default)) {\n      try {\n        rewardsRateModel = decodeJupLendingRewardsRateModelData(\n          rewardsRateModelAccount.data,\n          lendingState.rewardsRateModel\n        );\n      } catch (e) {\n        console.warn(\"Failed to decode JupLend RewardsRateModel for bank:\", bankAddress, e);\n      }\n    }\n\n    let rateModel: JupRateModel | null = null;\n    if (rateModelAccount) {\n      try {\n        const [rateModelPda] = deriveJupLendRateModel(lendingState.mint);\n        rateModel = decodeJupRateModelData(rateModelAccount.data, rateModelPda);\n      } catch (e) {\n        console.warn(\"Failed to decode JupLend RateModel for bank:\", bankAddress, e);\n      }\n    }\n\n    jupLendStatesMap[bankAddress] = {\n      jupLendingState: jupLendingStateRawToDto(lendingState),\n      jupTokenReserveState: jupTokenReserveRawToDto(tokenReserveState),\n      jupRewardsRateModel: rewardsRateModel\n        ? jupLendingRewardsRateModelRawToDto(rewardsRateModel)\n        : null,\n      jupRateModel: rateModel ? jupRateModelRawToDto(rateModel) : null,\n      fTokenTotalSupply: fTokenTotalSupply.toString(),\n    };\n  }\n\n  return jupLendStatesMap;\n}\n","import BigNumber from \"bignumber.js\";\nimport BN from \"bn.js\";\n\nimport { JupLendingState, JupLendingRewardsRateModel, JupTokenReserve } from \"~/vendor/jup-lend\";\nimport {\n  calculateJupLendNewExchangePrice,\n  JUP_EXCHANGE_PRICES_PRECISION,\n} from \"~/vendor/jup-lend/utils/interest-rate.utils\";\n\n/**\n * Compute the fToken → native multiplier for a JupLend market.\n * Analogous to `getDriftCTokenMultiplier`.\n *\n * Formula: newExchangePrice / EXCHANGE_PRICES_PRECISION (1e12)\n *\n * Multiply the result by an fToken share amount to get the equivalent\n * native token amount (in lamports / base units).\n *\n * @param lendingState - The on-chain Lending account\n * @param tokenReserve - The on-chain TokenReserve account\n * @param rewardsModel - The on-chain LendingRewardsRateModel (or null)\n * @param fTokenTotalSupply - Total supply of the fToken mint (raw amount)\n * @param nowSeconds - Current unix timestamp in seconds\n * @returns Multiplier as BigNumber (e.g. 1.05 means 1 fToken = 1.05 native tokens)\n */\nexport function getJupLendFTokenMultiplier(\n  lendingState: JupLendingState,\n  tokenReserve: JupTokenReserve,\n  rewardsModel: JupLendingRewardsRateModel | null,\n  fTokenTotalSupply: BN,\n  nowSeconds: number\n): BigNumber {\n  const currentTimestamp = new BN(nowSeconds);\n\n  const newExchangePrice = calculateJupLendNewExchangePrice(\n    lendingState,\n    tokenReserve,\n    rewardsModel,\n    fTokenTotalSupply,\n    currentTimestamp\n  );\n\n  return new BigNumber(newExchangePrice.toString()).dividedBy(\n    new BigNumber(JUP_EXCHANGE_PRICES_PRECISION.toString())\n  );\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { KaminoStateJsonByBank } from \"./kamino.types\";\n\nimport { Bank } from \"~/models/bank\";\nimport { AssetTag } from \"~/services/bank\";\nimport { chunkedGetRawMultipleAccountInfoOrderedWithNulls } from \"~/services/misc\";\nimport {\n  KaminoObligation,\n  KaminoReserve,\n  KaminoFarmState,\n  decodeKlendReserveData,\n  decodeKlendObligationData,\n  decodeFarmDataRaw,\n  kaminoReserveToDto,\n  kaminoObligationToDto,\n  kaminoFarmStateToDto,\n  dtoToKaminoReserve,\n  dtoToKaminoObligation,\n  dtoToKaminoFarmState,\n} from \"~/vendor/klend\";\n\nexport interface KaminoMetadata {\n  kaminoStates: {\n    reserveState: KaminoReserve;\n    obligationState: KaminoObligation;\n    farmState?: KaminoFarmState;\n  };\n}\n\nexport interface FetchKaminoMetadataOptions {\n  connection: Connection;\n  banks: Bank[];\n}\n\nexport interface KaminoBankInput {\n  bankAddress: string;\n  reserve: string;\n  obligation: string;\n}\n\n/**\n * Fetch Kamino reserve, obligation, and farm states for banks with Kamino integration\n *\n * This function:\n * 1. Filters banks that have Kamino reserves/obligations\n * 2. Batch fetches all reserve and obligation data in one RPC call\n * 3. Decodes reserve and obligation states\n * 4. Identifies farms from reserve.farmCollateral addresses\n * 5. Batch fetches and decodes farm states in a second RPC call\n * 6. Returns a complete map keyed by bank address\n *\n * @param options - Connection and banks to fetch metadata for\n * @returns Map of bank addresses to their complete Kamino metadata (reserve, obligation, farm)\n */\nexport async function getKaminoMetadata(\n  options: FetchKaminoMetadataOptions\n): Promise<Map<string, KaminoMetadata>> {\n  const kaminoBanks = options.banks.filter((b) => b.config.assetTag === AssetTag.KAMINO);\n  const DEFAULT_PUBKEY = PublicKey.default;\n\n  const kaminoBankInputs: KaminoBankInput[] = kaminoBanks\n    .map((bank) => {\n      const accounts = bank.kaminoIntegrationAccounts;\n      if (!accounts) {\n        console.warn(\"Kamino data not found for bank: \", bank.address.toBase58());\n        return null;\n      }\n      const reserveKey = accounts.kaminoReserve;\n      const obligationKey = accounts.kaminoObligation;\n      if (reserveKey.equals(DEFAULT_PUBKEY) || obligationKey.equals(DEFAULT_PUBKEY)) {\n        return null;\n      }\n      return {\n        bankAddress: bank.address.toBase58(),\n        reserve: reserveKey.toBase58(),\n        obligation: obligationKey.toBase58(),\n      };\n    })\n    .filter((b): b is KaminoBankInput => b !== null);\n\n  const kaminoStates = await getKaminoStatesDto(options.connection, kaminoBankInputs);\n\n  const kaminoMetadataMap = new Map<string, KaminoMetadata>();\n  for (const [bankAddress, state] of Object.entries(kaminoStates)) {\n    kaminoMetadataMap.set(bankAddress, {\n      kaminoStates: {\n        reserveState: dtoToKaminoReserve(state.reserveState),\n        obligationState: dtoToKaminoObligation(state.obligationState),\n        farmState: state.farmState ? dtoToKaminoFarmState(state.farmState) : undefined,\n      },\n    });\n  }\n  return kaminoMetadataMap;\n}\n\nexport async function getKaminoStatesDto(\n  connection: Connection,\n  kaminoBanks: KaminoBankInput[]\n): Promise<KaminoStateJsonByBank> {\n  const DEFAULT_PUBKEY = PublicKey.default;\n  const DEFAULT_PUBKEY_BASE = DEFAULT_PUBKEY.toBase58();\n\n  const kaminoStatesMap: KaminoStateJsonByBank = {};\n  const bankByFarmKey: Record<string, string> = {};\n\n  // Filter banks with valid (non-default) reserve and obligation addresses\n  const validBanks = kaminoBanks.filter(\n    (bank) => bank.reserve !== DEFAULT_PUBKEY_BASE && bank.obligation !== DEFAULT_PUBKEY_BASE\n  );\n\n  // Early return if no valid banks\n  if (validBanks.length === 0) {\n    return {};\n  }\n\n  // Flatten all keys for batch fetching\n  const allKeys: string[] = validBanks.flatMap((bank) => [bank.reserve, bank.obligation]);\n\n  const allResults = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(connection, allKeys);\n\n  // Process results - they come in pairs (reserve, obligation)\n  for (const [index, bank] of validBanks.entries()) {\n    const reserveAccount = allResults[index * 2];\n    const obligationAccount = allResults[index * 2 + 1];\n\n    if (!reserveAccount || !obligationAccount) {\n      continue;\n    }\n\n    const reserveState = decodeKlendReserveData(reserveAccount.data);\n    const obligationState = decodeKlendObligationData(obligationAccount.data);\n\n    const hasFarmState = !reserveState.farmCollateral.equals(DEFAULT_PUBKEY);\n\n    if (hasFarmState) {\n      bankByFarmKey[reserveState.farmCollateral.toBase58()] = bank.bankAddress;\n    }\n\n    kaminoStatesMap[bank.bankAddress] = {\n      reserveState: kaminoReserveToDto(reserveState),\n      obligationState: kaminoObligationToDto(obligationState),\n    };\n  }\n\n  const allFarmKeys = Object.keys(bankByFarmKey);\n\n  if (allFarmKeys.length > 0) {\n    const farmStates = await chunkedGetRawMultipleAccountInfoOrderedWithNulls(\n      connection,\n      allFarmKeys\n    );\n\n    for (const [idx, farmKey] of allFarmKeys.entries()) {\n      const farmState = farmStates[idx];\n      if (!farmState) {\n        continue;\n      }\n\n      const bankKey = bankByFarmKey[farmKey];\n      const kaminoState = kaminoStatesMap[bankKey];\n\n      if (!kaminoState) {\n        // This should not happen - reserve was decoded successfully earlier\n        console.error(`Kamino state not found for bank key ${bankKey}, skipping farm state`);\n        continue;\n      }\n\n      const decodedFarmState = decodeFarmDataRaw(farmState.data);\n\n      kaminoStatesMap[bankKey] = {\n        ...kaminoState,\n        farmState: kaminoFarmStateToDto(decodedFarmState),\n      };\n    }\n  }\n\n  return kaminoStatesMap;\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { KaminoReserve, scaledSupplies } from \"~/vendor/klend\";\n\nexport function getKaminoCTokenMultiplier(reserve: KaminoReserve): BigNumber {\n  const [totalLiquidity, totalCollateral] = scaledSupplies(reserve);\n\n  return totalCollateral.isZero()\n    ? new BigNumber(1)\n    : new BigNumber(totalLiquidity.dividedBy(totalCollateral).toString());\n}\n","import { Connection } from \"@solana/web3.js\";\n\nimport { getDriftMetadata, DriftMetadata } from \"./drift\";\nimport { getJupLendMetadata, JupLendMetadata } from \"./juplend\";\nimport { getKaminoMetadata, KaminoMetadata } from \"./kamino\";\n\nimport { Bank } from \"~/models/bank\";\nimport { BankIntegrationMetadataMap } from \"~/types\";\n\nexport type IntegrationType = \"kamino\" | \"drift\" | \"juplend\";\n\nexport interface FetchBankIntegrationMetadataOptions {\n  connection: Connection;\n  banks: Bank[];\n  integrations?: IntegrationType[];\n}\n\n/**\n * Fetch metadata from all enabled integrations and merge into single map\n *\n * This orchestrator:\n * 1. Fetches data from all specified integrations in parallel\n * 2. Merges results into a single BankIntegrationMetadataMap\n * 3. Each bank can have metadata from multiple integrations\n *\n * @param options - Connection, banks, and optional integration filter\n * @returns Combined metadata map keyed by bank address\n *\n * @example\n * ```typescript\n * const metadata = await fetchBankIntegrationMetadata({\n *   connection,\n *   banks: allBanks,\n *   integrations: [\"kamino\"], // Optional, defaults to all\n * });\n *\n * // Access Kamino data for a specific bank\n * const kaminoData = metadata[bankAddress]?.kaminoStates;\n * ```\n */\nexport async function fetchBankIntegrationMetadata(\n  options: FetchBankIntegrationMetadataOptions\n): Promise<BankIntegrationMetadataMap> {\n  const { connection, banks, integrations = [\"kamino\", \"drift\", \"juplend\"] } = options;\n  const bankIntegrationMap: BankIntegrationMetadataMap = {};\n\n  // Fetch from each integration in parallel\n  const fetchPromises: Promise<{\n    type: IntegrationType;\n    data: Map<string, KaminoMetadata | DriftMetadata | JupLendMetadata>;\n  }>[] = [];\n\n  if (integrations.includes(\"kamino\")) {\n    fetchPromises.push(\n      getKaminoMetadata({ connection, banks }).then((kaminoMap: Map<string, KaminoMetadata>) => ({\n        type: \"kamino\" as const,\n        data: kaminoMap,\n      }))\n    );\n  }\n\n  if (integrations.includes(\"drift\")) {\n    fetchPromises.push(\n      getDriftMetadata({ connection, banks }).then((driftMap: Map<string, DriftMetadata>) => ({\n        type: \"drift\" as const,\n        data: driftMap,\n      }))\n    );\n  }\n\n  if (integrations.includes(\"juplend\")) {\n    fetchPromises.push(\n      getJupLendMetadata({ connection, banks }).then(\n        (jupLendMap: Map<string, JupLendMetadata>) => ({\n          type: \"juplend\" as const,\n          data: jupLendMap,\n        })\n      )\n    );\n  }\n\n  const results = await Promise.all(fetchPromises);\n\n  // Merge all results into single map\n  for (const result of results) {\n    for (const [bankAddress, metadata] of result.data.entries()) {\n      if (!bankIntegrationMap[bankAddress]) {\n        bankIntegrationMap[bankAddress] = {};\n      }\n\n      // Merge integration-specific metadata\n      Object.assign(bankIntegrationMap[bankAddress], metadata);\n    }\n  }\n\n  return bankIntegrationMap;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport {\n  BankType,\n  BankRaw,\n  decodeBankRaw,\n  parseBankRaw,\n  OraclePrice,\n  PriceBias,\n  getPrice,\n  getTotalAssetQuantity,\n  getTotalLiabilityQuantity,\n  getAssetQuantity,\n  getLiabilityQuantity,\n  getAssetShares,\n  getLiabilityShares,\n  computeAssetUsdValue,\n  ComputeAssetUsdValueParams,\n  computeLiabilityUsdValue,\n  ComputeLiabilityUsdValueParams,\n  computeUsdValue,\n  ComputeUsdValueParams,\n  getAssetWeight,\n  GetAssetWeightParams,\n  getLiabilityWeight,\n  computeTvl,\n  computeInterestRates,\n  computeBaseInterestRate,\n  computeUtilizationRate,\n  computeRemainingCapacity,\n  BankConfigType,\n  BankRateLimiterType,\n  RiskTier,\n  AssetTag,\n  BankConfigFlag,\n  OracleSetup,\n  InterestRateConfig,\n  OperationalState,\n  BankConfigRaw,\n  parseBankConfigRaw,\n  MarginRequirementType,\n} from \"../services\";\n\nimport { EmodeSettings } from \"./emode-settings\";\n\nimport { MarginfiIdlType } from \"~/idl\";\nimport { MarginfiProgram } from \"~/types\";\n\ninterface BankMetadata {\n  tokenAddress: string;\n  tokenName: string;\n  tokenSymbol: string;\n}\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass Bank implements BankType {\n  constructor(\n    public readonly address: PublicKey,\n    public readonly mint: PublicKey,\n    public readonly mintDecimals: number,\n    public readonly group: PublicKey,\n    public readonly assetShareValue: BigNumber,\n    public readonly liabilityShareValue: BigNumber,\n    public readonly liquidityVault: PublicKey,\n    public readonly liquidityVaultBump: number,\n    public readonly liquidityVaultAuthorityBump: number,\n    public readonly insuranceVault: PublicKey,\n    public readonly insuranceVaultBump: number,\n    public readonly insuranceVaultAuthorityBump: number,\n    public readonly collectedInsuranceFeesOutstanding: BigNumber,\n    public readonly feeVault: PublicKey,\n    public readonly feeVaultBump: number,\n    public readonly feeVaultAuthorityBump: number,\n    public readonly collectedGroupFeesOutstanding: BigNumber,\n    public readonly lastUpdate: number,\n    public config: BankConfig,\n    public readonly totalAssetShares: BigNumber,\n    public readonly totalLiabilityShares: BigNumber,\n    public readonly emissionsActiveBorrowing: boolean,\n    public readonly emissionsActiveLending: boolean,\n    public readonly emissionsRate: number,\n    public readonly emissionsMint: PublicKey,\n    public readonly emissionsRemaining: BigNumber,\n    public readonly collectedProgramFeesOutstanding: BigNumber,\n    public readonly oracleKey: PublicKey,\n    public readonly emode: EmodeSettings,\n    public readonly rateLimiter?: BankRateLimiterType,\n    public readonly kaminoIntegrationAccounts?: {\n      kaminoReserve: PublicKey;\n      kaminoObligation: PublicKey;\n    },\n    public readonly driftIntegrationAccounts?: {\n      driftSpotMarket: PublicKey;\n      driftUser: PublicKey;\n      driftUserStats: PublicKey;\n    },\n    public readonly solendIntegrationAccounts?: {\n      solendReserve: PublicKey;\n      solendObligation: PublicKey;\n    },\n    public readonly jupLendIntegrationAccounts?: {\n      jupLendingState: PublicKey;\n      jupFTokenVault: PublicKey;\n      jupFTokenAta: PublicKey;\n    },\n    public readonly feesDestinationAccount?: PublicKey,\n    public readonly lendingPositionCount?: BigNumber,\n    public readonly borrowingPositionCount?: BigNumber,\n    public readonly tokenSymbol?: string\n  ) {}\n\n  static async fetch(\n    address: PublicKey,\n    program: MarginfiProgram,\n    bankMetadata?: BankMetadata\n  ): Promise<Bank> {\n    const data: BankRaw = await program.account.bank.fetch(address);\n    return Bank.fromAccountParsed(address, data, bankMetadata);\n  }\n\n  static decodeBankRaw(encoded: Buffer, idl: MarginfiIdlType): BankRaw {\n    return decodeBankRaw(encoded, idl);\n  }\n\n  static fromBuffer(bankPk: PublicKey, rawData: Buffer, idl: MarginfiIdlType): Bank {\n    const accountParsed = Bank.decodeBankRaw(rawData, idl);\n    return Bank.fromAccountParsed(bankPk, accountParsed);\n  }\n\n  static fromBankType(bankType: BankType): Bank {\n    const config = new BankConfig(\n      bankType.config.assetWeightInit,\n      bankType.config.assetWeightMaint,\n      bankType.config.liabilityWeightInit,\n      bankType.config.liabilityWeightMaint,\n      bankType.config.depositLimit,\n      bankType.config.borrowLimit,\n      bankType.config.riskTier,\n      bankType.config.totalAssetValueInitLimit,\n      bankType.config.assetTag,\n      bankType.config.oracleSetup,\n      bankType.config.oracleKeys,\n      bankType.config.oracleMaxAge,\n      bankType.config.interestRateConfig,\n      bankType.config.operationalState,\n      bankType.config.oracleMaxConfidence,\n      bankType.config.fixedPrice,\n      bankType.config.configFlags,\n      bankType.config.scopeEntryIndex\n    );\n    return new Bank(\n      bankType.address,\n      bankType.mint,\n      bankType.mintDecimals,\n      bankType.group,\n      bankType.assetShareValue,\n      bankType.liabilityShareValue,\n      bankType.liquidityVault,\n      bankType.liquidityVaultBump,\n      bankType.liquidityVaultAuthorityBump,\n      bankType.insuranceVault,\n      bankType.insuranceVaultBump,\n      bankType.insuranceVaultAuthorityBump,\n      bankType.collectedInsuranceFeesOutstanding,\n      bankType.feeVault,\n      bankType.feeVaultBump,\n      bankType.feeVaultAuthorityBump,\n      bankType.collectedGroupFeesOutstanding,\n      bankType.lastUpdate,\n      config,\n      bankType.totalAssetShares,\n      bankType.totalLiabilityShares,\n      bankType.emissionsActiveBorrowing,\n      bankType.emissionsActiveLending,\n      bankType.emissionsRate,\n      bankType.emissionsMint,\n      bankType.emissionsRemaining,\n      bankType.collectedProgramFeesOutstanding,\n      bankType.oracleKey,\n      bankType.emode,\n      bankType.rateLimiter,\n      bankType.kaminoIntegrationAccounts,\n      bankType.driftIntegrationAccounts,\n      bankType.solendIntegrationAccounts,\n      bankType.jupLendIntegrationAccounts,\n      bankType.feesDestinationAccount,\n      bankType.lendingPositionCount,\n      bankType.borrowingPositionCount,\n      bankType.tokenSymbol\n    );\n  }\n\n  static fromAccountParsed(\n    address: PublicKey,\n    accountParsed: BankRaw,\n    bankMetadata?: BankMetadata\n  ): Bank {\n    const props = parseBankRaw(address, accountParsed, bankMetadata);\n    return new Bank(\n      props.address,\n      props.mint,\n      props.mintDecimals,\n      props.group,\n      props.assetShareValue,\n      props.liabilityShareValue,\n      props.liquidityVault,\n      props.liquidityVaultBump,\n      props.liquidityVaultAuthorityBump,\n      props.insuranceVault,\n      props.insuranceVaultBump,\n      props.insuranceVaultAuthorityBump,\n      props.collectedInsuranceFeesOutstanding,\n      props.feeVault,\n      props.feeVaultBump,\n      props.feeVaultAuthorityBump,\n      props.collectedGroupFeesOutstanding,\n      props.lastUpdate,\n      props.config,\n      props.totalAssetShares,\n      props.totalLiabilityShares,\n      props.emissionsActiveBorrowing,\n      props.emissionsActiveLending,\n      props.emissionsRate,\n      props.emissionsMint,\n      props.emissionsRemaining,\n      props.collectedProgramFeesOutstanding,\n      props.oracleKey,\n      props.emode,\n      props.rateLimiter,\n      props.kaminoIntegrationAccounts,\n      props.driftIntegrationAccounts,\n      props.solendIntegrationAccounts,\n      props.jupLendIntegrationAccounts,\n      props.feesDestinationAccount,\n      props.lendingPositionCount,\n      props.borrowingPositionCount,\n      props.tokenSymbol\n    );\n  }\n\n  static withEmodeWeights(\n    bank: Bank,\n    emodeWeights: { assetWeightMaint: BigNumber; assetWeightInit: BigNumber }\n  ): Bank {\n    const newBank = Object.create(Bank.prototype);\n\n    Object.assign(newBank, bank);\n\n    newBank.config = Object.assign({}, bank.config);\n    newBank.config.assetWeightInit = BigNumber.max(\n      bank.config.assetWeightInit,\n      emodeWeights.assetWeightInit\n    );\n    newBank.config.assetWeightMaint = BigNumber.max(\n      bank.config.assetWeightMaint,\n      emodeWeights.assetWeightMaint\n    );\n\n    return newBank;\n  }\n\n  static getPrice(\n    oraclePrice: OraclePrice,\n    priceBias: PriceBias = PriceBias.None,\n    weightedPrice: boolean = false\n  ): BigNumber {\n    return getPrice(oraclePrice, priceBias, weightedPrice);\n  }\n\n  static computeQuantityFromUsdValue(\n    oraclePrice: OraclePrice,\n    usdValue: BigNumber,\n    priceBias: PriceBias,\n    weightedPrice: boolean\n  ): BigNumber {\n    const price = getPrice(oraclePrice, priceBias, weightedPrice);\n    return usdValue.div(price);\n  }\n\n  getTotalAssetQuantity(): BigNumber {\n    return getTotalAssetQuantity(this);\n  }\n\n  getTotalLiabilityQuantity(): BigNumber {\n    return getTotalLiabilityQuantity(this);\n  }\n\n  getAssetQuantity(assetShares: BigNumber): BigNumber {\n    return getAssetQuantity(this, assetShares);\n  }\n\n  getLiabilityQuantity(liabilityShares: BigNumber): BigNumber {\n    return getLiabilityQuantity(this, liabilityShares);\n  }\n\n  getAssetShares(assetQuantity: BigNumber): BigNumber {\n    return getAssetShares(this, assetQuantity);\n  }\n\n  getLiabilityShares(liabilityQuantity: BigNumber): BigNumber {\n    return getLiabilityShares(this, liabilityQuantity);\n  }\n\n  computeAssetUsdValue(params: Omit<ComputeAssetUsdValueParams, \"bank\">): BigNumber {\n    return computeAssetUsdValue({\n      bank: this,\n      ...params,\n    });\n  }\n\n  computeLiabilityUsdValue(params: Omit<ComputeLiabilityUsdValueParams, \"bank\">): BigNumber {\n    return computeLiabilityUsdValue({\n      bank: this,\n      ...params,\n    });\n  }\n\n  computeUsdValue(params: Omit<ComputeUsdValueParams, \"bank\">): BigNumber {\n    return computeUsdValue({\n      bank: this,\n      ...params,\n    });\n  }\n\n  getAssetWeight(params: Omit<GetAssetWeightParams, \"bank\">): BigNumber {\n    return getAssetWeight({\n      bank: this,\n      ...params,\n    });\n  }\n\n  getLiabilityWeight(marginRequirementType: MarginRequirementType): BigNumber {\n    return getLiabilityWeight(this.config, marginRequirementType);\n  }\n\n  computeTvl(oraclePrice: OraclePrice): BigNumber {\n    return computeTvl(this, oraclePrice);\n  }\n\n  computeInterestRates(): {\n    lendingRate: BigNumber;\n    borrowingRate: BigNumber;\n  } {\n    return computeInterestRates(this);\n  }\n\n  computeBaseInterestRate(): BigNumber {\n    return computeBaseInterestRate(this);\n  }\n\n  computeUtilizationRate(): BigNumber {\n    return computeUtilizationRate(this);\n  }\n\n  computeRemainingCapacity(): {\n    depositCapacity: BigNumber;\n    borrowCapacity: BigNumber;\n  } {\n    return computeRemainingCapacity(this);\n  }\n}\n\nclass BankConfig implements BankConfigType {\n  constructor(\n    public assetWeightInit: BigNumber,\n    public assetWeightMaint: BigNumber,\n    public readonly liabilityWeightInit: BigNumber,\n    public readonly liabilityWeightMaint: BigNumber,\n    public readonly depositLimit: BigNumber,\n    public readonly borrowLimit: BigNumber,\n    public readonly riskTier: RiskTier,\n    public readonly totalAssetValueInitLimit: BigNumber,\n    public readonly assetTag: AssetTag,\n    public readonly oracleSetup: OracleSetup,\n    public readonly oracleKeys: PublicKey[],\n    public readonly oracleMaxAge: number,\n    public readonly interestRateConfig: InterestRateConfig,\n    public readonly operationalState: OperationalState,\n    public readonly oracleMaxConfidence: number,\n    public readonly fixedPrice: BigNumber,\n    public readonly configFlags?: BankConfigFlag,\n    public readonly scopeEntryIndex?: number\n  ) {}\n\n  static fromAccountParsed(bankConfigRaw: BankConfigRaw): BankConfig {\n    const bankConfig = parseBankConfigRaw(bankConfigRaw);\n    return new BankConfig(\n      bankConfig.assetWeightInit,\n      bankConfig.assetWeightMaint,\n      bankConfig.liabilityWeightInit,\n      bankConfig.liabilityWeightMaint,\n      bankConfig.depositLimit,\n      bankConfig.borrowLimit,\n      bankConfig.riskTier,\n      bankConfig.totalAssetValueInitLimit,\n      bankConfig.assetTag,\n      bankConfig.oracleSetup,\n      bankConfig.oracleKeys,\n      bankConfig.oracleMaxAge,\n      bankConfig.interestRateConfig,\n      bankConfig.operationalState,\n      bankConfig.oracleMaxConfidence,\n      bankConfig.fixedPrice,\n      bankConfig.configFlags,\n      bankConfig.scopeEntryIndex\n    );\n  }\n}\n\nexport { Bank, BankConfig };\n","import { BorshCoder } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nimport { MarginfiIdlType } from \"../idl\";\nimport {\n  BankConfigOpt,\n  BankConfigOptRaw,\n  BankRateLimiterType,\n  fetchMultipleBanks,\n  InstructionsWrapper,\n  makeAddPermissionlessStakedBankIx,\n  makePoolAddBankIx,\n  makePoolConfigureBankIx,\n  MarginfiGroupRaw,\n  MarginfiGroupType,\n  parseBankRateLimiterRaw,\n} from \"../services\";\nimport { AccountType, MarginfiProgram } from \"../types\";\n\nimport { Bank } from \"./bank\";\n\n// ----------------------------------------------------------------------------\n// Client types\n// ----------------------------------------------------------------------------\n\nclass MarginfiGroup implements MarginfiGroupType {\n  public address: PublicKey;\n  public admin: PublicKey;\n  /** Group-level net-outflow rate limiter (USD windows); see isGroupRateLimiterEnabled */\n  public rateLimiter?: BankRateLimiterType;\n\n  constructor(admin: PublicKey, address: PublicKey, rateLimiter?: BankRateLimiterType) {\n    this.admin = admin;\n    this.address = address;\n    this.rateLimiter = rateLimiter;\n  }\n\n  static async fetch(address: PublicKey, program: MarginfiProgram): Promise<MarginfiGroup> {\n    const data: MarginfiGroupRaw = await program.account.marginfiGroup.fetch(address);\n    return MarginfiGroup.fromAccountParsed(address, data);\n  }\n\n  /**\n   * Fetch all banks belonging to this group\n   *\n   * @param program - The Marginfi program instance\n   * @param feedIdMap - Optional Pyth feed ID map for oracle configuration\n   * @returns Array of Bank instances for this group\n   */\n  async fetchBanks(program: MarginfiProgram): Promise<Bank[]> {\n    const bankDatas = await fetchMultipleBanks(program, {\n      groupAddress: this.address,\n    });\n\n    return bankDatas.map((bankData) => Bank.fromAccountParsed(bankData.address, bankData.data));\n  }\n\n  // ----------------------------------------------------------------------------\n  // Factories\n  // ----------------------------------------------------------------------------\n\n  static fromAccountParsed(address: PublicKey, accountData: MarginfiGroupRaw): MarginfiGroup {\n    // rateLimiter is camelCased by anchor's Program account client; decoding via the raw\n    // BorshCoder (fromBuffer) yields snake_case fields and leaves it undefined here.\n    const rateLimiter = accountData.rateLimiter\n      ? parseBankRateLimiterRaw(accountData.rateLimiter)\n      : undefined;\n    return new MarginfiGroup(accountData.admin, address, rateLimiter);\n  }\n\n  static fromBuffer(address: PublicKey, rawData: Buffer, idl: MarginfiIdlType) {\n    const data = MarginfiGroup.decode(rawData, idl);\n    return MarginfiGroup.fromAccountParsed(address, data);\n  }\n\n  static decode(encoded: Buffer, idl: MarginfiIdlType): MarginfiGroupRaw {\n    const coder = new BorshCoder(idl);\n    return coder.accounts.decode(AccountType.MarginfiGroup, encoded);\n  }\n\n  static async encode(decoded: MarginfiGroupRaw, idl: MarginfiIdlType): Promise<Buffer> {\n    const coder = new BorshCoder(idl);\n    return await coder.accounts.encode(AccountType.MarginfiGroup, decoded);\n  }\n\n  // ----------------------------------------------------------------------------\n  // Admin actions\n  // ----------------------------------------------------------------------------\n\n  // ------------------------------------------------------------------------\n  // (TODO: move to Bank class)\n  // ------------------------------------------------------------------------\n  public async makePoolConfigureBankIx(\n    program: MarginfiProgram,\n    bank: PublicKey,\n    args: BankConfigOptRaw\n  ): Promise<InstructionsWrapper> {\n    return makePoolConfigureBankIx(program, bank, args);\n  }\n\n  public async makeAddPermissionlessStakedBankIx(\n    program: MarginfiProgram,\n    voteAccountAddress: PublicKey,\n    feePayer: PublicKey,\n    pythOracle: PublicKey // wSOL oracle\n  ): Promise<InstructionsWrapper> {\n    return makeAddPermissionlessStakedBankIx(\n      program,\n      this.address,\n      voteAccountAddress,\n      feePayer,\n      pythOracle\n    );\n  }\n\n  public async makePoolAddBankIx(\n    program: MarginfiProgram,\n    bankPubkey: PublicKey,\n    bankMint: PublicKey,\n    bankConfig: BankConfigOpt,\n    feePayer?: PublicKey\n  ): Promise<InstructionsWrapper> {\n    return makePoolAddBankIx(\n      program,\n      this.address,\n      bankPubkey,\n      feePayer ?? this.admin,\n      bankMint,\n      bankConfig\n    );\n  }\n}\n\nexport { MarginfiGroup };\n","import { Keypair, PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { MarginfiAccount } from \"./account\";\nimport { Balance } from \"./balance\";\nimport { Bank } from \"./bank\";\nimport { Project0Client } from \"./client\";\nimport { HealthCache } from \"./health-cache\";\n\nimport {\n  BridgedTxResult,\n  MakeBorrowIxOpts,\n  MakeBridgedLoopTxParams,\n  MakeBridgedSwapCollateralTxParams,\n  MakeBridgedSwapDebtTxParams,\n  MakeDepositIxOpts,\n  MakeFlashLoanTxParams,\n  MakeLoopTxParams,\n  MakeRepayIxOpts,\n  MakeRepayWithCollatTxParams,\n  MakeRollPtTxParams,\n  MakeSwapCollateralTxParams,\n  MakeSwapDebtTxParams,\n  MakeWithdrawIxOpts,\n  MakeTransferPositionsTxParams,\n  MarginRequirementType,\n  SwapQuoteResult,\n  TransactionBuilderResult,\n  TransferPositionsResult,\n  computeLowestEmodeWeights,\n  createActiveEmodePairFromPairs,\n} from \"~/services/account\";\nimport { BankType, EmodePair, ActionEmodeImpact, fetchBank } from \"~/services/bank\";\nimport { isGroupRateLimiterEnabled } from \"~/services/group\";\nimport { fetchProgramForMints } from \"~/services/misc\";\nimport {\n  InstructionsWrapper,\n  ExtendedV0Transaction,\n  ExtendedTransaction,\n} from \"~/services/transaction\";\nimport { Amount, MintData } from \"~/types\";\nimport { DriftRewards, DriftSpotMarket } from \"~/vendor/drift\";\nimport { KaminoReserve } from \"~/vendor/klend\";\nimport { NATIVE_MINT, TOKEN_PROGRAM_ID } from \"~/vendor/spl\";\n\n/**\n * Wrapper around MarginfiAccount that auto-injects client data for cleaner API.\n *\n * Instead of:\n *   await account.makeDepositIx(program, banks, mintDatas, amount, bankAddress)\n *\n * Use:\n *   await wrappedAccount.makeDepositIx(amount, bankAddress)\n *\n * The wrapper handles all the boilerplate of looking up banks, mint data, etc.\n */\nexport class MarginfiAccountWrapper {\n  constructor(\n    private readonly account: MarginfiAccount,\n    private readonly client: Project0Client\n  ) {}\n\n  // ----------------------------------------------------------------------------\n  // Delegate state access to underlying account\n  // ----------------------------------------------------------------------------\n\n  get address(): PublicKey {\n    return this.account.address;\n  }\n\n  get group(): PublicKey {\n    return this.account.group;\n  }\n\n  get authority(): PublicKey {\n    return this.account.authority;\n  }\n\n  get balances(): Balance[] {\n    return this.account.balances;\n  }\n\n  get activeBalances(): Balance[] {\n    return this.account.activeBalances;\n  }\n\n  get accountFlags(): number[] {\n    return this.account.accountFlags;\n  }\n\n  get emissionsDestinationAccount(): PublicKey {\n    return this.account.emissionsDestinationAccount;\n  }\n\n  get healthCache(): HealthCache {\n    return this.account.healthCache;\n  }\n\n  get isDisabled(): boolean {\n    return this.account.isDisabled;\n  }\n\n  get isFlashLoanEnabled(): boolean {\n    return this.account.isFlashLoanEnabled;\n  }\n\n  get isTransferAccountAuthorityEnabled(): boolean {\n    return this.account.isTransferAccountAuthorityEnabled;\n  }\n\n  getBalance(bankPk: PublicKey): Balance {\n    return this.account.getBalance(bankPk);\n  }\n\n  async getBankFromAddress(bankAddress: PublicKey): Promise<BankType> {\n    const bank = this.client.bankMap.get(bankAddress.toBase58());\n    if (!bank) {\n      const bankData = await fetchBank(this.client.program, bankAddress);\n      const bank = Bank.fromAccountParsed(bankAddress, bankData.data);\n      return bank;\n    } else {\n      return bank;\n    }\n  }\n\n  async getMintDataFromBank(bank: BankType): Promise<MintData> {\n    let mintData = this.client.mintDataByBank.get(bank.address.toBase58());\n\n    if (!mintData) {\n      // For native SOL (wrapped SOL), use TOKEN_PROGRAM_ID directly\n      if (bank.mint.equals(NATIVE_MINT)) {\n        mintData = {\n          mint: bank.mint,\n          tokenProgram: TOKEN_PROGRAM_ID,\n        };\n      } else {\n        // Try to fetch token program for other mints\n        const connection = this.client.program.provider.connection;\n        const fetchedMintData = await fetchProgramForMints(connection, [bank.mint]);\n        const fetched = fetchedMintData[0];\n        if (!fetched) {\n          // Fallback to TOKEN_PROGRAM_ID for standard tokens\n          console.warn(\n            `Could not fetch token program for mint ${bank.mint.toBase58()}, using TOKEN_PROGRAM_ID`\n          );\n          mintData = {\n            mint: bank.mint,\n            tokenProgram: TOKEN_PROGRAM_ID,\n          };\n        } else {\n          mintData = {\n            mint: fetched.mint,\n            tokenProgram: fetched.program,\n          };\n        }\n      }\n    }\n    return mintData;\n  }\n\n  // ----------------------------------------------------------------------------\n  // Wrapped transaction methods - clean API without boilerplate\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Creates a deposit instruction with auto-injected client data.\n   *\n   * Automatically looks up bank and mint data from the client.\n   *\n   * @param bankAddress - Bank address to deposit to\n   * @param amount - Amount to deposit in UI units\n   * @param opts - Optional configuration for wrapping SOL and overrides\n   */\n  async makeDepositIx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    opts: MakeDepositIxOpts = {}\n  ): Promise<InstructionsWrapper> {\n    if (new BigNumber(amount).lte(0)) {\n      throw Error(`Deposit amount must be positive, got ${amount}`);\n    }\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeDepositIx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a repay instruction with auto-injected client data.\n   *\n   * Automatically looks up bank and mint data from the client.\n   *\n   * @param bankAddress - Bank address to repay to\n   * @param amount - Amount to repay in UI units\n   * @param repayAll - If true, repays the entire borrowed position\n   * @param opts - Optional configuration for wrapping SOL and overrides\n   */\n  async makeRepayIx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    repayAll: boolean = false,\n    opts: MakeRepayIxOpts = {}\n  ): Promise<InstructionsWrapper> {\n    if (!repayAll && new BigNumber(amount).lte(0)) {\n      throw Error(`Repay amount must be positive, got ${amount}`);\n    }\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeRepayIx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      repayAll,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a withdraw instruction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, and metadata from the client.\n   *\n   * @param bankAddress - Bank address to withdraw from\n   * @param amount - Amount to withdraw in UI units\n   * @param withdrawAll - If true, withdraws the entire collateral position\n   * @param opts - Optional configuration for unwrapping SOL and overrides\n   */\n  async makeWithdrawIx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    withdrawAll: boolean = false,\n    opts: MakeWithdrawIxOpts = {}\n  ): Promise<InstructionsWrapper> {\n    if (!withdrawAll && new BigNumber(amount).lte(0)) {\n      throw Error(`Withdraw amount must be positive, got ${amount}`);\n    }\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeWithdrawIx({\n      program: this.client.program,\n      bank,\n      bankMap: this.client.bankMap,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      withdrawAll,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a borrow instruction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, and metadata from the client.\n   *\n   * @param bankAddress - Bank address to borrow from\n   * @param amount - Amount to borrow in UI units\n   * @param opts - Optional configuration for unwrapping SOL and overrides\n   */\n  async makeBorrowIx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    opts: MakeBorrowIxOpts = {}\n  ): Promise<InstructionsWrapper> {\n    if (new BigNumber(amount).lte(0)) {\n      throw Error(`Borrow amount must be positive, got ${amount}`);\n    }\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeBorrowIx({\n      program: this.client.program,\n      bank,\n      bankMap: this.client.bankMap,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a begin flash loan instruction.\n   *\n   * @param endIndex - End index for the flash loan\n   * @param authority - Optional authority override\n   */\n  async makeBeginFlashLoanIx(\n    endIndex: number,\n    authority?: PublicKey\n  ): Promise<InstructionsWrapper> {\n    return this.account.makeBeginFlashLoanIx(this.client.program, endIndex, authority);\n  }\n\n  /**\n   * Creates an end flash loan instruction with auto-injected client data.\n   *\n   * @param projectedActiveBanks - Array of active bank public keys after flash loan\n   * @param authority - Optional authority override\n   */\n  async makeEndFlashLoanIx(\n    projectedActiveBanks: PublicKey[],\n    authority?: PublicKey\n  ): Promise<InstructionsWrapper> {\n    return this.account.makeEndFlashLoanIx(\n      this.client.program,\n      this.client.bankMap,\n      projectedActiveBanks,\n      authority\n    );\n  }\n\n  /**\n   * Builds a transaction to transfer this account to a new authority.\n   *\n   * @param newMarginfiAccount - Freshly generated keypair for the destination account\n   * @param newAuthority - New authority public key\n   * @param feePayer - Optional `PublicKey` (adapter-signed) or `Keypair` (separate\n   *   payer); defaults to this account's authority\n   */\n  async makeAccountTransferToNewAccountTx(\n    newMarginfiAccount: Keypair,\n    newAuthority: PublicKey,\n    feePayer?: PublicKey | Keypair\n  ): Promise<ExtendedV0Transaction> {\n    return this.account.makeAccountTransferToNewAccountTx(\n      this.client.program,\n      newMarginfiAccount,\n      newAuthority,\n      feePayer\n    );\n  }\n\n  /**\n   * Creates a close account instruction.\n   */\n  async makeCloseAccountIx(): Promise<InstructionsWrapper> {\n    return this.account.makeCloseAccountIx(this.client.program);\n  }\n\n  /**\n   * Creates a pulse health instruction with auto-injected client data.\n   *\n   * @param mandatoryBanks - Array of mandatory bank public keys\n   * @param excludedBanks - Array of excluded bank public keys\n   */\n  async makePulseHealthIx(mandatoryBanks: PublicKey[], excludedBanks: PublicKey[]) {\n    return this.account.makePulseHealthIx(\n      this.client.program,\n      this.client.bankMap,\n      mandatoryBanks,\n      excludedBanks\n    );\n  }\n\n  /**\n   * Creates a loop transaction (leverage) with auto-injected client data.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n   *\n   * @param params - Loop transaction parameters (user provides: connection, depositOpts, borrowOpts, swapOpts, etc.)\n   */\n  async makeLoopTx(\n    params: Omit<\n      MakeLoopTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n    >\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    const fullParams: MakeLoopTxParams = {\n      ...params,\n      program: this.client.program,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n    };\n    return this.account.makeLoopTx(fullParams);\n  }\n\n  /**\n   * Atomically move a selected set of positions from this account to a destination account with\n   * auto-injected client data.\n   *\n   * Auto-injects: program, connection, marginfiAccount, bankMap, oraclePrices, bankMetadataMap,\n   * assetShareValueMultiplierByBank, addressLookupTables, tokenProgramsByBank, groupRateLimiterEnabled.\n   */\n  async makeTransferPositionsTx(\n    params: Omit<\n      MakeTransferPositionsTxParams,\n      | \"program\"\n      | \"connection\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"assetShareValueMultiplierByBank\"\n      | \"addressLookupTableAccounts\"\n      | \"tokenProgramsByBank\"\n      | \"groupRateLimiterEnabled\"\n    >\n  ): Promise<TransferPositionsResult> {\n    const tokenProgramsByBank = new Map<string, PublicKey>();\n    for (const bankAddress of params.bankAddresses) {\n      const bank = this.client.bankMap.get(bankAddress.toBase58());\n      if (!bank) throw new Error(`Bank ${bankAddress.toBase58()} not found`);\n      const mintData = await this.getMintDataFromBank(bank);\n      tokenProgramsByBank.set(bankAddress.toBase58(), mintData.tokenProgram);\n    }\n\n    const fullParams: MakeTransferPositionsTxParams = {\n      ...params,\n      program: this.client.program,\n      connection: this.client.program.provider.connection,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n      tokenProgramsByBank,\n      groupRateLimiterEnabled: isGroupRateLimiterEnabled(this.client.group.rateLimiter),\n    };\n    return this.account.makeTransferPositionsTx(fullParams);\n  }\n\n  /**\n   * Creates a repay with collateral transaction with auto-injected client data.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n   *\n   * @param params - Repay with collateral parameters (user provides: connection, withdrawOpts, repayOpts, swapOpts, etc.)\n   */\n  async makeRepayWithCollatTx(\n    params: Omit<\n      MakeRepayWithCollatTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n    >\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    swapQuote: SwapQuoteResult | undefined;\n    amountToRepay: number;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    const fullParams: MakeRepayWithCollatTxParams = {\n      ...params,\n      program: this.client.program,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n    };\n    return this.account.makeRepayWithCollatTx(fullParams);\n  }\n\n  /**\n   * Creates a swap collateral transaction with auto-injected client data.\n   *\n   * Swaps one collateral type for another (e.g., JitoSOL -> mSOL) using a flash loan\n   * so account health is not affected during the swap.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n   *\n   * @param params - Swap collateral parameters (user provides: connection, withdrawOpts, depositOpts, swapOpts, etc.)\n   */\n  async makeSwapCollateralTx(\n    params: Omit<\n      MakeSwapCollateralTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n    >\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    const fullParams: MakeSwapCollateralTxParams = {\n      ...params,\n      program: this.client.program,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n    };\n    return this.account.makeSwapCollateralTx(fullParams);\n  }\n\n  /**\n   * Rolls a matured Exponent PT collateral position into its next-maturity PT, with\n   * auto-injected client data (withdraw PT_old → `wrapper_merge` to base → swap-engine buy\n   * PT_new → deposit, flash-loan wrapped). The full deposit ends up as new PT.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n   *\n   * @param params - Roll-PT parameters (user provides: connection, withdrawOpts, depositOpts, rollOpts, etc.)\n   */\n  async makeRollPtTx(\n    params: Omit<\n      MakeRollPtTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n    >\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n  }> {\n    const fullParams: MakeRollPtTxParams = {\n      ...params,\n      program: this.client.program,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n    };\n    return this.account.makeRollPtTx(fullParams);\n  }\n\n  /**\n   * Creates a swap debt transaction with auto-injected client data.\n   *\n   * Swaps one debt type for another (e.g., USDC debt -> SOL debt) using a flash loan\n   * so account health is not affected during the swap.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap, addressLookupTables\n   *\n   * @param params - Swap debt parameters (user provides: connection, repayOpts, borrowOpts, swapOpts, etc.)\n   */\n  async makeSwapDebtTx(\n    params: Omit<\n      MakeSwapDebtTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n    >\n  ): Promise<{\n    transactions: ExtendedV0Transaction[];\n    actionTxIndex: number;\n    quoteResponse: SwapQuoteResult | undefined;\n    /** true → send as ONE atomic Jito bundle (bridged legs / integration refreshes);\n     *  false → sequential sends are safe. */\n    mustBeAtomicBundle: boolean;\n  }> {\n    const fullParams: MakeSwapDebtTxParams = {\n      ...params,\n      program: this.client.program,\n      marginfiAccount: this.account,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n    };\n    return this.account.makeSwapDebtTx(fullParams);\n  }\n\n  /**\n   * Creates a loop (leverage) transaction with a transparent bridged (double-hop) fallback and\n   * auto-injected client data.\n   *\n   * One call: tries the direct {@link makeLoopTx} first; if its borrow→deposit swap can't fit one\n   * transaction or has no route, it loops the deposit asset against a value-equivalent borrow of a\n   * bridge token (USDC/wSOL/USDT by default, override via `bridgeOpts.bridgeCandidateMints`) and\n   * debt-swaps that bridge debt to the requested borrow asset — one atomic Jito bundle.\n   * `result.bridgeMint` is set only when the bridged path was used.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap,\n   * addressLookupTables, assetShareValueMultiplierByBank\n   *\n   * @param params - Loop parameters (user provides: connection, depositOpts, borrowOpts, swapOpts, bridgeOpts?, etc.)\n   */\n  async makeBridgedLoopTx(\n    params: Omit<\n      MakeBridgedLoopTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n      | \"assetShareValueMultiplierByBank\"\n    >\n  ): Promise<BridgedTxResult> {\n    return this.account.makeBridgedLoopTx({\n      ...params,\n      program: this.client.program,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n    });\n  }\n\n  /**\n   * Creates a collateral-swap transaction with a transparent bridged (double-hop) fallback and\n   * auto-injected client data.\n   *\n   * One call: tries the direct {@link makeSwapCollateralTx} first; if the swap `A → C` can't fit\n   * one transaction or has no route, it decomposes into `A → bridge` + `bridge → C` through a\n   * bridge token, composed as one atomic Jito bundle. `result.bridgeMint` is set only when the\n   * bridged path was used.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap,\n   * addressLookupTables, assetShareValueMultiplierByBank\n   *\n   * @param params - Swap collateral parameters (user provides: connection, withdrawOpts, depositOpts, swapOpts, bridgeOpts?, etc.)\n   */\n  async makeBridgedSwapCollateralTx(\n    params: Omit<\n      MakeBridgedSwapCollateralTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n      | \"assetShareValueMultiplierByBank\"\n    >\n  ): Promise<BridgedTxResult> {\n    return this.account.makeBridgedSwapCollateralTx({\n      ...params,\n      program: this.client.program,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n    });\n  }\n\n  /**\n   * Creates a debt-swap transaction with a transparent bridged (double-hop) fallback and\n   * auto-injected client data.\n   *\n   * One call: tries the direct {@link makeSwapDebtTx} first; if the swap `A → C` can't fit one\n   * transaction or has no route, the first leg repays A by borrowing a bridge token and the second\n   * leg repays exactly that bridge debt while borrowing C — one atomic Jito bundle.\n   * `result.bridgeMint` is set only when the bridged path was used.\n   *\n   * Auto-injects: program, marginfiAccount, bankMap, oraclePrices, bankMetadataMap,\n   * addressLookupTables, assetShareValueMultiplierByBank\n   *\n   * @param params - Swap debt parameters (user provides: connection, repayOpts, borrowOpts, swapOpts, bridgeOpts?, etc.)\n   */\n  async makeBridgedSwapDebtTx(\n    params: Omit<\n      MakeBridgedSwapDebtTxParams,\n      | \"program\"\n      | \"marginfiAccount\"\n      | \"bankMap\"\n      | \"oraclePrices\"\n      | \"bankMetadataMap\"\n      | \"addressLookupTableAccounts\"\n      | \"assetShareValueMultiplierByBank\"\n    >\n  ): Promise<BridgedTxResult> {\n    return this.account.makeBridgedSwapDebtTx({\n      ...params,\n      program: this.client.program,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      addressLookupTableAccounts: this.client.addressLookupTables,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n    });\n  }\n\n  /**\n   * Creates a deposit transaction with auto-injected client data.\n   *\n   * Automatically looks up bank and mint data, then builds and wraps instruction in a transaction.\n   *\n   * @param bankAddress - Bank address to deposit to\n   * @param amount - Amount to deposit in UI units\n   * @param opts - Optional configuration for wrapping SOL and overrides\n   * @returns Promise resolving to an ExtendedTransaction\n   */\n  async makeDepositTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    opts: MakeDepositIxOpts = {}\n  ): Promise<ExtendedTransaction> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeDepositTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      luts: this.client.addressLookupTables,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a Kamino deposit transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, and connection.\n   *\n   * @param bankAddress - Bank address to deposit to\n   * @param amount - Amount to deposit in UI units\n   * @param spotMarket - Drift spot market data\n   * @param opts - Optional configuration\n   * @returns Promise resolving to an ExtendedV0Transaction\n   */\n  async makeDriftDepositTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    spotMarket: DriftSpotMarket,\n    opts: MakeDepositIxOpts = {}\n  ): Promise<ExtendedV0Transaction> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeDriftDepositTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      driftMarketIndex: spotMarket.marketIndex,\n      driftOracle: spotMarket.oracle,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a Kamino deposit transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, and connection.\n   *\n   * @param bankAddress - Bank address to deposit to\n   * @param amount - Amount to deposit in UI units\n   * @param reserve - Kamino reserve data\n   * @param opts - Optional configuration\n   * @returns Promise resolving to an ExtendedV0Transaction\n   */\n  async makeKaminoDepositTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    reserve: KaminoReserve,\n    opts: MakeDepositIxOpts = {}\n  ): Promise<ExtendedV0Transaction> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeKaminoDepositTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      reserve,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a borrow transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, metadata, and oracle prices.\n   *\n   * @param bankAddress - Bank address to borrow from\n   * @param amount - Amount to borrow in UI units\n   * @param opts - Optional configuration\n   * @returns Promise resolving to a TransactionBuilderResult\n   */\n  async makeBorrowTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    opts: MakeBorrowIxOpts = {}\n  ): Promise<TransactionBuilderResult> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeBorrowTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      authority: this.account.authority,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a repay transaction with auto-injected client data.\n   *\n   * Automatically looks up bank and mint data.\n   *\n   * @param bankAddress - Bank address to repay to\n   * @param amount - Amount to repay in UI units\n   * @param repayAll - If true, repays the entire borrowed position\n   * @param opts - Optional configuration\n   * @returns Promise resolving to an ExtendedTransaction\n   */\n  async makeRepayTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    repayAll: boolean = false,\n    opts: MakeRepayIxOpts = {}\n  ): Promise<ExtendedTransaction> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeRepayTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      repayAll,\n      luts: this.client.addressLookupTables,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a withdraw transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, metadata, and oracle prices.\n   *\n   * @param bankAddress - Bank address to withdraw from\n   * @param amount - Amount to withdraw in UI units\n   * @param withdrawAll - If true, withdraws the entire collateral position\n   * @param opts - Optional configuration\n   * @returns Promise resolving to a TransactionBuilderResult\n   */\n  async makeWithdrawTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    withdrawAll: boolean = false,\n    opts: MakeWithdrawIxOpts = {}\n  ): Promise<TransactionBuilderResult> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeWithdrawTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      authority: this.account.authority,\n      withdrawAll,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a Drift withdraw transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, metadata, and oracle prices.\n   *\n   * @param bankAddress - Bank address to withdraw from\n   * @param amount - Amount to withdraw in UI units\n   * @param driftSpotMarket - Drift spot market data\n   * @param withdrawAll - If true, withdraws the entire collateral position\n   * @param opts - Optional configuration\n   * @returns Promise resolving to a TransactionBuilderResult\n   */\n  async makeDriftWithdrawTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    driftSpotMarket: DriftSpotMarket,\n    userRewards: DriftRewards[],\n    withdrawAll: boolean = false,\n    opts: MakeWithdrawIxOpts = {}\n  ): Promise<TransactionBuilderResult> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeDriftWithdrawTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      authority: this.account.authority,\n      driftSpotMarket,\n      userRewards,\n      withdrawAll,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a Kamino withdraw transaction with auto-injected client data.\n   *\n   * Automatically looks up bank, mint data, metadata, and oracle prices.\n   *\n   * @param bankAddress - Bank address to withdraw from\n   * @param amount - Amount to withdraw in UI units\n   * @param reserve - Kamino reserve data\n   * @param withdrawAll - If true, withdraws the entire collateral position\n   * @param opts - Optional configuration\n   * @returns Promise resolving to a TransactionBuilderResult\n   */\n  async makeKaminoWithdrawTx(\n    bankAddress: PublicKey,\n    amount: Amount,\n    reserve: any,\n    withdrawAll: boolean = false,\n    opts: MakeWithdrawIxOpts = {}\n  ): Promise<TransactionBuilderResult> {\n    // Try to get bank from client, fallback to fetching it\n    const bank = await this.getBankFromAddress(bankAddress);\n\n    // Try to get mint data from cache, fallback to fetching it\n    const mintData = await this.getMintDataFromBank(bank);\n\n    return this.account.makeKaminoWithdrawTx({\n      program: this.client.program,\n      bank,\n      tokenProgram: mintData.tokenProgram,\n      amount,\n      authority: this.account.authority,\n      reserve,\n      withdrawAll,\n      bankMap: this.client.bankMap,\n      oraclePrices: this.client.oraclePriceByBank,\n      bankMetadataMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      luts: this.client.addressLookupTables,\n      connection: this.client.program.provider.connection,\n      opts,\n    });\n  }\n\n  /**\n   * Creates a flash loan transaction with auto-injected client data.\n   *\n   * Auto-injects: program, marginfiAccount\n   *\n   * @param params - Flash loan transaction parameters (user provides: ixs, endIndex, etc.)\n   * @returns Promise resolving to flash loan transaction details\n   */\n  async makeFlashLoanTx(params: Omit<MakeFlashLoanTxParams, \"program\" | \"marginfiAccount\">) {\n    return this.account.makeFlashLoanTx({\n      ...params,\n      program: this.client.program,\n    });\n  }\n\n  // ----------------------------------------------------------------------------\n  // E-mode state — derived from client.emodePairs + account balances\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Returns the active emode pairs for this account based on current positions.\n   */\n  getActiveEmodePairs(): EmodePair[] {\n    return this.account.computeActiveEmodePairs(this.client.emodePairs);\n  }\n\n  /**\n   * Returns the lowest emode weights per collateral bank for currently active pairs.\n   * Keyed by bank address string → { assetWeightInit, assetWeightMaint }.\n   */\n  getActiveEmodeWeightsByBank(): Map<\n    string,\n    { assetWeightInit: BigNumber; assetWeightMaint: BigNumber }\n  > {\n    const activePairs = this.getActiveEmodePairs();\n    return computeLowestEmodeWeights(activePairs);\n  }\n\n  /**\n   * Computes emode impacts for all banks using the client's emode pairs.\n   */\n  getEmodeImpacts(): Record<string, ActionEmodeImpact> {\n    const bankAddresses = this.client.banks.map((b) => b.address);\n    return this.account.computeEmodeImpacts(this.client.emodePairs, bankAddresses);\n  }\n\n  // ----------------------------------------------------------------------------\n  // Computation methods with auto-injected client data\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Simulates health cache update with auto-injected client data.\n   */\n  async simulateHealthCache() {\n    return this.account.simulateHealthCache({\n      program: this.client.program,\n      banksMap: this.client.bankMap,\n      oraclePricesByBank: this.client.oraclePriceByBank,\n      bankIntegrationMap: this.client.bankIntegrationMap,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank: this.getActiveEmodeWeightsByBank(),\n    });\n  }\n\n  /**\n   * Computes net APY with auto-injected client data.\n   */\n  computeNetApy(): number {\n    return this.account.computeNetApy({\n      banksMap: this.client.bankMap,\n      oraclePricesByBank: this.client.oraclePriceByBank,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      activeEmodeWeightsByBank: this.getActiveEmodeWeightsByBank(),\n    });\n  }\n\n  /**\n   * Computes account value (equity) with auto-injected client data.\n   */\n  computeAccountValue(): BigNumber {\n    return this.account.computeAccountValue();\n  }\n\n  /**\n   * Computes health components with auto-injected client data.\n   *\n   * @param marginRequirement - Margin requirement type\n   */\n  computeHealthComponentsFromCache(marginRequirement: MarginRequirementType): {\n    assets: BigNumber;\n    liabilities: BigNumber;\n  } {\n    return this.account.computeHealthComponentsFromCache(marginRequirement);\n  }\n\n  /**\n   * Computes free collateral with auto-injected client data.\n   *\n   * @param opts - Optional configuration\n   */\n  computeFreeCollateralFromCache(opts?: { clamped?: boolean }): BigNumber {\n    return this.account.computeFreeCollateralFromCache(opts);\n  }\n\n  /**\n   * Computes max borrow for a bank with auto-injected client data.\n   *\n   * @param bankAddress - Bank address to check max borrow for\n   * @param opts - Optional configuration for emode and volatility\n   */\n  computeMaxBorrowForBank(\n    bankAddress: PublicKey,\n    opts?: {\n      volatilityFactor?: number;\n      /** Skip bank-level clamps (remaining borrow cap, available liquidity, rate limiters) */\n      ignoreBankLimits?: boolean;\n    }\n  ): BigNumber {\n    const bankKey = bankAddress.toBase58();\n    const emodeImpacts = this.getEmodeImpacts();\n    const bankImpact = emodeImpacts[bankKey];\n    const borrowImpact = bankImpact?.borrowImpact;\n\n    return this.account.computeMaxBorrowForBank({\n      banksMap: this.client.bankMap,\n      oraclePricesByBank: this.client.oraclePriceByBank,\n      bankAddress,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      emodeImpactStatus: borrowImpact?.status,\n      activePair: borrowImpact?.activePair,\n      volatilityFactor: opts?.volatilityFactor,\n      groupRateLimiter: this.client.group.rateLimiter,\n      ignoreBankLimits: opts?.ignoreBankLimits,\n    });\n  }\n\n  /**\n   * Computes max withdraw for a bank with auto-injected client data.\n   *\n   * @param bankAddress - Bank address to check max withdraw for\n   * @param opts - Optional configuration for volatility and emode\n   */\n  computeMaxWithdrawForBank(\n    bankAddress: PublicKey,\n    opts?: {\n      volatilityFactor?: number;\n      /** Skip bank-level clamps (available liquidity, rate limiters) */\n      ignoreBankLimits?: boolean;\n    }\n  ): BigNumber {\n    const activePairs = this.getActiveEmodePairs();\n    const activePair =\n      activePairs.length > 0 ? createActiveEmodePairFromPairs(activePairs) : undefined;\n\n    return this.account.computeMaxWithdrawForBank({\n      banksMap: this.client.bankMap,\n      oraclePricesByBank: this.client.oraclePriceByBank,\n      bankAddress,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      activePair,\n      volatilityFactor: opts?.volatilityFactor,\n      groupRateLimiter: this.client.group.rateLimiter,\n      venueStates: this.client.bankIntegrationMap[bankAddress.toBase58()],\n      ignoreBankLimits: opts?.ignoreBankLimits,\n    });\n  }\n\n  /**\n   * Computes max deposit for a bank with auto-injected client data.\n   *\n   * Bounded by the bank's remaining deposit cap and, if provided, the wallet balance.\n   *\n   * @param bankAddress - Bank address to check max deposit for\n   * @param opts - Optional wallet balance (UI units) to cap the result\n   */\n  computeMaxDepositForBank(\n    bankAddress: PublicKey,\n    opts?: {\n      walletBalance?: BigNumber | number;\n    }\n  ): BigNumber {\n    return this.account.computeMaxDepositForBank({\n      banksMap: this.client.bankMap,\n      bankAddress,\n      assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,\n      walletBalance: opts?.walletBalance,\n    });\n  }\n\n  /**\n   * Computes active emode pairs for custom emode pair sets.\n   * For typical usage, prefer `getActiveEmodePairs()` which uses client data.\n   *\n   * @param emodePairs - All available emode pairs\n   */\n  computeActiveEmodePairs(emodePairs: EmodePair[]): EmodePair[] {\n    return this.account.computeActiveEmodePairs(emodePairs);\n  }\n\n  /**\n   * Computes emode impacts for custom emode pair sets.\n   * For typical usage, prefer `getEmodeImpacts()` which uses client data.\n   *\n   * @param emodePairs - All available emode pairs\n   * @param banks - Array of bank addresses to analyze\n   */\n  computeEmodeImpacts(\n    emodePairs: EmodePair[],\n    banks: PublicKey[]\n  ): Record<string, ActionEmodeImpact> {\n    return this.account.computeEmodeImpacts(emodePairs, banks);\n  }\n\n  /**\n   * Gets health check accounts with auto-injected client data.\n   *\n   * @param mandatoryBanks - Array of mandatory bank public keys (default: [])\n   * @param excludedBanks - Array of excluded bank public keys (default: [])\n   */\n  getHealthCheckAccounts(\n    mandatoryBanks: PublicKey[] = [],\n    excludedBanks: PublicKey[] = []\n  ): BankType[] {\n    return this.account.getHealthCheckAccounts(this.client.bankMap, mandatoryBanks, excludedBanks);\n  }\n\n  // ----------------------------------------------------------------------------\n  // Helper methods\n  // ----------------------------------------------------------------------------\n\n  /**\n   * Gets the underlying MarginfiAccount instance.\n   * Useful for advanced operations that need direct access.\n   */\n  getUnderlyingAccount(): MarginfiAccount {\n    return this.account;\n  }\n\n  /**\n   * Gets the client instance.\n   */\n  getClient(): Project0Client {\n    return this.client;\n  }\n}\n","import { AnchorProvider, Program } from \"@coral-xyz/anchor\";\nimport { AddressLookupTableAccount, Connection, PublicKey } from \"@solana/web3.js\";\nimport BigNumber from \"bignumber.js\";\n\nimport { AssetTag } from \"../services\";\n\nimport { MarginfiAccount } from \"./account\";\nimport { MarginfiAccountWrapper } from \"./account-wrapper\";\nimport { Balance } from \"./balance\";\nimport { Bank } from \"./bank\";\nimport { MarginfiGroup } from \"./group\";\n\nimport {\n  ADDRESS_LOOKUP_TABLE_FOR_GROUP,\n  ADDRESS_LOOKUP_TABLE_FOR_GROUP_NATIVE_STAKE,\n} from \"~/constants\";\nimport { MARGINFI_IDL, MarginfiIdlType } from \"~/idl\";\nimport {\n  makeCreateMarginfiAccountTx,\n  makeCreateAccountIxWithProjection,\n  fetchMarginfiAccountAddresses,\n  fetchMarginfiAccountAddressesHoldingBank,\n  fetchMarginfiAccountActiveBalancesForBank,\n  MarginfiAccountRaw,\n  getEmodePairs,\n  computeLowestEmodeWeights,\n} from \"~/services/account\";\nimport { EmodePair } from \"~/services/bank\";\nimport {\n  fetchBankIntegrationMetadata,\n  getKaminoCTokenMultiplier,\n  getJupLendFTokenMultiplier,\n} from \"~/services/integration\";\nimport { getDriftCTokenMultiplier } from \"~/services/integration/drift\";\nimport { fetchProgramForMints } from \"~/services/misc\";\nimport { computeStakedBankMultipliers } from \"~/services/native-stake\";\nimport { fetchOracleData, OraclePrice } from \"~/services/price\";\nimport {\n  Project0Config,\n  MintData,\n  MarginfiProgram,\n  BankIntegrationMetadataMap,\n  Wallet,\n} from \"~/types\";\n\n/**\n * An authority's active balance in a specific bank for a queried mint. One row per\n * (account, bank): a single account can appear multiple times if it holds the mint across\n * several banks (e.g. a DEFAULT and a Kamino bank for the same mint). Amounts are in UI units\n * (token decimals + share multiplier applied).\n */\nexport type MintAuthorityBalance = {\n  authority: PublicKey;\n  accountAddress: PublicKey;\n  bank: PublicKey;\n  assets: BigNumber;\n  liabilities: BigNumber;\n};\n\nexport class Project0Client {\n  constructor(\n    public readonly program: MarginfiProgram,\n    public readonly group: MarginfiGroup,\n    public readonly bankMap: Map<string, Bank>,\n    public readonly bankIntegrationMap: BankIntegrationMetadataMap,\n    public readonly assetShareValueMultiplierByBank: Map<string, BigNumber>,\n    public readonly oraclePriceByBank: Map<string, OraclePrice>,\n    public readonly mintDataByBank: Map<string, MintData>,\n    /**\n     * Combined LUT set (general group followed by native-stake group). The functional\n     * action builders partition this and embed the right subset per transaction via\n     * `selectLutsForBanks`, so consumers only ever pass this one array.\n     */\n    public readonly addressLookupTables: AddressLookupTableAccount[],\n    public readonly emodePairs: EmodePair[]\n  ) {}\n\n  /**\n   * Gets all banks as an array.\n   * Useful when you need to iterate over all banks.\n   */\n  get banks(): Bank[] {\n    return Array.from(this.bankMap.values());\n  }\n\n  /**\n   * Gets a bank by its address.\n   */\n  getBank(address: PublicKey): Bank | undefined {\n    return this.bankMap.get(address.toBase58());\n  }\n\n  /**\n   * Gets all banks matching the mint address.\n   *\n   * @param mint - The mint address to search for\n   * @param assetTag - Optional asset tag to filter by (e.g., AssetTag.DEFAULT, AssetTag.KAMINO)\n   * @returns Array of all matching banks (empty array if none found)\n   *\n   * @example\n   * // Get all SOL banks\n   * const allSolBanks = client.getBanksByMint(MINTS.SOL);\n   *\n   * // Get all Kamino SOL banks (may be multiple)\n   * const kaminoBanks = client.getBanksByMint(MINTS.SOL, AssetTag.KAMINO);\n   * console.log(`Found ${kaminoBanks.length} Kamino SOL banks`);\n   *\n   * // Iterate through all matching banks\n   * kaminoBanks.forEach((bank) => {\n   *   console.log(`Bank: ${bank.address.toBase58()}`);\n   * });\n   */\n  getBanksByMint(mint: PublicKey, assetTag?: AssetTag): Bank[] {\n    return this.banks.filter((b) => {\n      const mintMatches = b.mint.equals(mint);\n      if (assetTag !== undefined) {\n        return mintMatches && b.config.assetTag === assetTag;\n      }\n      return mintMatches;\n    });\n  }\n\n  /**\n   * Creates a transaction to initialize a new marginfi account.\n   *\n   * @param authority - The authority public key for the new account\n   * @param accountIndex - The account index (default: 0)\n   * @param thirdPartyId - Optional third party identifier\n   * @returns A transaction ready to be signed and sent\n   */\n  async createMarginfiAccountTx(\n    authority: PublicKey,\n    accountIndex: number = 0,\n    thirdPartyId?: number\n  ) {\n    return makeCreateMarginfiAccountTx(\n      this.program,\n      authority,\n      this.group.address,\n      this.addressLookupTables,\n      accountIndex,\n      thirdPartyId\n    );\n  }\n\n  /**\n   * Creates a marginfi account instruction with a projected account wrapper.\n   *\n   * Returns a wrapped account instance that can be used for building transactions\n   * before the account actually exists on-chain. Useful for composing multiple\n   * operations including account creation in a single flow.\n   *\n   * @param authority - The authority public key for the new account\n   * @param accountIndex - The account index (default: 0)\n   * @param thirdPartyId - Optional third party identifier\n   * @returns Object containing the wrapped account and creation instruction\n   */\n  async createMarginfiAccountWithProjection(\n    authority: PublicKey,\n    accountIndex: number = 0,\n    thirdPartyId?: number\n  ) {\n    const { account, ix } = await makeCreateAccountIxWithProjection({\n      program: this.program,\n      authority,\n      group: this.group.address,\n      accountIndex,\n      thirdPartyId,\n    });\n\n    const marginfiAccount = MarginfiAccount.fromAccountType(account);\n    const wrappedAccount = new MarginfiAccountWrapper(marginfiAccount, this);\n\n    return {\n      wrappedAccount,\n      ix,\n    };\n  }\n\n  /**\n   * Fetches all marginfi account addresses for a given authority (wallet).\n   *\n   * This is useful for account discovery - finding all accounts that belong to a wallet.\n   *\n   * @param authority - The wallet public key to search for\n   * @returns Array of account addresses owned by the authority\n   */\n  async getAccountAddresses(authority: PublicKey): Promise<PublicKey[]> {\n    return fetchMarginfiAccountAddresses(this.program, authority, this.group.address);\n  }\n\n  /**\n   * Fetches the addresses of all marginfi accounts in the group that hold a position in a\n   * specific bank.\n   *\n   * Because a marginfi account holds up to 16 balance slots (sorted descending by bank, so the\n   * target can be at any slot), this scans all 16 slots in parallel via filtered\n   * `getProgramAccounts` calls. It returns only addresses (no account data is transferred),\n   * which keeps it viable across the group's ~500k accounts. Hydrate any address you care about\n   * with `fetchAccount`.\n   *\n   * @param bank - The bank public key to search for in account balances\n   * @param options - Optional settings:\n   *   - `concurrency`: max number of the 16 slot scans to run at once. Omit to fire all 16 in\n   *     parallel; pass a smaller value (e.g. 4) to batch them and avoid RPC rate limits.\n   * @returns Deduplicated array of account addresses holding the bank\n   */\n  async getAccountAddressesHoldingBank(\n    bank: PublicKey,\n    options?: { concurrency?: number }\n  ): Promise<PublicKey[]> {\n    return fetchMarginfiAccountAddressesHoldingBank(\n      this.program,\n      this.group.address,\n      bank,\n      options\n    );\n  }\n\n  /**\n   * Fetches every account's active balance for a given mint, with its authority, account\n   * address, and the deposited/borrowed amounts in UI units.\n   *\n   * A mint can map to multiple banks (e.g. DEFAULT + Kamino), so this resolves all matching\n   * banks via {@link getBanksByMint}, scans each for accounts holding it, and emits one row per\n   * (account, bank). An account that holds the mint in several banks yields several rows.\n   *\n   * Amounts are computed with each bank's share multiplier (`assetShareValueMultiplierByBank`)\n   * and the bank's mint decimals, matching `Balance.computeQuantityUi`.\n   *\n   * @param mint - The mint to search account balances for\n   * @param options - Optional settings:\n   *   - `assetTag`: restrict to banks with this asset tag (e.g. only Kamino banks for the mint)\n   *   - `concurrency`: max number of the 16 slot scans to run at once per bank (see\n   *     {@link getAccountAddressesHoldingBank})\n   * @returns One row per (account, bank) holding the mint\n   */\n  async getAuthorityBalancesForMint(\n    mint: PublicKey,\n    options?: { assetTag?: AssetTag; concurrency?: number }\n  ): Promise<MintAuthorityBalance[]> {\n    const banks = this.getBanksByMint(mint, options?.assetTag);\n\n    const rows: MintAuthorityBalance[] = [];\n    for (const bank of banks) {\n      const multiplier = this.assetShareValueMultiplierByBank.get(bank.address.toBase58());\n      const balances = await fetchMarginfiAccountActiveBalancesForBank(\n        this.program,\n        this.group.address,\n        bank.address,\n        { concurrency: options?.concurrency }\n      );\n\n      for (const { accountAddress, authority, balance } of balances) {\n        const { assets, liabilities } = Balance.fromBalanceType(balance).computeQuantityUi(\n          bank,\n          multiplier\n        );\n        rows.push({ authority, accountAddress, bank: bank.address, assets, liabilities });\n      }\n    }\n\n    return rows;\n  }\n\n  /**\n   * Fetches and wraps a marginfi account in one call.\n   *\n   * This is a convenience method that combines fetching the account data\n   * and wrapping it for easier use. Equivalent to:\n   * ```typescript\n   * const account = await MarginfiAccount.fetch(address, client.program);\n   * const wrapped = new MarginfiAccountWrapper(account, client);\n   * ```\n   *\n   * @param accountAddress - The public key of the marginfi account\n   * @returns A wrapped account ready to use\n   */\n  async fetchAccount(\n    accountAddress: PublicKey,\n    skipHealthCache?: boolean\n  ): Promise<MarginfiAccountWrapper> {\n    const marginfiAccountRaw: MarginfiAccountRaw =\n      await this.program.account.marginfiAccount.fetch(accountAddress);\n    let marginfiAccountParsed = MarginfiAccount.fromAccountParsed(\n      accountAddress,\n      marginfiAccountRaw\n    );\n\n    if (!skipHealthCache) {\n      const bankMap = new Map(this.banks.map((b) => [b.address.toBase58(), b]));\n\n      // Compute active emode weights for this account\n      const activePairs = marginfiAccountParsed.computeActiveEmodePairs(this.emodePairs);\n      const activeEmodeWeightsByBank = computeLowestEmodeWeights(activePairs);\n\n      const { account: simulatedAccount } = await marginfiAccountParsed.simulateHealthCache({\n        program: this.program,\n        banksMap: bankMap,\n        oraclePricesByBank: this.oraclePriceByBank,\n        bankIntegrationMap: this.bankIntegrationMap,\n        assetShareValueMultiplierByBank: this.assetShareValueMultiplierByBank,\n        activeEmodeWeightsByBank,\n      });\n      marginfiAccountParsed = simulatedAccount;\n    }\n    return new MarginfiAccountWrapper(marginfiAccountParsed, this);\n  }\n\n  static async initialize(connection: Connection, config: Project0Config) {\n    const { groupPk, programId } = config;\n\n    const idl: MarginfiIdlType = {\n      ...MARGINFI_IDL,\n      address: programId.toBase58(),\n    };\n\n    const provider = new AnchorProvider(connection, {} as Wallet, {\n      ...AnchorProvider.defaultOptions(),\n      commitment: connection.commitment ?? AnchorProvider.defaultOptions().commitment,\n    });\n\n    const program: MarginfiProgram = new Program<MarginfiIdlType>(\n      idl,\n      provider\n    ) as unknown as MarginfiProgram;\n\n    // fetch group data\n    const group = await MarginfiGroup.fetch(groupPk, program);\n\n    // fetch bank data\n    const banksArray = await group.fetchBanks(program);\n    const bankMap = new Map(banksArray.map((b) => [b.address.toBase58(), b]));\n\n    // fetch oracle prices\n    const { bankOraclePriceMap } = await fetchOracleData(banksArray, {\n      pythOpts: {\n        mode: \"on-chain\",\n        connection,\n      },\n      swbOpts: {\n        mode: \"on-chain\",\n        connection,\n      },\n      scopeOpts: {\n        mode: \"on-chain\",\n        connection,\n      },\n      oracleMultiplierOpts: {\n        mode: \"on-chain\",\n        connection,\n      },\n      isolatedBanksOpts: {\n        fetchPrices: true,\n      },\n    });\n\n    // fetch mint data (keyed by bank address for consistency)\n    const uniqueMints = Array.from(new Set(banksArray.map((b) => b.mint)));\n    const mintProgramData = await fetchProgramForMints(connection, uniqueMints);\n\n    const mintDataByBank = new Map<string, MintData>();\n    banksArray.forEach((bank) => {\n      const mintData = mintProgramData.find((m) => m.mint.equals(bank.mint));\n      if (mintData) {\n        mintDataByBank.set(bank.address.toBase58(), {\n          mint: mintData.mint,\n          tokenProgram: mintData.program,\n        });\n      }\n    });\n\n    // fetch address lookup tables (general + native-stake sets)\n    const fetchLuts = async (keys?: PublicKey[]): Promise<AddressLookupTableAccount[]> => {\n      if (!keys || keys.length === 0) return [];\n      return (await Promise.all(keys.map((lut) => connection.getAddressLookupTable(lut))))\n        .map((response) => response?.value ?? null)\n        .filter((table): table is AddressLookupTableAccount => table !== null);\n    };\n\n    const [generalLuts, nativeStakeLuts] = await Promise.all([\n      fetchLuts(ADDRESS_LOOKUP_TABLE_FOR_GROUP[groupPk.toBase58()]),\n      fetchLuts(ADDRESS_LOOKUP_TABLE_FOR_GROUP_NATIVE_STAKE[groupPk.toBase58()]),\n    ]);\n\n    // General first so that general transactions never reference a native-stake LUT\n    // for shared keys (the builders partition this combined array per transaction).\n    const addressLookupTables = [...generalLuts, ...nativeStakeLuts];\n\n    // fetch bank integration metadata (Kamino reserves/obligations, etc.)\n    const bankIntegrationMap = await fetchBankIntegrationMetadata({\n      connection,\n      banks: banksArray,\n    });\n\n    // fetch asset share multipliers\n    const assetShareMultiplierByBank = new Map<string, BigNumber>();\n    banksArray.forEach((bank) => {\n      switch (bank.config.assetTag) {\n        case AssetTag.KAMINO: {\n          const reserve = bankIntegrationMap[bank.address.toBase58()]?.kaminoStates?.reserveState;\n          if (!reserve) {\n            console.error(`No Kamino reserve found for bank ${bank.address.toBase58()}`);\n            assetShareMultiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n            break;\n          }\n          assetShareMultiplierByBank.set(\n            bank.address.toBase58(),\n            getKaminoCTokenMultiplier(reserve)\n          );\n          break;\n        }\n\n        case AssetTag.DRIFT: {\n          const spotMarket =\n            bankIntegrationMap[bank.address.toBase58()]?.driftStates?.spotMarketState;\n          if (!spotMarket) {\n            console.error(`No Drift spot market found for bank ${bank.address.toBase58()}`);\n            assetShareMultiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n            break;\n          }\n          assetShareMultiplierByBank.set(\n            bank.address.toBase58(),\n            getDriftCTokenMultiplier(spotMarket)\n          );\n          break;\n        }\n\n        case AssetTag.JUPLEND: {\n          const jupLendStates = bankIntegrationMap[bank.address.toBase58()]?.jupLendStates;\n          if (!jupLendStates) {\n            console.error(`No JupLend state found for bank ${bank.address.toBase58()}`);\n            assetShareMultiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n            break;\n          }\n          assetShareMultiplierByBank.set(\n            bank.address.toBase58(),\n            getJupLendFTokenMultiplier(\n              jupLendStates.jupLendingState,\n              jupLendStates.jupTokenReserveState,\n              jupLendStates.jupRewardsRateModel,\n              jupLendStates.fTokenTotalSupply,\n              Math.floor(Date.now() / 1000)\n            )\n          );\n          break;\n        }\n\n        case AssetTag.SOLEND:\n          // SOLEND integration not yet implemented, use default multiplier\n          assetShareMultiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n          break;\n\n        case AssetTag.STAKED:\n          // Multiplier computed below after all banks are iterated\n          break;\n\n        case AssetTag.DEFAULT:\n        case AssetTag.SOL:\n        default:\n          // Standard assets use 1:1 share multiplier\n          assetShareMultiplierByBank.set(bank.address.toBase58(), new BigNumber(1));\n          break;\n      }\n    });\n\n    // Compute asset share multipliers for staked banks (LST→SOL ratio)\n    const stakedMultipliers = await computeStakedBankMultipliers(\n      banksArray.filter((b) => b.config.assetTag === AssetTag.STAKED),\n      connection\n    );\n    stakedMultipliers.forEach((v, k) => assetShareMultiplierByBank.set(k, v));\n\n    // Generate emode pairs from bank configurations\n    const emodePairs = getEmodePairs(banksArray);\n\n    return new Project0Client(\n      program,\n      group,\n      bankMap,\n      bankIntegrationMap,\n      assetShareMultiplierByBank,\n      bankOraclePriceMap,\n      mintDataByBank,\n      addressLookupTables,\n      emodePairs\n    );\n  }\n}\n","import {\n  EmodeEntry,\n  EmodeFlags,\n  EmodeSettingsRaw,\n  EmodeSettingsType,\n  EmodeTag,\n  parseEmodeSettingsRaw,\n} from \"../services\";\n\nexport class EmodeSettings implements EmodeSettingsType {\n  constructor(\n    public emodeTag: EmodeTag,\n    public timestamp: number,\n    public flags: EmodeFlags[],\n    public emodeEntries: EmodeEntry[]\n  ) {\n    this.emodeTag = emodeTag;\n    this.timestamp = timestamp;\n    this.flags = flags;\n    this.emodeEntries = emodeEntries;\n  }\n\n  static fromEmodeSettingsType(emodeSettingsType: EmodeSettingsType): EmodeSettings {\n    return new EmodeSettings(\n      emodeSettingsType.emodeTag,\n      emodeSettingsType.timestamp,\n      emodeSettingsType.flags,\n      emodeSettingsType.emodeEntries\n    );\n  }\n\n  static from(emodeSettingsRaw: EmodeSettingsRaw): EmodeSettings {\n    const emodeSettingsType = parseEmodeSettingsRaw(emodeSettingsRaw);\n    return EmodeSettings.fromEmodeSettingsType(emodeSettingsType);\n  }\n}\n"]}