@meteora-ag/cp-amm-sdk 1.0.0-rc.3 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +5 -9
- package/dist/index.d.ts +5 -9
- package/dist/index.js +167 -201
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +166 -200
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","../src/CpAmm.ts","../src/idl/cp_amm.json","../src/types.ts","../src/pda.ts","../src/constants.ts","../src/helpers/token.ts","../src/helpers/fee.ts","../src/math/feeMath.ts","../src/math/mathUtils.ts","../src/helpers/curve.ts","../src/helpers/computeUnits.ts","../src/helpers/utils.ts","../src/helpers/accountFilters.ts","../src/helpers/priceMath.ts","../src/helpers/token2022.ts","../src/helpers/vestings.ts","../src/index.ts"],"names":["Rounding","ActivationPoint","FeeSchedulerMode","CollectFeeMode","TradeDirection","ActivationType","PublicKey","BN","Decimal","NATIVE_MINT"],"mappings":"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A;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOkB,EAAA;AAAsC,IAAA;AAChD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACE,MAAA;AAEC,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACN,QAAA;AACF,MAAA;AACO,MAAA;AAGG,QAAA;AACN,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACO,QAAA;AACP,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AACF;ADklNe;AACA;AiBv1RR;AjBy1RQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","sourcesContent":[null,"import { Program, BN } from \"@coral-xyz/anchor\";\nimport { NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport invariant from \"invariant\";\n\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport {\n Connection,\n Transaction,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n AccountMeta,\n} from \"@solana/web3.js\";\nimport {\n AddLiquidityParams,\n AmmProgram,\n BuildAddLiquidityParams,\n BuildLiquidatePositionInstructionParams,\n BuildRemoveAllLiquidityInstructionParams,\n ClaimPartnerFeeParams,\n ClaimPositionFeeInstructionParams,\n ClaimPositionFeeParams,\n ClaimRewardParams,\n ClosePositionInstructionParams,\n ClosePositionParams,\n ConfigState,\n CreatePoolParams,\n CreatePositionParams,\n DepositQuote,\n DynamicFeeParams,\n FundRewardParams,\n GetDepositQuoteParams,\n GetQuoteParams,\n GetWithdrawQuoteParams,\n InitializeCustomizeablePoolParams,\n LockPositionParams,\n MergePositionParams,\n PermanentLockParams,\n PoolState,\n PositionState,\n PreparedPoolCreation,\n PreparePoolCreationParams,\n PreparePoolCreationSingleSide,\n RefreshVestingParams,\n RemoveAllLiquidityAndClosePositionParams,\n RemoveAllLiquidityParams,\n RemoveLiquidityParams,\n Rounding,\n SwapParams,\n TxBuilder,\n UpdateRewardDurationParams,\n UpdateRewardFunderParams,\n VestingState,\n WithdrawIneligibleRewardParams,\n WithdrawQuote,\n} from \"./types\";\nimport {\n deriveCustomizablePoolAddress,\n derivePoolAddress,\n derivePoolAuthority,\n derivePositionAddress,\n derivePositionNftAccount,\n deriveTokenBadge,\n deriveTokenVaultAddress,\n} from \"./pda\";\n\nimport {\n getFeeNumerator,\n getOrCreateATAInstruction,\n getTokenProgram,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n getSwapAmount,\n getLiquidityDeltaFromAmountA,\n getLiquidityDeltaFromAmountB,\n getMinAmountWithSlippage,\n getPriceImpact,\n positionByPoolFilter,\n vestingByPositionFilter,\n calculateInitSqrtPrice,\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n getAmountBFromLiquidityDelta,\n getAmountAFromLiquidityDelta,\n getAllUserPositionNftAccount,\n getAvailableVestingLiquidity,\n isVestingComplete,\n} from \"./helpers\";\nimport { min } from \"bn.js\";\n\n/**\n * CpAmm SDK class to interact with the Dynamic CP-AMM\n */\nexport class CpAmm {\n _program: AmmProgram;\n private poolAuthority: PublicKey;\n constructor(connection: Connection) {\n this._program = new Program(CpAmmIDL as CpAmmTypes, {\n connection: connection,\n });\n this.poolAuthority = derivePoolAuthority();\n }\n\n /**\n * Returns the Anchor program instance.\n * @returns The AmmProgram instance.\n */\n getProgram() {\n return this._program;\n }\n\n /**\n * Prepares token accounts for a transaction by retrieving or creating associated token accounts.\n * @private\n * @param {PublicKey} owner - The owner of the token accounts\n * @param {PublicKey} tokenAMint - Mint address of token A\n * @param {PublicKey} tokenBMint - Mint address of token B\n * @param {PublicKey} tokenAProgram - Program ID for token A (Token or Token2022)\n * @param {PublicKey} tokenBProgram - Program ID for token B (Token or Token2022)\n * @returns {Promise<{tokenAAta: PublicKey, tokenBAta: PublicKey, instructions: TransactionInstruction[]}>}\n * The token account addresses and any instructions needed to create them\n */\n private async prepareTokenAccounts(\n owner: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenAProgram: PublicKey,\n tokenBProgram: PublicKey\n ): Promise<{\n tokenAAta: PublicKey;\n tokenBAta: PublicKey;\n instructions: TransactionInstruction[];\n }> {\n const instructions: TransactionInstruction[] = [];\n const [\n { ataPubkey: tokenAAta, ix: createInputTokenAccountIx },\n { ataPubkey: tokenBAta, ix: createOutputTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenAMint,\n owner,\n owner,\n true,\n tokenAProgram\n ),\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenBMint,\n owner,\n owner,\n true,\n tokenBProgram\n ),\n ]);\n createInputTokenAccountIx && instructions.push(createInputTokenAccountIx);\n createOutputTokenAccountIx && instructions.push(createOutputTokenAccountIx);\n\n return { tokenAAta, tokenBAta, instructions };\n }\n\n /**\n * Derives token badge account metadata\n * @param tokenAMint - Public key of token A mint\n * @param tokenBMint - Public key of token B mint\n * @returns Array of account metadata for token badges\n */\n private getTokenBadgeAccounts(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n ): AccountMeta[] {\n return [\n {\n pubkey: deriveTokenBadge(tokenAMint),\n isWritable: false,\n isSigner: false,\n },\n {\n pubkey: deriveTokenBadge(tokenBMint),\n isWritable: false,\n isSigner: false,\n },\n ];\n }\n\n /**\n * Builds an instruction to add liquidity to a position.\n * @private\n * @param {BuildAddLiquidityParams} params - Parameters for adding liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to add liquidity\n */\n private async buildAddLiquidityInstruction(\n params: BuildAddLiquidityParams\n ): Promise<TransactionInstruction> {\n const {\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n return await this._program.methods\n .addLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to remove all liquidity from a position.\n * @private\n * @param {BuildRemoveAllLiquidityInstructionParams} params - Parameters for removing all liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to remove all liquidity\n */\n private async buildRemoveAllLiquidityInstruction(\n params: BuildRemoveAllLiquidityInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .removeAllLiquidity(tokenAAmountThreshold, tokenBAmountThreshold)\n .accountsPartial({\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to claim fees accumulated by a position.\n * @private\n * @param {ClaimPositionFeeInstructionParams} params - Parameters for claiming position fees\n * @returns {Promise<TransactionInstruction>} Instruction to claim position fees\n */\n private async buildClaimPositionFeeInstruction(\n params: ClaimPositionFeeInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .claimPositionFee()\n .accountsPartial({\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to close a position.\n * @private\n * @param {ClosePositionInstructionParams} params - Parameters for closing a position\n * @returns {Promise<TransactionInstruction>} Instruction to close the position\n */\n private async buildClosePositionInstruction(\n params: ClosePositionInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n positionNftMint,\n } = params;\n\n return await this._program.methods\n .closePosition()\n .accountsPartial({\n positionNftMint,\n positionNftAccount,\n pool,\n position,\n poolAuthority,\n rentReceiver: owner,\n owner,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to refresh vesting for a position\n * @param params Parameters required for the refresh vesting instruction\n * @returns Transaction instruction or null if no vestings to refresh\n */\n private async buildRefreshVestingInstruction(\n params: RefreshVestingParams\n ): Promise<TransactionInstruction | null> {\n const { owner, position, positionNftAccount, pool, vestingAccounts } =\n params;\n\n if (vestingAccounts.length == 0) {\n return null;\n }\n\n return await this._program.methods\n .refreshVesting()\n .accountsPartial({\n position,\n positionNftAccount,\n pool,\n owner,\n })\n .remainingAccounts(\n vestingAccounts.map((pubkey: PublicKey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n })\n )\n .instruction();\n }\n\n /**\n * Helper function that builds instructions to claim fees, remove liquidity, and close a position\n * @param {BuildLiquidatePositionInstructionParams} params - Parameters for liquidating a position\n * @returns {Promise<TransactionInstruction[]>} Array of instructions\n * @private\n */\n private async buildLiquidatePositionInstruction(\n params: BuildLiquidatePositionInstructionParams\n ): Promise<TransactionInstruction[]> {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n\n const { nftMint: positionNftMint, pool } = positionState;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const instructions: TransactionInstruction[] = [];\n\n // 1. claim position fee\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(claimPositionFeeInstruction);\n\n // 2. remove all liquidity\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(removeAllLiquidityInstruction);\n // 3. close position\n const closePositionInstruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n instructions.push(closePositionInstruction);\n\n return instructions;\n }\n\n /**\n * Fetches the Config state of the program.\n * @param config - Public key of the config account.\n * @returns Parsed ConfigState.\n */\n async fetchConfigState(config: PublicKey): Promise<ConfigState> {\n const configState = await this._program.account.config.fetchNullable(\n config\n );\n invariant(configState, `Config account: ${config} not found`);\n\n return configState;\n }\n\n /**\n * Fetches the Pool state.\n * @param pool - Public key of the pool.\n * @returns Parsed PoolState.\n */\n async fetchPoolState(pool: PublicKey): Promise<PoolState> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n invariant(poolState, `Pool account: ${pool} not found`);\n\n return poolState;\n }\n\n /**\n * Fetches the Position state.\n * @param position - Public key of the position.\n * @returns Parsed PositionState.\n */\n async fetchPositionState(position: PublicKey): Promise<PositionState> {\n const positionState = await this._program.account.position.fetchNullable(\n position\n );\n invariant(positionState, `Position account: ${position} not found`);\n\n return positionState;\n }\n\n /**\n * Retrieves all config accounts.\n * @returns Array of config public keys and their states.\n */\n async getAllConfigs(): Promise<\n Array<{ publicKey: PublicKey; account: ConfigState }>\n > {\n const configAccounts = await this._program.account.config.all();\n\n return configAccounts;\n }\n\n /**\n * Retrieves all pool accounts.\n * @returns Array of pool public keys and their states.\n */\n async getAllPools(): Promise<\n Array<{ publicKey: PublicKey; account: PoolState }>\n > {\n const poolAccounts = await this._program.account.pool.all();\n\n return poolAccounts;\n }\n\n /**\n * Retrieves all position accounts.\n * @returns Array of position public keys and their states.\n */\n async getAllPositions(): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n const poolAccounts = await this._program.account.position.all();\n\n return poolAccounts;\n }\n\n /**\n * Gets all positions a specific pool.\n * @param pool - Public key of the pool.\n * @returns List of user positions for the pool.\n */\n async getAllPositionsByPool(pool: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n return await this._program.account.position.all([\n positionByPoolFilter(pool),\n ]);\n }\n\n /**\n * Gets all positions of a user for a specific pool.\n * @param pool - Public key of the pool.\n * @param user - Public key of the user.\n * @returns List of user positions for the pool.\n */\n async getUserPositionByPool(\n pool: PublicKey,\n user: PublicKey\n ): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const allUserPositions = await this.getPositionsByUser(user);\n return allUserPositions.filter((position) =>\n position.positionState.pool.equals(pool)\n );\n }\n\n /**\n * Gets all positions of a user across all pools.\n * @param user - Public key of the user.\n * @returns Array of user positions already sorted by liquidity\n */\n async getPositionsByUser(user: PublicKey): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const userPositionAccounts = await getAllUserPositionNftAccount(\n this._program.provider.connection,\n user\n );\n if (userPositionAccounts.length === 0) {\n return [];\n }\n\n const positionAddresses = userPositionAccounts.map((account) =>\n derivePositionAddress(account.positionNft)\n );\n\n const positionStates = await this._program.account.position.fetchMultiple(\n positionAddresses\n );\n const positionResult = userPositionAccounts\n .map((account, index) => {\n const positionState = positionStates[index];\n if (!positionState) return null;\n\n return {\n positionNftAccount: account.positionNftAccount,\n position: positionAddresses[index],\n positionState,\n };\n })\n .filter(Boolean);\n\n // in-place sort\n positionResult.sort((a, b) => {\n const totalLiquidityA = a.positionState.vestedLiquidity\n .add(a.positionState.permanentLockedLiquidity)\n .add(a.positionState.unlockedLiquidity);\n\n const totalLiquidityB = b.positionState.vestedLiquidity\n .add(b.positionState.permanentLockedLiquidity)\n .add(b.positionState.unlockedLiquidity);\n\n return totalLiquidityB.cmp(totalLiquidityA);\n });\n\n return positionResult;\n }\n\n async getAllVestingsByPosition(position: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: VestingState;\n }>\n > {\n const vestings = await this._program.account.vesting.all([\n vestingByPositionFilter(position),\n ]);\n\n return vestings;\n }\n\n isLockedPosition(position: PositionState): boolean {\n const totalLockedLiquidity = position.vestedLiquidity.add(\n position.permanentLockedLiquidity\n );\n\n return totalLockedLiquidity.gtn(0);\n }\n\n isPermanentLockedPosition(positionState: PositionState): boolean {\n return positionState.permanentLockedLiquidity.gtn(0);\n }\n\n /**\n * Checks if a position can be unlocked based on its locking state and vesting schedules.\n *\n * This method evaluates whether a position is eligible for operations that require\n * unlocked liquidity, such as removing all liquidity or closing the position. It checks both\n * permanent locks and time-based vesting schedules.\n *\n * @private\n * @param {PositionState} positionState - The current state of the position\n * @param {Array<{account: PublicKey; vestingState: VestingState}>} vestings - Array of vesting accounts and their states\n * @param {BN} currentPoint - Current timestamp or slot number (depending on activation type of pool)\n *\n * @returns {Object} Result object containing unlock status and reason\n * @returns {boolean} result.canUnlock - Whether the position can be unlocked\n * @returns {string|undefined} result.reason - Reason why position cannot be unlocked (if applicable)\n */\n canUnlockPosition(\n positionState: PositionState,\n vestings: Array<{ account: PublicKey; vestingState: VestingState }>,\n currentPoint: BN\n ): { canUnlock: boolean; reason?: string } {\n if (vestings.length > 0) {\n // Check if permanently locked\n if (this.isPermanentLockedPosition(positionState)) {\n return {\n canUnlock: false,\n reason: \"Position is permanently locked\",\n };\n }\n\n // Check each vesting\n // We expect that should have only one vesting per position\n for (const vesting of vestings) {\n if (!isVestingComplete(vesting.vestingState, currentPoint)) {\n return {\n canUnlock: false,\n reason: \"Position has incomplete vesting schedule\",\n };\n }\n }\n }\n\n return { canUnlock: true };\n }\n\n async isPoolExist(pool: PublicKey): Promise<boolean> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n return poolState !== null;\n }\n\n /**\n * Calculates swap quote based on input amount and pool state.\n * @param params - Swap parameters including input amount, pool state, slippage, etc.\n * @returns Swap quote including expected output amount, fee, and price impact.\n */\n async getQuote(params: GetQuoteParams): Promise<{\n swapInAmount: BN;\n consumedInAmount: BN;\n swapOutAmount: BN;\n minSwapOutAmount: BN;\n totalFee: BN;\n priceImpact: number;\n }> {\n const {\n inAmount,\n inputTokenMint,\n slippage,\n poolState,\n currentTime,\n currentSlot,\n inputTokenInfo,\n outputTokenInfo,\n } = params;\n const {\n sqrtPrice: sqrtPriceQ64,\n liquidity: liquidityQ64,\n activationType,\n activationPoint,\n collectFeeMode,\n poolFees,\n } = poolState;\n const {\n feeSchedulerMode,\n cliffFeeNumerator,\n numberOfPeriod,\n reductionFactor,\n periodFrequency,\n } = poolFees.baseFee;\n const dynamicFee = poolFees.dynamicFee;\n\n let actualAmountIn = inAmount;\n if (inputTokenInfo) {\n actualAmountIn = calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount;\n }\n const aToB = poolState.tokenAMint.equals(inputTokenMint);\n const currentPoint = activationType ? currentTime : currentSlot;\n\n let dynamicFeeParams: DynamicFeeParams;\n if (dynamicFee.initialized) {\n const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFee;\n dynamicFeeParams = { volatilityAccumulator, binStep, variableFeeControl };\n }\n\n const tradeFeeNumerator = getFeeNumerator(\n currentPoint,\n activationPoint,\n numberOfPeriod,\n periodFrequency,\n feeSchedulerMode,\n cliffFeeNumerator,\n reductionFactor,\n dynamicFeeParams\n );\n\n const { amountOut, totalFee } = getSwapAmount(\n actualAmountIn,\n sqrtPriceQ64,\n liquidityQ64,\n tradeFeeNumerator,\n aToB,\n collectFeeMode\n );\n\n let actualAmountOut = amountOut;\n if (outputTokenInfo) {\n actualAmountOut = calculateTransferFeeExcludedAmount(\n amountOut,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount;\n }\n\n const minSwapOutAmount = getMinAmountWithSlippage(\n actualAmountOut,\n slippage\n );\n\n return {\n swapInAmount: inAmount,\n consumedInAmount: actualAmountIn,\n swapOutAmount: actualAmountOut,\n minSwapOutAmount,\n totalFee,\n priceImpact: getPriceImpact(minSwapOutAmount, actualAmountOut),\n };\n }\n\n /**\n * Calculates the deposit quote for liquidity pool.\n *\n * @param {GetDepositQuoteParams} params - The parameters for calculating the deposit quote.\n *\n * @returns {Promise<Object>} Deposit quote results\n * @returns {BN} returns.actualInputAmount - The actual amount used as input (after deducting transfer fees).\n * @returns {BN} returns.outputAmount - The calculated corresponding amount of the other token.\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be added to the pool.\n */\n async getDepositQuote(params: GetDepositQuoteParams): Promise<DepositQuote> {\n const {\n inAmount,\n isTokenA,\n inputTokenInfo,\n outputTokenInfo,\n minSqrtPrice,\n maxSqrtPrice,\n sqrtPrice,\n } = params;\n\n const actualAmountIn = inputTokenInfo\n ? inAmount.sub(\n calculateTransferFeeIncludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).transferFee\n )\n : inAmount;\n\n const { liquidityDelta, rawAmount } = isTokenA\n ? {\n liquidityDelta: getLiquidityDeltaFromAmountA(\n actualAmountIn,\n sqrtPrice,\n maxSqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountBFromLiquidityDelta(\n delta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Up\n ),\n }\n : {\n liquidityDelta: getLiquidityDeltaFromAmountB(\n actualAmountIn,\n minSqrtPrice,\n sqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountAFromLiquidityDelta(\n delta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Up\n ),\n };\n\n const rawOutputAmount = new BN(rawAmount(liquidityDelta));\n const outputAmount = outputTokenInfo\n ? calculateTransferFeeIncludedAmount(\n rawOutputAmount,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount\n : rawOutputAmount;\n\n return {\n actualInputAmount: actualAmountIn,\n consumedInputAmount: inAmount,\n liquidityDelta,\n outputAmount,\n };\n }\n\n /**\n * Calculates the withdrawal quote for removing liquidity from a concentrated liquidity pool.\n *\n * @param {GetWithdrawQuoteParams} params - The parameters for calculating the withdraw quote\n *\n * @param {Object|null} params.tokenATokenInfo - must provide if token a is token2022\n * @param {Object|null} params.tokenBTokenInfo - must provide if token b is token2022\n *\n * @returns {Promise<Object>} Withdrawal quote results\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be removed from the pool\n * @returns {BN} returns.outAmountA - The calculated amount of token A to be received (after deducting transfer fees)\n * @returns {BN} returns.outAmountB - The calculated amount of token B to be received (after deducting transfer fees)\n */\n async getWithdrawQuote(\n params: GetWithdrawQuoteParams\n ): Promise<WithdrawQuote> {\n const {\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n minSqrtPrice,\n tokenATokenInfo,\n tokenBTokenInfo,\n } = params;\n const amountA = getAmountAFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Down\n );\n const amountB = getAmountBFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Down\n );\n\n return {\n liquidityDelta,\n outAmountA: tokenATokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountA,\n tokenATokenInfo.mint,\n tokenATokenInfo.currentEpoch\n ).amount\n : amountA,\n outAmountB: tokenBTokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountB,\n tokenBTokenInfo.mint,\n tokenBTokenInfo.currentEpoch\n ).amount\n : amountB,\n };\n }\n\n /**\n * Calculates liquidity and corresponding token amounts for token A single-sided pool creation\n * Only supports initialization where initial price equals min sqrt price\n * @param params Parameters for single-sided pool creation\n * @returns Calculated liquidity delta\n */\n preparePoolCreationSingleSide(params: PreparePoolCreationSingleSide): BN {\n const {\n tokenAAmount,\n initSqrtPrice,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n } = params;\n\n if (!initSqrtPrice.eq(minSqrtPrice)) {\n throw new Error(\"Only support single side for base token.\");\n }\n\n const actualAmountIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const liquidityDelta = getLiquidityDeltaFromAmountA(\n actualAmountIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n return liquidityDelta;\n }\n\n /**\n * Prepares parameters required for pool creation, including initial sqrt price and liquidity.\n * @private\n * @param {PreparePoolCreationParams} params - Initial token amounts for pool creation.\n * @returns init sqrt price and liquidity in Q64 format.\n */\n preparePoolCreationParams(\n params: PreparePoolCreationParams\n ): PreparedPoolCreation {\n const {\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n tokenBInfo,\n } = params;\n\n if (tokenAAmount.eq(new BN(0)) && tokenBAmount.eq(new BN(0))) {\n throw new Error(\"Invalid input amount\");\n }\n\n const actualAmountAIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const actualAmountBIn = tokenBInfo\n ? tokenBAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenBAmount,\n tokenBInfo.mint,\n tokenBInfo.currentEpoch\n ).transferFee\n )\n : tokenBAmount;\n\n const initSqrtPrice = calculateInitSqrtPrice(\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n actualAmountAIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n actualAmountBIn,\n minSqrtPrice,\n initSqrtPrice\n );\n\n const liquidityDelta = min(\n liquidityDeltaFromAmountA,\n liquidityDeltaFromAmountB\n );\n\n return {\n initSqrtPrice,\n liquidityDelta,\n };\n }\n\n /**\n * Builds a transaction to create a permissionless pool.\n * @param params - Parameters for pool creation.\n * @returns Transaction builder.\n */\n async createPool(params: CreatePoolParams): TxBuilder {\n const {\n payer,\n creator,\n config,\n positionNft,\n tokenAMint,\n tokenBMint,\n initSqrtPrice,\n liquidityDelta,\n activationPoint,\n tokenAAmount,\n tokenBAmount,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(tokenBAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n const tx = await this._program.methods\n .initializePool({\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationPoint: activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n config,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return tx;\n }\n\n /**\n * Builds a transaction to create a customizable pool.\n * @param params - Parameters for customizable pool creation.\n * @returns Transaction and related addresses.\n */\n async createCustomPool(params: InitializeCustomizeablePoolParams): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n } = params;\n const pool = deriveCustomizablePoolAddress(tokenAMint, tokenBMint);\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const lamports = tokenBAmount.eq(new BN(0)) ? new BN(1) : tokenBAmount;\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(lamports.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n const transaction = await this._program.methods\n .initializeCustomizablePool({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n /**\n * Builds a transaction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction builder.\n */\n async createPosition(params: CreatePositionParams): TxBuilder {\n const { owner, payer, pool, positionNft } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n return await this._program.methods\n .createPosition()\n .accountsPartial({\n owner,\n positionNftMint: positionNft,\n poolAuthority: this.poolAuthority,\n positionNftAccount,\n payer: payer,\n pool,\n position,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to add liquidity to an existing position.\n * @param {AddLiquidityParams} params - Parameters for adding liquidity.\n * @returns Transaction builder.\n */\n async addLiquidity(params: AddLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeLiquidity(params: RemoveLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n return await this._program.methods\n .removeLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeAllLiquidity(params: RemoveAllLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n removeAllLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to perform a swap in the pool.\n * @param {SwapParams} params - Parameters for swapping tokens.\n * @returns Transaction builder.\n */\n async swap(params: SwapParams): TxBuilder {\n const {\n payer,\n pool,\n inputTokenMint,\n outputTokenMint,\n amountIn,\n minimumAmountOut,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n } = params;\n\n const [inputTokenProgram, outputTokenProgram] = inputTokenMint.equals(\n tokenAMint\n )\n ? [tokenAProgram, tokenBProgram]\n : [tokenBProgram, tokenAProgram];\n\n const {\n tokenAAta: inputTokenAccount,\n tokenBAta: outputTokenAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n inputTokenMint,\n outputTokenMint,\n inputTokenProgram,\n outputTokenProgram\n );\n\n if (inputTokenMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n inputTokenAccount,\n BigInt(amountIn.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(payer);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .swap({\n amountIn,\n minimumAmountOut,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n payer,\n inputTokenAccount,\n outputTokenAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to lock a position with vesting schedule.\n * @param {LockPositionParams} params - Locking parameters.\n * @returns Transaction builder.\n */\n async lockPosition(params: LockPositionParams): TxBuilder {\n const {\n owner,\n pool,\n payer,\n vestingAccount,\n position,\n positionNftAccount,\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n } = params;\n const lockPositionParams = {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n };\n return await this._program.methods\n .lockPosition(lockPositionParams)\n .accountsPartial({\n position,\n positionNftAccount,\n vesting: vestingAccount,\n pool: pool,\n owner: owner,\n payer: payer,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to permanently lock a position.\n * @param {PermanentLockParams} params - Parameters for permanent locking.\n * @returns Transaction builder.\n */\n async permanentLockPosition(params: PermanentLockParams): TxBuilder {\n const { owner, position, positionNftAccount, pool, unlockedLiquidity } =\n params;\n\n return await this._program.methods\n .permanentLockPosition(unlockedLiquidity)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: owner,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to refresh vesting status of a position.\n * @param {RefreshVestingParams} params - Refresh vesting parameters.\n * @returns Transaction builder.\n */\n async refreshVesting(params: RefreshVestingParams): TxBuilder {\n const instruction = await this.buildRefreshVestingInstruction(params);\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to claim position fee rewards.\n * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.\n * @returns Transaction builder.\n */\n async claimPositionFee(params: ClaimPositionFeeParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n claimPositionFeeInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n async closePosition(params: ClosePositionParams): TxBuilder {\n const { owner, pool, position, positionNftMint, positionNftAccount } =\n params;\n\n const instruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to remove all liquidity from a position and close it.\n * This combines several operations in a single transaction:\n * 1. Claims any accumulated fees\n * 2. Removes all liquidity\n * 3. Closes the position\n *\n * @param {RemoveAllLiquidityAndClosePositionParams} params - Combined parameters\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If the position is locked or cannot be closed\n */\n async removeAllLiquidityAndClosePosition(\n params: RemoveAllLiquidityAndClosePositionParams\n ): TxBuilder {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n vestings,\n currentPoint,\n } = params;\n\n const { pool } = positionState;\n const { tokenAMint, tokenBMint } = poolState;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionState,\n vestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n // 1. refresh vesting if vesting account provided\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to merge liquidity from one position into another.\n * This process:\n * 1. Claims fees from the source position\n * 2. Removes all liquidity from the source position\n * 3. Adds that liquidity to the target position\n * 4. Closes the source position\n *\n * @param {MergePositionParams} params - Parameters for merging positions\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If either position is locked or incompatible\n */\n async mergePosition(params: MergePositionParams): TxBuilder {\n const {\n owner,\n positionA,\n positionB,\n positionBState,\n poolState,\n positionBNftAccount,\n positionANftAccount,\n tokenAAmountAddLiquidityThreshold,\n tokenBAmountAddLiquidityThreshold,\n tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountRemoveLiquidityThreshold,\n positionBVestings,\n currentPoint,\n } = params;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionBState,\n positionBVestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const pool = positionBState.pool;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n let positionBLiquidityDelta = positionBState.unlockedLiquidity;\n // 1. refresh vesting position B if vesting account provided\n if (positionBVestings.length > 0) {\n // accumulate all liquidity delta of position b (unlocked + available vesting)\n const totalAvailableVestingLiquidity = positionBVestings.reduce(\n (total, position) => {\n const available = getAvailableVestingLiquidity(\n position.vestingState,\n currentPoint\n );\n return total.add(available);\n },\n new BN(0)\n );\n\n positionBLiquidityDelta = positionBLiquidityDelta.add(\n totalAvailableVestingLiquidity\n );\n\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n pool,\n vestingAccounts: positionBVestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n positionState: positionBState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold: tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountRemoveLiquidityThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n // 3. add liquidity from position B to positon A\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position: positionA,\n positionNftAccount: positionANftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta: positionBLiquidityDelta,\n tokenAAmountThreshold: tokenAAmountAddLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountAddLiquidityThreshold,\n });\n\n transaction.add(addLiquidityInstruction);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to update reward duration.\n * @param {UpdateRewardDurationParams} params - Parameters including pool and new duration.\n * @returns Transaction builder.\n */\n async updateRewardDuration(params: UpdateRewardDurationParams): TxBuilder {\n const { pool, admin, rewardIndex, newDuration } = params;\n return await this._program.methods\n .updateRewardDuration(rewardIndex, newDuration)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to update reward funder address.\n * @param {UpdateRewardFunderParams} params - Parameters including pool and new funder address.\n * @returns Transaction builder.\n */\n async updateRewardFunder(params: UpdateRewardFunderParams): TxBuilder {\n const { pool, admin, rewardIndex, newFunder } = params;\n return await this._program.methods\n .updateRewardFunder(rewardIndex, newFunder)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to fund rewards in a pool.\n * @param {FundRewardParams} params - Funding parameters.\n * @returns Transaction builder.\n */\n async fundReward(params: FundRewardParams): TxBuilder {\n const { rewardIndex, carryForward, pool, funder, amount } = params;\n\n const poolState = await this.fetchPoolState(pool);\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { vault, mint } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardIndex);\n\n const preInstructions: TransactionInstruction[] = [];\n\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n // TODO: check case reward mint is wSOL && carryForward is true => total amount > amount\n if (mint.equals(NATIVE_MINT) && !amount.isZero()) {\n const wrapSOLIx = wrapSOLInstruction(\n funder,\n funderTokenAccount,\n BigInt(amount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n return await this._program.methods\n .fundReward(rewardIndex, amount, carryForward)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to withdraw ineligible rewards from a pool.\n * @param {WithdrawIneligibleRewardParams} params - Parameters for withdrawal.\n * @returns Transaction builder.\n */\n async withdrawIneligibleReward(\n params: WithdrawIneligibleRewardParams\n ): TxBuilder {\n const { rewardIndex, pool, funder } = params;\n const poolState = await this.fetchPoolState(pool);\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { mint, vault, rewardTokenFlag } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n if (mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(funder);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .withdrawIneligibleReward(rewardIndex)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n poolAuthority: this.poolAuthority,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim partner fee rewards.\n * @param {ClaimPartnerFeeParams} params - Claim parameters including amounts and partner address.\n * @returns Transaction builder.\n */\n async claimPartnerFee(params: ClaimPartnerFeeParams): TxBuilder {\n const { partner, pool, maxAmountA, maxAmountB } = params;\n const poolState = await this.fetchPoolState(pool);\n const {\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAFlag,\n tokenBFlag,\n } = poolState;\n\n const tokenAProgram = getTokenProgram(tokenAFlag);\n const tokenBProgram = getTokenProgram(tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n partner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [\n poolState.tokenAMint.toBase58(),\n poolState.tokenBMint.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(partner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .claimPartnerFee(maxAmountA, maxAmountB)\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n partner,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim reward from a position.\n * @param {ClaimRewardParams} params - Parameters for claiming reward.\n * @returns Transaction builder.\n */\n async claimReward(params: ClaimRewardParams): TxBuilder {\n const {\n user,\n position,\n positionNftAccount,\n rewardIndex,\n poolState,\n positionState,\n } = params;\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const tokenProgram = getTokenProgram(rewardInfo.rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: userTokenAccount, ix: createUserTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n rewardInfo.mint,\n user,\n user,\n true,\n tokenProgram\n );\n createUserTokenAccountIx && preInstructions.push(createUserTokenAccountIx);\n\n if (rewardInfo.mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return await this._program.methods\n .claimReward(rewardIndex)\n .accountsPartial({\n pool: positionState.pool,\n positionNftAccount,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n poolAuthority: this.poolAuthority,\n position,\n userTokenAccount,\n owner: user,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n}\n","{\n \"address\": \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\",\n \"metadata\": {\n \"name\": \"cp_amm\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity\",\n \"discriminator\": [\n 181,\n 157,\n 89,\n 67,\n 143,\n 182,\n 52,\n 72\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_partner_fee\",\n \"discriminator\": [\n 97,\n 206,\n 39,\n 105,\n 94,\n 94,\n 126,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"partner\",\n \"signer\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_b\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_position_fee\",\n \"discriminator\": [\n 180,\n 38,\n 154,\n 17,\n 133,\n 33,\n 162,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_protocol_fee\",\n \"discriminator\": [\n 165,\n 228,\n 133,\n 48,\n 99,\n 249,\n 255,\n 33\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 153,\n 10,\n 107,\n 154,\n 255,\n 249,\n 210,\n 173,\n 176,\n 67,\n 220,\n 214,\n 152,\n 71,\n 46,\n 146,\n 161,\n 33,\n 81,\n 148,\n 166,\n 119,\n 5,\n 189,\n 142,\n 11,\n 57,\n 68,\n 162,\n 70,\n 126,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_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\": \"token_b_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 153,\n 10,\n 107,\n 154,\n 255,\n 249,\n 210,\n 173,\n 176,\n 67,\n 220,\n 214,\n 152,\n 71,\n 46,\n 146,\n 161,\n 33,\n 81,\n 148,\n 166,\n 119,\n 5,\n 189,\n 142,\n 11,\n 57,\n 68,\n 162,\n 70,\n 126,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_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\": \"claim_fee_operator\",\n \"docs\": [\n \"Claim fee operator\"\n ]\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator\"\n ],\n \"signer\": true,\n \"relations\": [\n \"claim_fee_operator\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_reward\",\n \"discriminator\": [\n 149,\n 95,\n 181,\n 242,\n 94,\n 90,\n 158,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"docs\": [\n \"The vault token account for reward token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"close_claim_fee_operator\",\n \"discriminator\": [\n 38,\n 134,\n 82,\n 216,\n 95,\n 124,\n 17,\n 99\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_config\",\n \"discriminator\": [\n 145,\n 9,\n 72,\n 157,\n 95,\n 125,\n 61,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position\",\n \"discriminator\": [\n 123,\n 134,\n 81,\n 0,\n 49,\n 68,\n 98,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_claim_fee_operator\",\n \"discriminator\": [\n 169,\n 62,\n 207,\n 107,\n 58,\n 187,\n 162,\n 109\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 102,\n 95,\n 111,\n 112,\n 101,\n 114,\n 97,\n 116,\n 111,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_config\",\n \"docs\": [\n \"ADMIN FUNCTIONS /////\"\n ],\n \"discriminator\": [\n 201,\n 207,\n 243,\n 114,\n 75,\n 111,\n 47,\n 189\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"config_parameters.index\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_position\",\n \"discriminator\": [\n 48,\n 215,\n 197,\n 153,\n 96,\n 203,\n 180,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the position. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_token_badge\",\n \"discriminator\": [\n 88,\n 206,\n 0,\n 91,\n 60,\n 175,\n 151,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"token_badge\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 98,\n 97,\n 100,\n 103,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"fund_reward\",\n \"discriminator\": [\n 188,\n 50,\n 249,\n 165,\n 93,\n 151,\n 38,\n 63\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carry_forward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_pool\",\n \"discriminator\": [\n 20,\n 161,\n 241,\n 24,\n 189,\n 221,\n 180,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"Token a vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"Token b vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_pool\",\n \"docs\": [\n \"USER FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 95,\n 180,\n 10,\n 172,\n 84,\n 174,\n 232,\n 40\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"Token a vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"Token b vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_reward\",\n \"discriminator\": [\n 95,\n 135,\n 192,\n 196,\n 242,\n 129,\n 230,\n 68\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 119,\n 97,\n 114,\n 100,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"reward_index\"\n }\n ]\n }\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"lock_position\",\n \"discriminator\": [\n 227,\n 62,\n 2,\n 252,\n 247,\n 10,\n 171,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"vesting\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"VestingParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"permanent_lock_position\",\n \"discriminator\": [\n 165,\n 176,\n 125,\n 6,\n 231,\n 171,\n 186,\n 213\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"refresh_vesting\",\n \"discriminator\": [\n 9,\n 94,\n 216,\n 14,\n 116,\n 204,\n 247,\n 0\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_all_liquidity\",\n \"discriminator\": [\n 10,\n 51,\n 61,\n 35,\n 112,\n 105,\n 24,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity\",\n \"discriminator\": [\n 80,\n 85,\n 209,\n 72,\n 24,\n 206,\n 177,\n 108\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_pool_status\",\n \"discriminator\": [\n 112,\n 87,\n 135,\n 223,\n 83,\n 204,\n 132,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"discriminator\": [\n 248,\n 198,\n 158,\n 145,\n 225,\n 117,\n 135,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"input_token_account\",\n \"docs\": [\n \"The user token account for input token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"output_token_account\",\n \"docs\": [\n \"The user token account for output token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"The user performing the swap\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"referral_token_account\",\n \"docs\": [\n \"referral token account\"\n ],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_reward_duration\",\n \"discriminator\": [\n 138,\n 174,\n 196,\n 169,\n 213,\n 235,\n 254,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_reward_funder\",\n \"discriminator\": [\n 211,\n 28,\n 48,\n 32,\n 215,\n 160,\n 35,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_ineligible_reward\",\n \"discriminator\": [\n 148,\n 206,\n 42,\n 195,\n 247,\n 49,\n 103,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"ClaimFeeOperator\",\n \"discriminator\": [\n 166,\n 48,\n 134,\n 86,\n 34,\n 200,\n 188,\n 150\n ]\n },\n {\n \"name\": \"Config\",\n \"discriminator\": [\n 155,\n 12,\n 170,\n 224,\n 30,\n 250,\n 204,\n 130\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"TokenBadge\",\n \"discriminator\": [\n 116,\n 219,\n 204,\n 229,\n 249,\n 116,\n 255,\n 150\n ]\n },\n {\n \"name\": \"Vesting\",\n \"discriminator\": [\n 100,\n 149,\n 66,\n 138,\n 95,\n 200,\n 128,\n 241\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"EvtAddLiquidity\",\n \"discriminator\": [\n 175,\n 242,\n 8,\n 157,\n 30,\n 247,\n 185,\n 169\n ]\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"discriminator\": [\n 118,\n 99,\n 77,\n 10,\n 226,\n 1,\n 1,\n 87\n ]\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"discriminator\": [\n 198,\n 182,\n 183,\n 52,\n 97,\n 12,\n 49,\n 56\n ]\n },\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"discriminator\": [\n 186,\n 244,\n 75,\n 251,\n 188,\n 13,\n 25,\n 33\n ]\n },\n {\n \"name\": \"EvtClaimReward\",\n \"discriminator\": [\n 218,\n 86,\n 147,\n 200,\n 235,\n 188,\n 215,\n 231\n ]\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"discriminator\": [\n 111,\n 39,\n 37,\n 55,\n 110,\n 216,\n 194,\n 23\n ]\n },\n {\n \"name\": \"EvtCloseConfig\",\n \"discriminator\": [\n 36,\n 30,\n 239,\n 45,\n 58,\n 132,\n 14,\n 5\n ]\n },\n {\n \"name\": \"EvtClosePosition\",\n \"discriminator\": [\n 20,\n 145,\n 144,\n 68,\n 143,\n 142,\n 214,\n 178\n ]\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"discriminator\": [\n 21,\n 6,\n 153,\n 120,\n 68,\n 116,\n 28,\n 177\n ]\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"discriminator\": [\n 131,\n 207,\n 180,\n 174,\n 180,\n 73,\n 165,\n 54\n ]\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"discriminator\": [\n 156,\n 15,\n 119,\n 198,\n 29,\n 181,\n 221,\n 55\n ]\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"discriminator\": [\n 141,\n 120,\n 134,\n 116,\n 34,\n 28,\n 114,\n 160\n ]\n },\n {\n \"name\": \"EvtFundReward\",\n \"discriminator\": [\n 104,\n 233,\n 237,\n 122,\n 199,\n 191,\n 121,\n 85\n ]\n },\n {\n \"name\": \"EvtInitializePool\",\n \"discriminator\": [\n 228,\n 50,\n 246,\n 85,\n 203,\n 66,\n 134,\n 37\n ]\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"discriminator\": [\n 129,\n 91,\n 188,\n 3,\n 246,\n 52,\n 185,\n 249\n ]\n },\n {\n \"name\": \"EvtLockPosition\",\n \"discriminator\": [\n 168,\n 63,\n 108,\n 83,\n 219,\n 82,\n 2,\n 200\n ]\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"discriminator\": [\n 145,\n 143,\n 162,\n 218,\n 218,\n 80,\n 67,\n 11\n ]\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"discriminator\": [\n 87,\n 46,\n 88,\n 98,\n 175,\n 96,\n 34,\n 91\n ]\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"discriminator\": [\n 100,\n 213,\n 74,\n 3,\n 95,\n 91,\n 228,\n 146\n ]\n },\n {\n \"name\": \"EvtSwap\",\n \"discriminator\": [\n 27,\n 60,\n 21,\n 213,\n 138,\n 170,\n 187,\n 147\n ]\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"discriminator\": [\n 149,\n 135,\n 65,\n 231,\n 129,\n 153,\n 65,\n 57\n ]\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"discriminator\": [\n 76,\n 154,\n 208,\n 13,\n 40,\n 115,\n 246,\n 146\n ]\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"discriminator\": [\n 248,\n 215,\n 184,\n 78,\n 31,\n 180,\n 179,\n 168\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidFee\",\n \"msg\": \"Invalid fee setup\"\n },\n {\n \"code\": 6002,\n \"name\": \"ExceededSlippage\",\n \"msg\": \"Exceeded slippage tolerance\"\n },\n {\n \"code\": 6003,\n \"name\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6006,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6007,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6008,\n \"name\": \"UnableToModifyActivationPoint\",\n \"msg\": \"Unable to modify activation point\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidAuthorityToCreateThePool\",\n \"msg\": \"Invalid authority to create the pool\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidActivationPoint\",\n \"msg\": \"Invalid activation point\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Quote token must be SOL,USDC\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeCurve\",\n \"msg\": \"Invalid fee curve\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidPriceRange\",\n \"msg\": \"Invalid Price Range\"\n },\n {\n \"code\": 6015,\n \"name\": \"PriceRangeViolation\",\n \"msg\": \"Trade is over price range\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidParameters\",\n \"msg\": \"Invalid parameters\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidCollectFeeMode\",\n \"msg\": \"Invalid collect fee mode\"\n },\n {\n \"code\": 6018,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input\"\n },\n {\n \"code\": 6019,\n \"name\": \"CannotCreateTokenBadgeOnSupportedMint\",\n \"msg\": \"Cannot create token badge on supported mint\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidTokenBadge\",\n \"msg\": \"Invalid token badge\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidMinimumLiquidity\",\n \"msg\": \"Invalid minimum liquidity\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidVestingInfo\",\n \"msg\": \"Invalid vesting information\"\n },\n {\n \"code\": 6023,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidVestingAccount\",\n \"msg\": \"Invalid vesting account\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidPoolStatus\",\n \"msg\": \"Invalid pool status\"\n },\n {\n \"code\": 6026,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupported native mint token2022\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6029,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6030,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6032,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n },\n {\n \"code\": 6033,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6034,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6035,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6036,\n \"name\": \"InvalidFunder\",\n \"msg\": \"Invalid funder\"\n },\n {\n \"code\": 6037,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6038,\n \"name\": \"FeeInverseIsIncorrect\",\n \"msg\": \"Fee inverse is incorrect\"\n },\n {\n \"code\": 6039,\n \"name\": \"PositionIsNotEmpty\",\n \"msg\": \"Position is not empty\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"maximum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"maximum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeStruct\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding_1\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFeeOperator\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"operator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Config\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"vault_config_key\",\n \"docs\": [\n \"Vault config key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"docs\": [\n \"Only pool_creator_authority can use the current config to initialize new pool. When it's Pubkey::default, it's a public config.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesConfig\"\n }\n }\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"Collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"index\",\n \"docs\": [\n \"config index\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Fee curve point\",\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeStruct\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price_reference\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_accumulator\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_reference\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtAddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_claimed\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_reward\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"docs\": [\n \"Close claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"claim_fee_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCloseConfig\",\n \"docs\": [\n \"Close config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Config pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin pk\"\n ],\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClosePosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"docs\": [\n \"Create claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"docs\": [\n \"Create config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"docs\": [\n \"Create token badge\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtFundReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"transfer_fee_excluded_amount_in\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializePool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"alpha_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vesting\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_liquidity_amount\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_permanent_locked_liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtSwap\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"trade_direction\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_referral\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n },\n {\n \"name\": \"swap_result\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapResult\"\n }\n }\n },\n {\n \"name\": \"actual_amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeCustomizablePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"pool fees\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\n \"has alpha vault\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesStruct\"\n }\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"token a mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"token b mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"token a vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"token b vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"whitelisted_vault\",\n \"docs\": [\n \"Whitelisted vault to be able to buy pool before activation_point\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"liquidity share\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_reserve\",\n \"docs\": [\n \"token a reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_reserve\",\n \"docs\": [\n \"token b reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_a_fee\",\n \"docs\": [\n \"protocol a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_b_fee\",\n \"docs\": [\n \"protocol b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_a_fee\",\n \"docs\": [\n \"partner a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_b_fee\",\n \"docs\": [\n \"partner b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"current price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"Activation point, can be slot or timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type, 0 means by slot, 1 means by timestamp\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_status\",\n \"docs\": [\n \"pool status, 0: enable, 1 disable\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_flag\",\n \"docs\": [\n \"token a flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"docs\": [\n \"token b flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"pool type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n },\n {\n \"name\": \"fee_a_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetrics\"\n }\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RewardInfo\"\n }\n },\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeeParameters\",\n \"docs\": [\n \"Information regarding fee charges\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"docs\": [\n \"Base fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeParameters\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trade fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"DynamicFeeParameters\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeConfig\"\n }\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeConfig\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesStruct\",\n \"docs\": [\n \"Information regarding fee charges\",\n \"trading_fee = amount * trade_fee_numerator / denominator\",\n \"protocol_fee = trading_fee * protocol_fee_percentage / 100\",\n \"referral_fee = protocol_fee * referral_percentage / 100\",\n \"partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"docs\": [\n \"Trade fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, making the value of liquidity tokens rise.\",\n \"Trade fee numerator\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeStruct\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trading fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, with the equivalent in pool tokens minted to\",\n \"the protocol of the program.\",\n \"Protocol trade fee numerator\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeStruct\"\n }\n }\n },\n {\n \"name\": \"padding_1\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_lp_a_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_lp_b_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_protocol_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_protocol_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_position\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nft_mint\",\n \"docs\": [\n \"nft mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_per_token_checkpoint\",\n \"docs\": [\n \"fee a checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_token_checkpoint\",\n \"docs\": [\n \"fee b checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_a_pending\",\n \"docs\": [\n \"fee a pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_pending\",\n \"docs\": [\n \"fee b pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"unlocked_liquidity\",\n \"docs\": [\n \"unlock liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"vested_liquidity\",\n \"docs\": [\n \"vesting liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"permanent_locked_liquidity\",\n \"docs\": [\n \"permanent locked liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PositionMetrics\"\n }\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future usage\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_claimed_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"minimum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"minimum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"docs\": [\n \"Indicates if the reward has been initialized\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_token_flag\",\n \"docs\": [\n \"reward token flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding to ensure `reward_rate: u128` is 16-byte aligned\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_duration\",\n \"docs\": [\n \"reward duration\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration_end\",\n \"docs\": [\n \"reward duration end\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_rate\",\n \"docs\": [\n \"reward rate\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_per_token_stored\",\n \"docs\": [\n \"Reward per token stored\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_update_time\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_seconds_with_empty_liquidity_reward\",\n \"docs\": [\n \"Accumulated seconds when the farm distributed rewards but the bin was empty.\",\n \"These rewards will be carried over to the next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_amount_out\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapResult\",\n \"docs\": [\n \"Encodes all results of swapping\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"output_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"next_sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"lp_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenBadge\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"docs\": [\n \"token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"UserRewardInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_token_checkpoint\",\n \"docs\": [\n \"The latest update reward checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reward_pendings\",\n \"docs\": [\n \"Current pending rewards\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Vesting\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_released_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 14\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u128\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VestingParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_point\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import { IdlAccounts, IdlTypes, Program, BN } from \"@coral-xyz/anchor\";\nimport { PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport { Mint } from \"@solana/spl-token\";\n\nexport type AmmProgram = Program<CpAmmTypes>;\n\nexport type TxBuilder = Promise<Transaction>;\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport enum ActivationPoint {\n Timestamp,\n Slot,\n}\n\nexport enum FeeSchedulerMode {\n Linear,\n Exponential,\n}\n\nexport enum CollectFeeMode {\n BothToken,\n OnlyB,\n}\n\nexport enum TradeDirection {\n AtoB,\n BtoA,\n}\n\nexport enum ActivationType {\n Slot,\n Timestamp,\n}\n\nexport type FeeMode = {\n feeOnInput: boolean;\n feesOnTokenA: boolean;\n};\n\n// Account state types\nexport type PoolState = IdlAccounts<CpAmmTypes>[\"pool\"];\nexport type PositionState = IdlAccounts<CpAmmTypes>[\"position\"];\nexport type VestingState = IdlAccounts<CpAmmTypes>[\"vesting\"];\nexport type ConfigState = IdlAccounts<CpAmmTypes>[\"config\"];\nexport type TokenBadgeState = IdlAccounts<CpAmmTypes>[\"tokenBadge\"];\n\n// Program params types\n// export type LockPositionParams = IdlTypes<CpAmm>[\"VestingParameters\"];\n// export type AddLiquidityParams = IdlTypes<CpAmm>[\"AddLiquidityParameters\"];\n// export type RemoveLiquidityParams =\n// IdlTypes<CpAmm>[\"RemoveLiquidityParameters\"];\n// export type SwapParams = IdlTypes<CpAmm>[\"SwapParameters\"];\n// export type InitPoolParams = IdlTypes<CpAmm>[\"InitializePoolParameters\"];\n// export type InitCustomizePoolParams =\n// IdlTypes<CpAmm>[\"InitializeCustomizablePoolParameters\"];\nexport type RewardInfo = IdlTypes<CpAmmTypes>[\"rewardInfo\"];\n\nexport type DynamicFee = {\n binStep: number;\n binStepU128: BN;\n filterPeriod: number;\n decayPeriod: number;\n reductionFactor: number;\n maxVolatilityAccumulator: number;\n variableFeeControl: number;\n};\n\nexport type BaseFee = {\n cliffFeeNumerator: BN;\n numberOfPeriod: number;\n periodFrequency: BN;\n reductionFactor: BN;\n feeSchedulerMode: number;\n};\n\nexport type PoolFeesParams = {\n baseFee: BaseFee;\n protocolFeePercent: number;\n partnerFeePercent: number;\n referralFeePercent: number;\n dynamicFee: DynamicFee | null;\n};\n\nexport type InitializeCustomizeablePoolParams = {\n payer: PublicKey;\n creator: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n liquidityDelta: BN;\n initSqrtPrice: BN;\n poolFees: PoolFeesParams;\n hasAlphaVault: boolean;\n activationType: number;\n collectFeeMode: number;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type PreparePoolCreationParams = {\n tokenAAmount: BN;\n tokenBAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type PreparedPoolCreation = {\n initSqrtPrice: BN;\n liquidityDelta: BN;\n};\n\nexport type PreparePoolCreationSingleSide = {\n tokenAAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n initSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type CreatePoolParams = {\n creator: PublicKey;\n payer: PublicKey;\n config: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n initSqrtPrice: BN;\n liquidityDelta: BN;\n tokenAAmount: BN;\n tokenBAmount: BN;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type CreatePositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n};\n\nexport type AddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type LiquidityDeltaParams = {\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n sqrtPrice: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type RemoveLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type RemoveAllLiquidityParams = Omit<\n RemoveLiquidityParams,\n \"liquidityDelta\"\n>;\n\nexport type BuildAddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type BuildLiquidatePositionInstructionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n positionState: PositionState;\n poolState: PoolState;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n};\n\nexport type BuildRemoveAllLiquidityInstructionParams = {\n poolAuthority: PublicKey;\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionParams = {\n owner: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type RemoveAllLiquidityAndClosePositionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type MergePositionParams = {\n owner: PublicKey;\n positionA: PublicKey;\n positionB: PublicKey;\n poolState: PoolState;\n positionBNftAccount: PublicKey;\n positionANftAccount: PublicKey;\n positionBState: PositionState;\n tokenAAmountAddLiquidityThreshold: BN;\n tokenBAmountAddLiquidityThreshold: BN;\n tokenAAmountRemoveLiquidityThreshold: BN;\n tokenBAmountRemoveLiquidityThreshold: BN;\n positionBVestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type GetQuoteParams = {\n inAmount: BN;\n inputTokenMint: PublicKey;\n slippage: number;\n poolState: PoolState;\n currentTime: number;\n currentSlot: number;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type SwapQuotes = {\n totalFee: BN;\n minOutAmount: BN;\n actualAmount: BN;\n};\n\nexport type SwapParams = {\n payer: PublicKey;\n pool: PublicKey;\n inputTokenMint: PublicKey;\n outputTokenMint: PublicKey;\n amountIn: BN;\n minimumAmountOut: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n referralTokenAccount: PublicKey | null;\n};\n\nexport type LockPositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n vestingAccount: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n cliffPoint: BN | null;\n periodFrequency: BN;\n cliffUnlockLiquidity: BN;\n liquidityPerPeriod: BN;\n numberOfPeriod: number;\n};\n\nexport type ClaimPositionFeeInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClaimPositionFeeParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type InitializeRewardParams = {\n rewardIndex: number;\n rewardDuration: BN;\n pool: PublicKey;\n rewardMint: PublicKey;\n payer: PublicKey;\n};\n\nexport type UpdateRewardDurationParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newDuration: BN;\n};\n\nexport type UpdateRewardFunderParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newFunder: PublicKey;\n};\n\nexport type FundRewardParams = {\n funder: PublicKey;\n rewardIndex: number;\n pool: PublicKey;\n carryForward: boolean;\n amount: BN;\n};\n\nexport type WithdrawIneligibleRewardParams = {\n rewardIndex: number;\n pool: PublicKey;\n funder: PublicKey;\n};\n\nexport type ClaimPartnerFeeParams = {\n partner: PublicKey;\n pool: PublicKey;\n maxAmountA: BN;\n maxAmountB: BN;\n};\n\nexport type ClaimRewardParams = {\n user: PublicKey;\n position: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n positionNftAccount: PublicKey;\n rewardIndex: number;\n};\n\nexport type RefreshVestingParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n vestingAccounts: PublicKey[];\n};\n\nexport type PermanentLockParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n unlockedLiquidity: BN;\n};\n\nexport type GetDepositQuoteParams = {\n inAmount: BN;\n isTokenA: boolean;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type GetWithdrawQuoteParams = {\n liquidityDelta: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n tokenATokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type DepositQuote = {\n actualInputAmount: BN;\n consumedInputAmount: BN;\n outputAmount: BN;\n liquidityDelta: BN;\n};\n\nexport type WithdrawQuote = {\n liquidityDelta: BN;\n outAmountA: BN;\n outAmountB: BN;\n};\n\nexport type DynamicFeeParams = {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@coral-xyz/anchor\";\nimport { CP_AMM_PROGRAM_ID } from \"./constants\";\n\n// Private function: Only use to derive pool account\nexport function getFirstKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer();\n const buf2 = key2.toBuffer();\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf1;\n }\n return buf2;\n}\n\nexport function getSecondKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer();\n const buf2 = key2.toBuffer();\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf2;\n }\n return buf1;\n}\n\nexport function derivePoolAuthority(): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"pool_authority\")],\n CP_AMM_PROGRAM_ID\n )[0];\n}\nexport function deriveConfigAddress(index: BN): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"config\"), index.toArrayLike(Buffer, \"le\", 8)],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n config.toBuffer(),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionAddress(positionNft: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), positionNft.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenVaultAddress(\n tokenMint: PublicKey,\n pool: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_vault\"), tokenMint.toBuffer(), pool.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveRewardVaultAddress(\n pool: PublicKey,\n rewardIndex: number\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"reward_vault\"), pool.toBuffer(), Buffer.from([rewardIndex])],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveCustomizablePoolAddress(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"cpool\"),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenBadgeAddress(tokenMint: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), tokenMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveClaimFeeOperatorAddress(operator: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"cf_operator\"), operator.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionNftAccount(\n positionNftMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position_nft_account\"), positionNftMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenBadge(tokenMint: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), tokenMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const CP_AMM_PROGRAM_ID = new PublicKey(\n \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\"\n);\n\nexport const LIQUIDITY_SCALE = 128;\nexport const SCALE_OFFSET = 64;\nexport const BASIS_POINT_MAX = 10_000;\nexport const MAX_FEE_NUMERATOR = 500_000_000;\nexport const FEE_DENOMINATOR = 1_000_000_000;\nexport const PRECISION = 1_000_000;\n\nexport const MIN_SQRT_PRICE = new BN(\"4295048016\");\nexport const MAX_SQRT_PRICE = new BN(\"79226673521066979257578248091\");\nexport const MIN_CU_BUFFER = 50_000;\nexport const MAX_CU_BUFFER = 200_000;\n","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport {\n AccountLayout,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getMint,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nexport function getTokenProgram(flag: number): PublicKey {\n return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID;\n}\nexport const getTokenDecimals = async (\n connection: Connection,\n mint: PublicKey\n): Promise<number> => {\n return (await getMint(connection, mint)).decimals;\n};\n\nexport const getOrCreateATAInstruction = async (\n connection: Connection,\n tokenMint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true,\n tokenProgram: PublicKey\n): Promise<{ ataPubkey: PublicKey; ix?: TransactionInstruction }> => {\n const toAccount = getAssociatedTokenAddressSync(\n tokenMint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n\n try {\n await getAccount(connection, toAccount);\n return { ataPubkey: toAccount, ix: undefined };\n } catch (e) {\n if (\n e instanceof TokenAccountNotFoundError ||\n e instanceof TokenInvalidAccountOwnerError\n ) {\n const ix = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n toAccount,\n owner,\n tokenMint,\n tokenProgram\n );\n\n return { ataPubkey: toAccount, ix };\n } else {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\n }\n};\n\nexport const wrapSOLInstruction = (\n from: PublicKey,\n to: PublicKey,\n amount: bigint\n): TransactionInstruction[] => {\n return [\n SystemProgram.transfer({\n fromPubkey: from,\n toPubkey: to,\n lamports: amount,\n }),\n new TransactionInstruction({\n keys: [\n {\n pubkey: to,\n isSigner: false,\n isWritable: true,\n },\n ],\n data: Buffer.from(new Uint8Array([17])),\n programId: TOKEN_PROGRAM_ID,\n }),\n ];\n};\n\nexport const unwrapSOLInstruction = async (\n owner: PublicKey,\n allowOwnerOffCurve = true\n) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n );\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n );\n return closedWrappedSolInstruction;\n }\n return null;\n};\n\nexport async function getNftOwner(\n connection: Connection,\n nftMint: PublicKey\n): Promise<PublicKey> {\n const largesTokenAccount = await connection.getTokenLargestAccounts(nftMint);\n const accountInfo = await connection.getParsedAccountInfo(\n largesTokenAccount.value[0].address\n );\n // @ts-ignore\n const owner = new PublicKey(accountInfo.value.data.parsed.info.owner);\n\n return new PublicKey(owner);\n}\n\nexport async function getAllUserPositionNftAccount(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const filters: GetProgramAccountsFilter[] = [\n {\n memcmp: {\n offset: 32,\n bytes: user.toBase58(),\n },\n },\n {\n memcmp: {\n offset: 64,\n bytes: bs58.encode(Buffer.from([1, 0, 0, 0, 0, 0, 0, 0])), // 1\n },\n },\n ];\n\n const tokenAccountsRaw = await connection.getProgramAccounts(\n TOKEN_2022_PROGRAM_ID,\n {\n filters,\n }\n );\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccountsRaw) {\n const tokenAccountData = AccountLayout.decode(account.data);\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n\n return userPositionNftAccount;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { CollectFeeMode, FeeMode, FeeSchedulerMode, Rounding } from \"../types\";\nimport {\n BASIS_POINT_MAX,\n FEE_DENOMINATOR,\n MAX_FEE_NUMERATOR,\n SCALE_OFFSET,\n} from \"../constants\";\nimport { ONE, pow } from \"../math/feeMath\";\nimport { mulDiv } from \"../math\";\nimport {\n getAmountAFromLiquidityDelta,\n getAmountBFromLiquidityDelta,\n getNextSqrtPrice,\n} from \"./curve\";\n\n// Fee scheduler\n// Linear: cliffFeeNumerator - period * reductionFactor\n// Exponential: cliffFeeNumerator * (1 -reductionFactor/BASIS_POINT_MAX)^period\nexport function getBaseFeeNumerator(\n feeSchedulerMode: FeeSchedulerMode,\n cliffFeeNumerator: BN,\n period: BN,\n reductionFactor: BN\n): BN {\n let feeNumerator: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));\n } else {\n const bps = reductionFactor.shln(SCALE_OFFSET).div(new BN(BASIS_POINT_MAX));\n const base = ONE.sub(bps);\n const result = pow(base, period);\n feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);\n }\n\n return feeNumerator;\n}\n\n/**\n * Calculates the dynamic fee numerator based on market volatility metrics\n *\n * @param volatilityAccumulator - A measure of accumulated market volatility (BN)\n * @param binStep - The size of price bins in the liquidity distribution (BN)\n * @param variableFeeControl - Parameter controlling the impact of volatility on fees (BN)\n * @returns The calculated dynamic fee numerator (BN)\n */\nexport function getDynamicFeeNumerator(\n volatilityAccumulator: BN,\n binStep: BN,\n variableFeeControl: BN\n): BN {\n if (variableFeeControl.isZero()) {\n return new BN(0);\n }\n const squareVfaBin = volatilityAccumulator\n .mul(new BN(binStep))\n .pow(new BN(2));\n const vFee = variableFeeControl.mul(squareVfaBin);\n\n return vFee.add(new BN(99_999_999_999)).div(new BN(100_000_000_000));\n}\n\n/**\n * Calculates the fee numerator based on current market conditions and fee schedule configuration\n *\n * @param currentPoint - The current price point in the liquidity curve\n * @param activationPoint - The price point at which the fee schedule is activated (BN)\n * @param numberOfPeriod - The total number of periods in the fee schedule\n * @param periodFrequency - The frequency at which periods change (BN)\n * @param feeSchedulerMode - The mode determining how fees are calculated (0 = constant, 1 = linear, etc.)\n * @param cliffFeeNumerator - The initial fee numerator at the cliff point (BN)\n * @param reductionFactor - The factor by which fees are reduced in each period (BN)\n * @param dynamicFeeParams - Optional parameters for dynamic fee calculation\n * @param dynamicFeeParams.volatilityAccumulator - Measure of accumulated market volatility (BN)\n * @param dynamicFeeParams.binStep - Size of price bins in the liquidity distribution (BN)\n * @param dynamicFeeParams.variableFeeControl - Parameter controlling the impact of volatility (BN)\n * @returns The calculated fee numerator (BN), capped at MAX_FEE_NUMERATOR\n */\nexport function getFeeNumerator(\n currentPoint: number,\n activationPoint: BN,\n numberOfPeriod: number,\n periodFrequency: BN,\n feeSchedulerMode: number,\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n dynamicFeeParams?: {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n }\n): BN {\n if (Number(periodFrequency) == 0) {\n return cliffFeeNumerator;\n }\n const period = new BN(currentPoint).lt(activationPoint)\n ? new BN(numberOfPeriod)\n : BN.min(\n new BN(numberOfPeriod),\n new BN(currentPoint).sub(activationPoint).div(periodFrequency)\n );\n\n let feeNumerator = getBaseFeeNumerator(\n feeSchedulerMode,\n cliffFeeNumerator,\n period,\n reductionFactor\n );\n\n if (dynamicFeeParams) {\n const { volatilityAccumulator, binStep, variableFeeControl } =\n dynamicFeeParams;\n const dynamicFeeNumberator = getDynamicFeeNumerator(\n volatilityAccumulator,\n new BN(binStep),\n new BN(variableFeeControl)\n );\n feeNumerator.add(dynamicFeeNumberator);\n }\n return feeNumerator.gt(new BN(MAX_FEE_NUMERATOR))\n ? new BN(MAX_FEE_NUMERATOR)\n : feeNumerator;\n}\n\n/**\n * Determines the fee mode based on the swap direction and fee collection configuration\n *\n * @param collectFeeMode - The fee collection mode (e.g., OnlyB, BothToken)\n * @param btoA - Boolean indicating if the swap is from token B to token A\n * @returns { feeOnInput, feesOnTokenA }\n */\nfunction getFeeMode(collectFeeMode: CollectFeeMode, btoA: boolean): FeeMode {\n const feeOnInput = btoA && collectFeeMode === CollectFeeMode.OnlyB;\n const feesOnTokenA = btoA && collectFeeMode === CollectFeeMode.BothToken;\n\n return {\n feeOnInput,\n feesOnTokenA,\n };\n}\n\n/**\n * Calculates the total fee amount based on the transaction amount and fee numerator\n *\n * @param amount - The transaction amount (BN)\n * @param tradeFeeNumerator - The fee numerator to apply (BN)\n * @returns The calculated fee amount (BN), rounded up\n */\nfunction getTotalFeeOnAmount(amount: BN, tradeFeeNumerator: BN) {\n return mulDiv(\n amount,\n tradeFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n );\n}\n\n/**\n *\n * Calculates the output amount and fees for a swap operation in a concentrated liquidity pool.\n *\n * @param inAmount - The input amount of tokens the user is swapping\n * @param sqrtPrice - The current square root price of the pool\n * @param liquidity - The current liquidity available in the pool\n * @param tradeFeeNumerator - The fee numerator used to calculate trading fees\n * @param aToB - Direction of the swap: true for token A to token B, false for token B to token A\n * @param collectFeeMode - Determines how fees are collected (0: both tokens, 1: only token B)\n * @returns Object containing the actual output amount after fees and the total fee amount\n */\nexport function getSwapAmount(\n inAmount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n tradeFeeNumerator: BN,\n aToB: boolean,\n collectFeeMode: number\n): { amountOut: BN; totalFee: BN } {\n let feeMode = getFeeMode(collectFeeMode, !aToB);\n let actualInAmount = inAmount;\n let totalFee = new BN(0);\n\n if (feeMode.feeOnInput) {\n totalFee = getTotalFeeOnAmount(inAmount, tradeFeeNumerator);\n actualInAmount = inAmount.sub(totalFee);\n }\n\n // Calculate the output amount based on swap direction\n const outAmount = aToB\n ? getAmountBFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, true),\n Rounding.Down\n )\n : getAmountAFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, false),\n Rounding.Down\n );\n\n // Apply fees to output amount if fee is taken on output\n const amountOut = feeMode.feeOnInput\n ? outAmount\n : ((totalFee = getTotalFeeOnAmount(outAmount, tradeFeeNumerator)),\n outAmount.sub(totalFee));\n\n return { amountOut, totalFee };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { SCALE_OFFSET } from \"../constants\";\n\nconst MAX_EXPONENTIAL = new BN(0x80000);\n\nexport const ONE = new BN(1).shln(SCALE_OFFSET);\nconst MAX = new BN(2).pow(new BN(128)).sub(new BN(1));\n\nexport function pow(base: BN, exp: BN): BN {\n let invert = exp.isNeg();\n\n if (exp.isZero()) {\n return ONE;\n }\n\n exp = invert ? exp.abs() : exp;\n\n if (exp.gt(MAX_EXPONENTIAL)) {\n return new BN(0);\n }\n\n let squaredBase = base;\n let result = ONE;\n\n if (squaredBase.gte(result)) {\n squaredBase = MAX.div(squaredBase);\n invert = !invert;\n }\n\n if (!exp.and(new BN(0x1)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x80)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x100)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x200)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x400)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x800)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x1000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n if (result.isZero()) {\n return new BN(0);\n }\n\n if (invert) {\n result = MAX.div(result);\n }\n\n return result;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\nimport { Rounding } from \"../types\";\n\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n const { div, mod } = x.mul(y).divmod(denominator);\n\n if (rounding == Rounding.Up && !mod.isZero()) {\n return div.add(new BN(1));\n }\n return div;\n}\n\nexport function divCeil(a: BN, b: BN): BN {\n if (a.isZero()) {\n return new BN(0);\n }\n // (a + b - 1) /b\n return a.add(b.sub(new BN(1))).div(b);\n}\n\nexport function q64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n return new Decimal(num.toString())\n .div(Decimal.pow(2, 64))\n .toDecimalPlaces(decimalPlaces);\n}\n\nexport function decimalToQ64(num: Decimal): BN {\n return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Rounding } from \"../types\";\nimport { mulDiv } from \"../math\";\nimport { SCALE_OFFSET } from \"../constants\";\n\n// aToB\n// √P' = √P * L / (L + Δx*√P)\n// bToA\n// √P' = √P + Δy / L\nexport function getNextSqrtPrice(\n amount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n aToB: boolean\n): BN {\n let result: BN;\n if (aToB) {\n const product = amount.mul(sqrtPrice);\n const denominator = liquidity.add(product);\n result = mulDiv(liquidity, sqrtPrice, denominator, Rounding.Up);\n } else {\n const quotient = amount.shln(SCALE_OFFSET * 2).div(liquidity);\n result = sqrtPrice.add(quotient);\n }\n\n return result;\n}\n\n// Δa = L * (1 / √P_lower - 1 / √P_upper)\n//\n// Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower)\n//\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n//\nexport function getLiquidityDeltaFromAmountA(\n amountA: BN,\n lowerSqrtPrice: BN, // current sqrt price\n upperSqrtPrice: BN // max sqrt price\n): BN {\n const product = amountA.mul(lowerSqrtPrice).mul(upperSqrtPrice); // Q128.128\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice); // Q64.64\n\n return product.div(denominator);\n}\n\n// Δb = L (√P_upper - √P_lower)\n// L = Δb / (√P_upper - √P_lower)\nexport function getLiquidityDeltaFromAmountB(\n amountB: BN,\n lowerSqrtPrice: BN, // min sqrt price\n upperSqrtPrice: BN // current sqrt price,\n): BN {\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice);\n const product = amountB.shln(128);\n return product.div(denominator);\n}\n\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n// Δa = L * (√P_upper - √P_lower) / √P_upper * √P_lower\nexport function getAmountAFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price\n maxSqrtPrice: BN,\n rounding: Rounding\n): BN {\n // Q128.128\n const product = liquidity.mul(maxSqrtPrice.sub(currentSqrtPrice));\n // Q128.128\n const denominator = currentSqrtPrice.mul(maxSqrtPrice);\n // Q64.64\n if (rounding == Rounding.Up) {\n return product.add(denominator.sub(new BN(1))).div(denominator);\n }\n return product.div(denominator);\n}\n\n// L = Δb / (√P_upper - √P_lower)\n// Δb = L * (√P_upper - √P_lower)\nexport function getAmountBFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price,\n minSqrtPrice: BN,\n rounding: Rounding\n): BN {\n const one = new BN(1).shln(128);\n const deltaPrice = currentSqrtPrice.sub(minSqrtPrice);\n const result = liquidity.mul(deltaPrice); // Q128\n if (rounding == Rounding.Up) {\n return result.add(one.sub(new BN(1))).div(one);\n }\n return result.shrn(128);\n}\n","import {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { MAX_CU_BUFFER, MIN_CU_BUFFER } from \"../constants\";\n\nexport const getSimulationComputeUnits = async (\n connection: Connection,\n instructions: Array<TransactionInstruction>,\n payer: PublicKey,\n lookupTables: Array<AddressLookupTableAccount> | [],\n commitment: Commitment = \"confirmed\"\n): Promise<number | null> => {\n const testInstructions = [\n // Set an arbitrarily high number in simulation\n // so we can be sure the transaction will succeed\n // and get the real compute units used\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n ...instructions,\n ];\n\n const testTransaction = new VersionedTransaction(\n new TransactionMessage({\n instructions: testInstructions,\n payerKey: payer,\n // RecentBlockhash can by any public key during simulation\n // since 'replaceRecentBlockhash' is set to 'true' below\n recentBlockhash: PublicKey.default.toString(),\n }).compileToV0Message(lookupTables)\n );\n\n const rpcResponse = await connection.simulateTransaction(testTransaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n commitment,\n });\n\n if (rpcResponse?.value?.err) {\n const logs = rpcResponse.value.logs?.join(\"\\n • \") || \"No logs available\";\n throw new Error(\n `Transaction simulation failed:\\n •${logs}` +\n JSON.stringify(rpcResponse?.value?.err)\n );\n }\n\n return rpcResponse.value.unitsConsumed || null;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns The estimated compute unit usage with the buffer.\n */\nexport const getEstimatedComputeUnitUsageWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n if (!buffer) {\n buffer = 0.1;\n }\n // Avoid negative value\n buffer = Math.max(0, buffer);\n // Limit buffer to 1\n buffer = Math.min(1, buffer);\n\n const estimatedComputeUnitUsage = await getSimulationComputeUnits(\n connection,\n instructions,\n feePayer,\n []\n );\n\n if (!estimatedComputeUnitUsage) {\n return 0;\n }\n\n let extraComputeUnitBuffer = estimatedComputeUnitUsage * buffer;\n if (extraComputeUnitBuffer > MAX_CU_BUFFER) {\n extraComputeUnitBuffer = MAX_CU_BUFFER;\n } else if (extraComputeUnitBuffer < MIN_CU_BUFFER) {\n extraComputeUnitBuffer = MIN_CU_BUFFER;\n }\n\n return estimatedComputeUnitUsage + extraComputeUnitBuffer;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer and converts it to a SetComputeUnitLimit instruction.\n * If the estimated compute unit usage cannot be retrieved, returns a SetComputeUnitLimit instruction with the fallback unit.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns A SetComputeUnitLimit instruction with the estimated compute unit usage.\n */\nexport const getEstimatedComputeUnitIxWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n const units = await getEstimatedComputeUnitUsageWithBuffer(\n connection,\n instructions,\n feePayer,\n buffer\n ).catch((error) => {\n console.error(\"Error::getEstimatedComputeUnitUsageWithBuffer\", error);\n return 1_400_000;\n });\n\n return ComputeBudgetProgram.setComputeUnitLimit({ units });\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n BASIS_POINT_MAX,\n LIQUIDITY_SCALE,\n PRECISION,\n SCALE_OFFSET,\n} from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport { PoolState, PositionState } from \"../types\";\nimport { PublicKey } from \"@solana/web3.js\";\n/**\n * It takes an amount and a slippage rate, and returns the maximum amount that can be received with\n * that slippage rate\n * @param {BN} amount - The amount of tokens you want to buy.\n * @param {number} rate - The maximum percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The maximum amount of tokens that can be bought with the given amount of ETH, given the\n * slippage rate.\n */\nexport const getMaxAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 + rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * It takes an amount and a slippage rate, and returns the minimum amount that will be received after\n * slippage\n * @param {BN} amount - The amount of tokens you want to sell.\n * @param {number} rate - The percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The minimum amount that can be received after slippage is applied.\n */\nexport const getMinAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 - rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * Calculate price impact as a percentage\n * @param actualAmount Amount after slippage in token units\n * @param idealAmount Theoretical amount without slippage in token units\n * @returns Price impact as a percentage (e.g., 1.5 means 1.5%)\n */\nexport const getPriceImpact = (actualAmount: BN, idealAmount: BN): number => {\n const diff = idealAmount.sub(actualAmount);\n return new Decimal(diff.toString())\n .div(new Decimal(idealAmount.toString()))\n .mul(100)\n .toNumber();\n};\n\n// (sqrtPrice >> 64) ** 2 * 10 ** (base_decimal - quote_decimal)\nexport const getPriceFromSqrtPrice = (\n sqrtPrice: BN,\n tokenADecimal: number,\n tokenBDecimal: number\n): string => {\n const decimalSqrtPrice = new Decimal(sqrtPrice.toString());\n const price = decimalSqrtPrice\n .mul(decimalSqrtPrice)\n .mul(new Decimal(10 ** (tokenADecimal - tokenBDecimal)))\n .div(Decimal.pow(2, 128))\n .toString();\n\n return price;\n};\n\n// Original formula: price = (sqrtPrice >> 64)^2 * 10^(tokenADecimal - tokenBDecimal)\n// Reverse formula: sqrtPrice = sqrt(price / 10^(tokenADecimal - tokenBDecimal)) << 64\nexport const getSqrtPriceFromPrice = (\n price: string,\n tokenADecimal: number,\n tokenBDecimal: number\n): BN => {\n const decimalPrice = new Decimal(price);\n\n const adjustedByDecimals = decimalPrice.div(\n new Decimal(10 ** (tokenADecimal - tokenBDecimal))\n );\n\n const sqrtValue = Decimal.sqrt(adjustedByDecimals);\n\n const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64));\n\n return new BN(sqrtValueQ64.floor().toFixed());\n};\n\n// fee = totalLiquidity * feePerTokenStore\n// precision: (totalLiquidity * feePerTokenStore) >> 128\nexport const getUnClaimReward = (\n poolState: PoolState,\n positionState: PositionState\n): {\n feeTokenA: BN;\n feeTokenB: BN;\n rewards: BN[];\n} => {\n const totalPositionLiquidity = positionState.unlockedLiquidity\n .add(positionState.vestedLiquidity)\n .add(positionState.permanentLockedLiquidity);\n\n const feeAPerTokenStored = new BN(\n Buffer.from(poolState.feeAPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeAPerTokenCheckpoint).reverse()));\n\n const feeBPerTokenStored = new BN(\n Buffer.from(poolState.feeBPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeBPerTokenCheckpoint).reverse()));\n\n const feeA = totalPositionLiquidity\n .mul(feeAPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n const feeB = totalPositionLiquidity\n .mul(feeBPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n\n return {\n feeTokenA: positionState.feeAPending.add(feeA),\n feeTokenB: positionState.feeBPending.add(feeB),\n rewards:\n positionState.rewardInfos.length > 0\n ? positionState.rewardInfos.map((item) => item.rewardPendings)\n : [],\n };\n};\n","import { GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\n\nexport const positionByPoolFilter = (\n pool: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: pool.toBase58(),\n offset: 8,\n },\n };\n};\n\nexport const vestingByPositionFilter = (\n position: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: position.toBase58(),\n offset: 8,\n },\n };\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\n\n// a = L * (1/s - 1/pb)\n// b = L * (s - pa)\n// b/a = (s - pa) / (1/s - 1/pb)\n// With: x = 1 / pb and y = b/a\n// => s ^ 2 + s * (-pa + x * y) - y = 0\n// s = [(pa - xy) + √((xy - pa)² + 4y)]/2\nexport function calculateInitSqrtPrice(\n tokenAAmount: BN,\n tokenBAmount: BN,\n minSqrtPrice: BN,\n maxSqrtPrice: BN\n): BN {\n if (tokenAAmount.isZero() || tokenBAmount.isZero()) {\n throw new Error(\"Amount cannot be zero\");\n }\n\n const amountADecimal = new Decimal(tokenAAmount.toString());\n const amountBDecimal = new Decimal(tokenBAmount.toString());\n const minSqrtPriceDecimal = new Decimal(minSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n const maxSqrtPriceDecimal = new Decimal(maxSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n\n const x = new Decimal(1).div(maxSqrtPriceDecimal);\n const y = amountBDecimal.div(amountADecimal);\n const xy = x.mul(y);\n\n const paMinusXY = minSqrtPriceDecimal.sub(xy);\n const xyMinusPa = xy.sub(minSqrtPriceDecimal);\n\n const fourY = new Decimal(4).mul(y);\n\n const discriminant = xyMinusPa.mul(xyMinusPa).add(fourY);\n\n // sqrt_discriminant = √discriminant\n const sqrtDiscriminant = discriminant.sqrt();\n const result = paMinusXY\n .add(sqrtDiscriminant)\n .div(new Decimal(2))\n .mul(Decimal.pow(2, 64));\n\n return new BN(result.floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n calculateFee,\n getEpochFee,\n getTransferFeeConfig,\n MAX_FEE_BASIS_POINTS,\n Mint,\n TransferFee,\n} from \"@solana/spl-token\";\n\ninterface TransferFeeIncludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nfunction calculatePreFeeAmount(transferFee: TransferFee, postFeeAmount: BN) {\n if (postFeeAmount.isZero()) {\n return new BN(0);\n }\n\n if (transferFee.transferFeeBasisPoints === 0) {\n return postFeeAmount;\n }\n\n const maximumFee = new BN(transferFee.maximumFee.toString());\n\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return postFeeAmount.add(maximumFee);\n }\n\n const ONE_IN_BASIS_POINTS = new BN(MAX_FEE_BASIS_POINTS);\n const numerator = postFeeAmount.mul(ONE_IN_BASIS_POINTS);\n const denominator = ONE_IN_BASIS_POINTS.sub(\n new BN(transferFee.transferFeeBasisPoints)\n );\n\n const rawPreFeeAmount = numerator\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n\n if (rawPreFeeAmount.sub(postFeeAmount).gte(maximumFee)) {\n return postFeeAmount.add(maximumFee);\n }\n\n return rawPreFeeAmount;\n}\n\nfunction calculateInverseFee(transferFee: TransferFee, postFeeAmount: BN) {\n const preFeeAmount = calculatePreFeeAmount(transferFee, postFeeAmount);\n return new BN(\n calculateFee(transferFee, BigInt(preFeeAmount.toString())).toString()\n );\n}\n\nexport function calculateTransferFeeIncludedAmount(\n transferFeeExcludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeIncludedAmount {\n if (transferFeeExcludedAmount.isZero()) {\n return {\n amount: new BN(0),\n transferFee: new BN(0),\n };\n }\n\n const transferFeeConfig = getTransferFeeConfig(mint);\n\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch));\n\n const transferFee =\n epochFee.transferFeeBasisPoints == MAX_FEE_BASIS_POINTS\n ? new BN(epochFee.maximumFee.toString())\n : calculateInverseFee(epochFee, transferFeeExcludedAmount);\n\n const transferFeeIncludedAmount = transferFeeExcludedAmount.add(transferFee);\n\n return {\n amount: transferFeeIncludedAmount,\n transferFee,\n };\n}\n\ninterface TransferFeeExcludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeExcludedAmount(\n transferFeeIncludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeExcludedAmount {\n const transferFeeConfig = getTransferFeeConfig(mint);\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeIncludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const transferFeeIncludedAmountN = BigInt(\n transferFeeIncludedAmount.toString()\n );\n\n const transferFee = calculateFee(\n getEpochFee(transferFeeConfig, BigInt(currentEpoch)),\n transferFeeIncludedAmountN\n );\n\n const transferFeeExcludedAmount = new BN(\n (transferFeeIncludedAmountN - transferFee).toString()\n );\n\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(transferFee.toString()),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PositionState, VestingState } from \"../types\";\nimport { min } from \"bn.js\";\n\n/**\n * Checks if a vesting schedule is ready for full release\n * @param vestingData The vesting account data\n * @param currentPoint Current timestamp or slot\n * @returns True if the vesting is complete and all liquidity can be released\n */\nexport function isVestingComplete(\n vestingData: VestingState,\n currentPoint: BN\n): boolean {\n const cliffPoint = vestingData.cliffPoint;\n const periodFrequency = vestingData.periodFrequency;\n const numberOfPeriods = vestingData.numberOfPeriod;\n\n const endPoint = cliffPoint.add(periodFrequency.muln(numberOfPeriods));\n\n return currentPoint.gte(endPoint);\n}\n\n/**\n * Gets the total amount of liquidity in the vesting schedule\n * @param vestingData The vesting account data\n * @returns The total locked liquidity amount\n */\nexport function getTotalLockedLiquidity(vestingData: VestingState): BN {\n return vestingData.cliffUnlockLiquidity.add(\n vestingData.liquidityPerPeriod.mul(new BN(vestingData.numberOfPeriod))\n );\n}\n\n/**\n * Calculates the available liquidity to withdraw based on vesting schedule\n * @param vestingData The vesting account data\n * @param positionData The position account data\n * @param currentPoint Current timestamp or slot\n * @returns The amount of liquidity available to withdraw\n */\nexport function getAvailableVestingLiquidity(\n vestingData: VestingState,\n currentPoint: BN\n): BN {\n const {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n totalReleasedLiquidity,\n } = vestingData;\n\n if (currentPoint < cliffPoint) {\n return new BN(0);\n }\n\n if (periodFrequency.isZero()) {\n return cliffUnlockLiquidity.sub(totalReleasedLiquidity);\n }\n\n let passedPeriod = new BN(currentPoint).sub(cliffPoint).div(periodFrequency);\n\n passedPeriod = min(passedPeriod, new BN(numberOfPeriod));\n\n // total unlocked liquidity: cliff + (periods * per_period)\n const unlockedLiquidity = cliffUnlockLiquidity.add(\n passedPeriod.mul(liquidityPerPeriod)\n );\n const availableReleasingLiquidity = unlockedLiquidity.sub(\n totalReleasedLiquidity\n );\n\n return availableReleasingLiquidity;\n}\n","export * from \"./CpAmm\";\nexport * from \"./pda\";\nexport * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./helpers\";\nexport * from \"./types\";\nexport * from \"./math\";\nexport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nexport default CpAmmIDL;\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","../src/CpAmm.ts","../src/idl/cp_amm.json","../src/types.ts","../src/pda.ts","../src/constants.ts","../src/helpers/token.ts","../src/helpers/fee.ts","../src/math/feeMath.ts","../src/math/mathUtils.ts","../src/helpers/curve.ts","../src/helpers/computeUnits.ts","../src/helpers/utils.ts","../src/helpers/accountFilters.ts","../src/helpers/priceMath.ts","../src/helpers/token2022.ts","../src/helpers/vestings.ts","../src/index.ts"],"names":["Rounding","ActivationPoint","FeeSchedulerMode","CollectFeeMode","TradeDirection","ActivationType","PublicKey","BN","Decimal","NATIVE_MINT"],"mappings":"AAAA,6KAAI,MAAM,EAAE,IAAI,CAAC,GAAG;AACpB,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG;AAClD,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;AAC1C,IAAI,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG;AAC/B,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,MAAM;AACN,IAAI,CAAC;AACL,IAAI,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG;AAC9B,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,MAAM;AACN,IAAI,CAAC;AACL,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;AACpG,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,EAAE,CAAC,CAAC;AACJ,CAAC;AACD;AACA;ACtBA,2CAA4B;AAC5B,6CAAmD;AACnD,4FAAsB;ADwBtB;AACA;AE3BA,IAAA,eAAA,EAAA;AAAA,EACE,OAAA,EAAW,6CAAA;AAAA,EACX,QAAA,EAAY;AAAA,IACV,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW,OAAA;AAAA,IACX,IAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAe;AAAA,EACjB,CAAA;AAAA,EACA,YAAA,EAAgB;AAAA,IACd;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,CAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,CAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,CAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,CAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,KAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,aAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,8BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,KAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,qBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,wBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,4BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,UAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,6BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,+BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iCAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uCAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,yBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,8BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,+BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,yBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,0BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,eAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAS;AAAA,IACP;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,iBAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iCAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kCAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,6BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sCAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP;AAAA,kBACE,OAAA,EAAW;AAAA,oBACT,IAAA,EAAQ;AAAA,kBACV;AAAA,gBACF,CAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,gBACR,OAAA,EAAW;AAAA,kBACT,IAAA,EAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,mCAAA;AAAA,QACA,0DAAA;AAAA,QACA,4DAAA;AAAA,QACA,yDAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,mEAAA;AAAA,cACA,qEAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,8EAAA;AAAA,cACA,uEAAA;AAAA,cACA,8BAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,UAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP;AAAA,kBACE,OAAA,EAAW;AAAA,oBACT,IAAA,EAAQ;AAAA,kBACV;AAAA,gBACF,CAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,MAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,yBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gDAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,8EAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,6BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,MAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AF6BA;AACA;ACzsMA;AAEE;AAGA;AAAA,yCAEK;ADusMP;AACA;AG5sMO,IAAK,SAAA,kBAAL,CAAA,CAAKA,SAAAA,EAAAA,GAAL;AACL,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,IAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,SAAAA;AAAA,CAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,gBAAA,kBAAL,CAAA,CAAKC,gBAAAA,EAAAA,GAAL;AACL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,CAAA,CAAA,gBAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,iBAAA,kBAAL,CAAA,CAAKC,iBAAAA,EAAAA,GAAL;AACL,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,QAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,aAAA,EAAA,EAAA,CAAA,EAAA,EAAA,aAAA;AAFU,EAAA,OAAAA,iBAAAA;AAAA,CAAA,CAAA,CAAA,iBAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,OAAA,EAAA,EAAA,CAAA,EAAA,EAAA,OAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AHktMZ;AACA;AIrvMA;AJuvMA;AACA;AKxvMA;AACA;AAEO,IAAM,kBAAA,EAAoB,IAAI,sBAAA;AAAA,EACnC;AACF,CAAA;AAEO,IAAM,gBAAA,EAAkB,GAAA;AACxB,IAAM,aAAA,EAAe,EAAA;AACrB,IAAM,gBAAA,EAAkB,GAAA;AACxB,IAAM,kBAAA,EAAoB,GAAA;AAC1B,IAAM,gBAAA,EAAkB,GAAA;AAExB,IAAM,eAAA,EAAiB,IAAI,eAAA,CAAG,YAAY,CAAA;AAC1C,IAAM,eAAA,EAAiB,IAAI,eAAA,CAAG,+BAA+B,CAAA;AAC7D,IAAM,cAAA,EAAgB,GAAA;AACtB,IAAM,cAAA,EAAgB,GAAA;ALuvM7B;AACA;AInwMO,SAAS,WAAA,CAAY,IAAA,EAAiB,IAAA,EAAiB;AAC5D,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAC3B,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAE3B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,IAAI,EAAA,IAAM,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAA,CAAa,IAAA,EAAiB,IAAA,EAAiB;AAC7D,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAC3B,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAE3B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,IAAI,EAAA,IAAM,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAA,CAAA,EAAiC;AAC/C,EAAA,OAAOC,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AACO,SAAS,mBAAA,CAAoB,KAAA,EAAsB;AACxD,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,CAAM,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,iBAAA,CACd,MAAA,EACA,UAAA,EACA,UAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,MAClB,MAAA,CAAO,QAAA,CAAS,CAAA;AAAA,MAChB,WAAA,CAAY,UAAA,EAAY,UAAU,CAAA;AAAA,MAClC,YAAA,CAAa,UAAA,EAAY,UAAU;AAAA,IACrC,CAAA;AAAA,IACA;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,qBAAA,CAAsB,WAAA,EAAmC;AACvE,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,EAAG,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,uBAAA,CACd,SAAA,EACA,IAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,SAAA,CAAU,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAAA,IAClE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,wBAAA,CACd,IAAA,EACA,WAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,WAAW,CAAC,CAAC,CAAA;AAAA,IACzE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,6BAAA,CACd,UAAA,EACA,UAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MACnB,WAAA,CAAY,UAAA,EAAY,UAAU,CAAA;AAAA,MAClC,YAAA,CAAa,UAAA,EAAY,UAAU;AAAA,IACrC,CAAA;AAAA,IACA;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,uBAAA,CAAwB,SAAA,EAAiC;AACvE,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA;AAAA,IACjD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,6BAAA,CAA8B,QAAA,EAAgC;AAC5E,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,wBAAA,CACd,eAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,EAAG,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAA;AAAA,IAChE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AJ0uMA;AACA;AM/1MA,+DAAqB;AACrB;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AAIE;AACA;AAAA;AAGK,SAAS,eAAA,CAAgB,IAAA,EAAyB;AACvD,EAAA,OAAO,KAAA,GAAQ,EAAA,EAAI,2BAAA,EAAmB,+BAAA;AACxC;AACO,IAAM,iBAAA,EAAmB,CAC9B,UAAA,EACA,IAAA,EAAA,GACoB,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACpB,EAAA,OAAA,CAAQ,MAAM,+BAAA,UAAQ,EAAY,IAAI,CAAA,CAAA,CAAG,QAAA;AAC3C,CAAA,CAAA;AAEO,IAAM,0BAAA,EAA4B,CACvC,EAAA,EACA,EAAA,EACA,EAAA,EAAA,GAImE,EAAA,EAAA,GAAA,OAAA,CAAA,KAAA,CAAA,EAAA,CANnE,EAAA,EACA,EAAA,EACA,EAAA,EAImE,GAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CANnE,UAAA,EACA,SAAA,EACA,KAAA,EACA,MAAA,EAAmB,KAAA,EACnB,mBAAA,EAAqB,IAAA,EACrB,YAAA,EACmE;AACnE,EAAA,MAAM,UAAA,EAAY,qDAAA;AAAA,IAChB,SAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,EACF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,kCAAA,UAAW,EAAY,SAAS,CAAA;AACtC,IAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,EAAA,EAAI,KAAA,EAAU,CAAA;AAAA,EAC/C,EAAA,MAAA,CAAS,CAAA,EAAG;AACV,IAAA,GAAA,CACE,EAAA,WAAa,oCAAA,GACb,EAAA,WAAa,uCAAA,EACb;AACA,MAAA,MAAM,GAAA,EAAK,yEAAA;AAAA,QACT,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,MACF,CAAA;AAEA,MAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,GAAG,CAAA;AAAA,IACpC,EAAA,KAAO;AAEL,MAAA,OAAA,CAAQ,KAAA,CAAM,kCAAA,EAAoC,CAAC,CAAA;AACnD,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AACF,CAAA,CAAA;AAEO,IAAM,mBAAA,EAAqB,CAChC,IAAA,EACA,EAAA,EACA,MAAA,EAAA,GAC6B;AAC7B,EAAA,OAAO;AAAA,IACL,qBAAA,CAAc,QAAA,CAAS;AAAA,MACrB,UAAA,EAAY,IAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,QAAA,EAAU;AAAA,IACZ,CAAC,CAAA;AAAA,IACD,IAAI,mCAAA,CAAuB;AAAA,MACzB,IAAA,EAAM;AAAA,QACJ;AAAA,UACE,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU,KAAA;AAAA,UACV,UAAA,EAAY;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAI,UAAA,CAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AAAA,MACtC,SAAA,EAAW;AAAA,IACb,CAAC;AAAA,EACH,CAAA;AACF,CAAA;AAEO,IAAM,qBAAA,EAAuB,CAClC,KAAA,EACA,mBAAA,EAAqB,IAAA,EAAA,GAClB,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACH,EAAA,MAAM,eAAA,EAAiB,qDAAA;AAAA,IACrB,qBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,GAAA,CAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,4BAAA,EAA8B,qDAAA;AAAA,MAClC,cAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,CAAA;AAAA,MACD;AAAA,IACF,CAAA;AACA,IAAA,OAAO,2BAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA,CAAA;AAEA,SAAsB,4BAAA,CACpB,UAAA,EACA,IAAA,EAMA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACA,IAAA,MAAM,QAAA,EAAsC;AAAA,MAC1C;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,EAAA;AAAA,UACR,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS;AAAA,QACvB;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,EAAA;AAAA,UACR,KAAA,EAAO,WAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAC;AAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,iBAAA,EAAmB,MAAM,UAAA,CAAW,kBAAA;AAAA,MACxC,+BAAA;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,uBAAA,EAGD,CAAC,CAAA;AACN,IAAA,IAAA,CAAA,MAAW,EAAE,OAAA,EAAS,OAAO,EAAA,GAAK,gBAAA,EAAkB;AAClD,MAAA,MAAM,iBAAA,EAAmB,uBAAA,CAAc,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC1D,MAAA,sBAAA,CAAuB,IAAA,CAAK;AAAA,QAC1B,WAAA,EAAa,gBAAA,CAAiB,IAAA;AAAA,QAC9B,kBAAA,EAAoB;AAAA,MACtB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,sBAAA;AAAA,EACT,CAAA,CAAA;AAAA;ANuzMA;AACA;AO39MA;AP69MA;AACA;AQ99MA;AAGA,IAAM,gBAAA,EAAkB,IAAIC,eAAAA,CAAG,MAAO,CAAA;AAE/B,IAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAC9C,IAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAE7C,SAAS,GAAA,CAAI,IAAA,EAAU,GAAA,EAAa;AACzC,EAAA,IAAI,OAAA,EAAS,GAAA,CAAI,KAAA,CAAM,CAAA;AAEvB,EAAA,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,GAAA;AAE3B,EAAA,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,eAAe,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,IAAI,YAAA,EAAc,IAAA;AAClB,EAAA,IAAI,OAAA,EAAS,GAAA;AAEb,EAAA,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC3B,IAAA,YAAA,EAAc,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA;AACjC,IAAA,OAAA,EAAS,CAAC,MAAA;AAAA,EACZ;AAEA,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,MAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,MAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG;AACnB,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,GAAA,CAAI,MAAA,EAAQ;AACV,IAAA,OAAA,EAAS,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACT;AR+6MA;AACA;AStkNA;AACA,6FAAoB;AAGb,SAAS,MAAA,CAAO,CAAA,EAAO,CAAA,EAAO,WAAA,EAAiB,QAAA,EAAwB;AAC5E,EAAA,MAAM,EAAE,GAAA,EAAK,IAAI,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AAEhD,EAAA,GAAA,CAAI,SAAA,GAAA,WAAA,GAA2B,CAAC,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG;AAC5C,IAAA,OAAO,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,YAAA,CAAa,GAAA,EAAS,aAAA,EAAiC;AACrE,EAAA,OAAO,IAAI,wBAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,CAAC,CAAA,CAC9B,GAAA,CAAI,mBAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,EAAE,CAAC,CAAA,CACtB,eAAA,CAAgB,aAAa,CAAA;AAClC;AAEO,SAAS,YAAA,CAAa,GAAA,EAAkB;AAC7C,EAAA,OAAO,IAAIA,eAAAA,CAAG,GAAA,CAAI,GAAA,CAAI,mBAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAC7D;ATikNA;AACA;AUvlNA;AASO,SAAS,gBAAA,CACd,MAAA,EACA,SAAA,EACA,SAAA,EACA,IAAA,EACI;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,GAAA,CAAI,IAAA,EAAM;AACR,IAAA,MAAM,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AACpC,IAAA,MAAM,YAAA,EAAc,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AACzC,IAAA,OAAA,EAAS,MAAA,CAAO,SAAA,EAAW,SAAA,EAAW,WAAA,EAAA,UAAwB,CAAA;AAAA,EAChE,EAAA,KAAO;AACL,IAAA,MAAM,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,aAAA,EAAe,CAAC,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA;AAC5D,IAAA,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,4BAAA,CACd,OAAA,EACA,cAAA,EACA,cAAA,EACI;AACJ,EAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA;AAC9D,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,GAAA,CAAI,cAAc,CAAA;AAErD,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,OAAA,EACA,cAAA,EACA,cAAA,EACI;AACJ,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,GAAA,CAAI,cAAc,CAAA;AACrD,EAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,SAAA,EACA,gBAAA,EACA,YAAA,EACA,QAAA,EACI;AAEJ,EAAA,MAAM,QAAA,EAAU,SAAA,CAAU,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,gBAAgB,CAAC,CAAA;AAEhE,EAAA,MAAM,YAAA,EAAc,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AAErD,EAAA,GAAA,CAAI,SAAA,GAAA,UAAA,EAAyB;AAC3B,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,SAAA,EACA,gBAAA,EACA,YAAA,EACA,QAAA,EACI;AACJ,EAAA,MAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9B,EAAA,MAAM,WAAA,EAAa,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AACpD,EAAA,MAAM,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AACvC,EAAA,GAAA,CAAI,SAAA,GAAA,UAAA,EAAyB;AAC3B,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AACxB;AVqiNA;AACA;AO9mNO,SAAS,mBAAA,CACd,gBAAA,EACA,iBAAA,EACA,MAAA,EACA,eAAA,EACI;AACJ,EAAA,IAAI,YAAA;AACJ,EAAA,GAAA,CAAI,iBAAA,GAAA,cAAA,EAA6C;AAC/C,IAAA,aAAA,EAAe,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,eAAe,CAAC,CAAA;AAAA,EAClE,EAAA,KAAO;AACL,IAAA,MAAM,IAAA,EAAM,eAAA,CAAgB,IAAA,CAAK,YAAY,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,eAAe,CAAC,CAAA;AAC1E,IAAA,MAAM,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,MAAM,OAAA,EAAS,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC/B,IAAA,aAAA,EAAe,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO,YAAA;AACT;AAUO,SAAS,sBAAA,CACd,qBAAA,EACA,OAAA,EACA,kBAAA,EACI;AACJ,EAAA,GAAA,CAAI,kBAAA,CAAmB,MAAA,CAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,MAAM,aAAA,EAAe,qBAAA,CAClB,GAAA,CAAI,IAAIA,eAAAA,CAAG,OAAO,CAAC,CAAA,CACnB,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAChB,EAAA,MAAM,KAAA,EAAO,kBAAA,CAAmB,GAAA,CAAI,YAAY,CAAA;AAEhD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAIA,eAAAA,CAAG,WAAc,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAe,CAAC,CAAA;AACrE;AAkBO,SAAS,eAAA,CACd,YAAA,EACA,eAAA,EACA,cAAA,EACA,eAAA,EACA,gBAAA,EACA,iBAAA,EACA,eAAA,EACA,gBAAA,EAKI;AACJ,EAAA,GAAA,CAAI,MAAA,CAAO,eAAe,EAAA,GAAK,CAAA,EAAG;AAChC,IAAA,OAAO,iBAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,EAAS,IAAIA,eAAAA,CAAG,YAAY,CAAA,CAAE,EAAA,CAAG,eAAe,EAAA,EAClD,IAAIA,eAAAA,CAAG,cAAc,EAAA,EACrBA,UAAAA,CAAG,GAAA;AAAA,IACD,IAAIA,eAAAA,CAAG,cAAc,CAAA;AAAA,IACrB,IAAIA,eAAAA,CAAG,YAAY,CAAA,CAAE,GAAA,CAAI,eAAe,CAAA,CAAE,GAAA,CAAI,eAAe;AAAA,EAC/D,CAAA;AAEJ,EAAA,IAAI,aAAA,EAAe,mBAAA;AAAA,IACjB,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,CAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,EAAE,qBAAA,EAAuB,OAAA,EAAS,mBAAmB,EAAA,EACzD,gBAAA;AACF,IAAA,MAAM,qBAAA,EAAuB,sBAAA;AAAA,MAC3B,qBAAA;AAAA,MACA,IAAIA,eAAAA,CAAG,OAAO,CAAA;AAAA,MACd,IAAIA,eAAAA,CAAG,kBAAkB;AAAA,IAC3B,CAAA;AACA,IAAA,aAAA,EAAe,YAAA,CAAa,GAAA,CAAI,oBAAoB,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,YAAA,CAAa,EAAA,CAAG,IAAIA,eAAAA,CAAG,iBAAiB,CAAC,EAAA,EAC5C,IAAIA,eAAAA,CAAG,iBAAiB,EAAA,EACxB,YAAA;AACN;AASA,SAAS,UAAA,CAAW,cAAA,EAAgC,IAAA,EAAwB;AAC1E,EAAA,MAAM,WAAA,EAAa,KAAA,GAAQ,eAAA,IAAA,aAAA;AAC3B,EAAA,MAAM,aAAA,EAAe,KAAA,GAAQ,eAAA,IAAA,iBAAA;AAE7B,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF;AASA,SAAS,mBAAA,CAAoB,MAAA,EAAY,iBAAA,EAAuB;AAC9D,EAAA,OAAO,MAAA;AAAA,IACL,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,IAAIA,eAAAA,CAAG,eAAe,CAAA;AAAA,IAAA;AAAA,EAExB,CAAA;AACF;AAcO,SAAS,aAAA,CACd,QAAA,EACA,SAAA,EACA,SAAA,EACA,iBAAA,EACA,IAAA,EACA,cAAA,EACiC;AACjC,EAAA,IAAI,QAAA,EAAU,UAAA,CAAW,cAAA,EAAgB,CAAC,IAAI,CAAA;AAC9C,EAAA,IAAI,eAAA,EAAiB,QAAA;AACrB,EAAA,IAAI,SAAA,EAAW,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAEvB,EAAA,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY;AACtB,IAAA,SAAA,EAAW,mBAAA,CAAoB,QAAA,EAAU,iBAAiB,CAAA;AAC1D,IAAA,eAAA,EAAiB,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAAA,EACxC;AAGA,EAAA,MAAM,UAAA,EAAY,KAAA,EACd,4BAAA;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA,CAAiB,cAAA,EAAgB,SAAA,EAAW,SAAA,EAAW,IAAI,CAAA;AAAA,IAAA;AAAA,EAE7D,EAAA,EACA,4BAAA;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA,CAAiB,cAAA,EAAgB,SAAA,EAAW,SAAA,EAAW,KAAK,CAAA;AAAA,IAAA;AAAA,EAE9D,CAAA;AAGJ,EAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,WAAA,EACtB,UAAA,EAAA,CACE,SAAA,EAAW,mBAAA,CAAoB,SAAA,EAAW,iBAAiB,CAAA,EAC7D,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,CAAA;AAE1B,EAAA,OAAO,EAAE,SAAA,EAAW,SAAS,CAAA;AAC/B;APqgNA;AACA;AWttNA;AAGE;AAEA;AAEA;AACA;AAAA;AAIK,IAAM,0BAAA,EAA4B,CACvC,UAAA,EACA,YAAA,EACA,KAAA,EACA,YAAA,EACA,WAAA,EAAyB,WAAA,EAAA,GACE,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AAlB7B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBE,EAAA,MAAM,iBAAA,EAAmB;AAAA;AAAA;AAAA;AAAA,IAIvB,4BAAA,CAAqB,mBAAA,CAAoB,EAAE,KAAA,EAAO,KAAU,CAAC,CAAA;AAAA,IAC7D,GAAG;AAAA,EACL,CAAA;AAEA,EAAA,MAAM,gBAAA,EAAkB,IAAI,iCAAA;AAAA,IAC1B,IAAI,+BAAA,CAAmB;AAAA,MACrB,YAAA,EAAc,gBAAA;AAAA,MACd,QAAA,EAAU,KAAA;AAAA;AAAA;AAAA,MAGV,eAAA,EAAiBD,iBAAAA,CAAU,OAAA,CAAQ,QAAA,CAAS;AAAA,IAC9C,CAAC,CAAA,CAAE,kBAAA,CAAmB,YAAY;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,YAAA,EAAc,MAAM,UAAA,CAAW,mBAAA,CAAoB,eAAA,EAAiB;AAAA,IACxE,sBAAA,EAAwB,IAAA;AAAA,IACxB,SAAA,EAAW,KAAA;AAAA,IACX;AAAA,EACF,CAAC,CAAA;AAED,EAAA,GAAA,CAAA,CAAI,GAAA,EAAA,YAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,WAAA,CAAa,KAAA,EAAA,GAAb,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAoB,GAAA,EAAK;AAC3B,IAAA,MAAM,KAAA,EAAA,CAAA,CAAO,GAAA,EAAA,WAAA,CAAY,KAAA,CAAM,IAAA,EAAA,GAAlB,KAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAwB,IAAA,CAAK,aAAA,CAAA,EAAA,GAAa,mBAAA;AACvD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA;AAAA,QAAA,EAAsC,IAAI,CAAA,EAAA;AAE5C,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAUa;AAME,EAAA;AACF,IAAA;AACX,EAAA;AAES,EAAA;AAEA,EAAA;AAEH,EAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACC,IAAA;AACH,EAAA;AAEK,EAAA;AACI,IAAA;AACT,EAAA;AAEI,EAAA;AACA,EAAA;AACF,IAAA;AACS,EAAA;AACT,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAWa;AAML,EAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACO,EAAA;AACC,IAAA;AACD,IAAA;AACR,EAAA;AAEM,EAAA;AACT;AXqqNe;AACA;AYjyNNC;AAEFC;AAWM;AACL,EAAA;AACC,EAAA;AACT;AASa;AACL,EAAA;AACC,EAAA;AACT;AAQa;AACE,EAAA;AACFA,EAAAA;AAIb;AAGa;AAKL,EAAA;AACA,EAAA;AAMC,EAAA;AACT;AAGa;AAKL,EAAA;AAEA,EAAA;AACAA,IAAAA;AACN,EAAA;AAEM,EAAA;AAEA,EAAA;AAEKD,EAAAA;AACb;AAIa;AAQL,EAAA;AAIA,EAAA;AACG,IAAA;AACCA,EAAAA;AAEJ,EAAA;AACG,IAAA;AACCA,EAAAA;AAEG,EAAA;AAGA,EAAA;AAIN,EAAA;AACM,IAAA;AACA,IAAA;AAET,IAAA;AAGJ,EAAA;AACF;AZ0tNe;AACA;Aa70NF;AAGJ,EAAA;AACG,IAAA;AACC,MAAA;AACC,MAAA;AACV,IAAA;AACF,EAAA;AACF;AAEa;AAGJ,EAAA;AACG,IAAA;AACC,MAAA;AACC,MAAA;AACV,IAAA;AACF,EAAA;AACF;Ab00Ne;AACA;Acj2NNA;AACFC;AAQS;AAMV,EAAA;AACQ,IAAA;AACZ,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AACI,IAAA;AACV,EAAA;AACM,EAAA;AACI,IAAA;AACV,EAAA;AAEU,EAAA;AACA,EAAA;AACG,EAAA;AAEP,EAAA;AACA,EAAA;AAEA,EAAA;AAEA,EAAA;AAGA,EAAA;AACA,EAAA;AAKKD,EAAAA;AACb;Ad40Ne;AACA;Ae53NNA;AACT;AACE;AACA;AACA;AACA;AAGK;AAOE;AACH,EAAA;AACSA,IAAAA;AACb,EAAA;AAEI,EAAA;AACK,IAAA;AACT,EAAA;AAEM,EAAA;AAEF,EAAA;AACK,IAAA;AACT,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AACG,IAAA;AACT,EAAA;AAEM,EAAA;AAKF,EAAA;AACK,IAAA;AACT,EAAA;AAEO,EAAA;AACT;AAES;AACD,EAAA;AACKA,EAAAA;AACT,IAAA;AACF,EAAA;AACF;AAEgB;AAKV,EAAA;AACK,IAAA;AACG,MAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AAEF,EAAA;AACK,IAAA;AACG,MAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AAEA,EAAA;AAKA,EAAA;AAEC,EAAA;AACG,IAAA;AACR,IAAA;AACF,EAAA;AACF;AAOgB;AAKR,EAAA;AACF,EAAA;AACK,IAAA;AACG,MAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACJ,IAAA;AACF,EAAA;AAEM,EAAA;AACJ,IAAA;AACA,IAAA;AACF,EAAA;AAEM,EAAA;AACH,IAAA;AACH,EAAA;AAEO,EAAA;AACG,IAAA;AACR,IAAA;AACF,EAAA;AACF;Af+0Ne;AACA;AgB98NNA;AAEA;AAQO;AAIR,EAAA;AACA,EAAA;AACA,EAAA;AAEA,EAAA;AAEC,EAAA;AACT;AAOgB;AACP,EAAA;AACL,IAAA;AACF,EAAA;AACF;AASgB;AAIR,EAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACE,EAAA;AAEA,EAAA;AACSA,IAAAA;AACb,EAAA;AAEI,EAAA;AACK,IAAA;AACT,EAAA;AAEI,EAAA;AAEJ,EAAA;AAGM,EAAA;AACJ,IAAA;AACF,EAAA;AACM,EAAA;AACJ,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AhB26Ne;AACA;AC95NN;AAKF;AAGO,EAAA;AACL,IAAA;AACH,MAAA;AACD,IAAA;AACI,IAAA;AACP,EAAA;AAAA;AAAA;AAAA;AAAA;AAMa,EAAA;AACJ,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAac,EAAA;AAUX,IAAA;AACK,MAAA;AACA,MAAA;AACF,QAAA;AACA,QAAA;AACA,MAAA;AACF,QAAA;AACO,UAAA;AACL,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACA,QAAA;AACO,UAAA;AACL,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACD,MAAA;AACD,MAAA;AACA,MAAA;AAES,MAAA;AACX,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQQ,EAAA;AAIC,IAAA;AACL,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQc,EAAA;AAEqB,IAAA;AAC3B,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACG,MAAA;AAEH,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQc,EAAA;AAEqB,IAAA;AAC3B,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACG,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQc,EAAA;AAEqB,IAAA;AAC3B,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACG,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQc,EAAA;AAEqB,IAAA;AAC3B,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEG,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOc,EAAA;AAE4B,IAAA;AAChC,MAAA;AAGJ,MAAA;AACK,QAAA;AACT,MAAA;AAEO,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACE,UAAA;AACE,YAAA;AACA,YAAA;AACA,YAAA;AACF,UAAA;AACD,QAAA;AAEF,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQc,EAAA;AAEuB,IAAA;AAC7B,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEI,MAAA;AACA,MAAA;AAEF,MAAA;AACA,MAAA;AAEA,MAAA;AAGA,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEH,MAAA;AAGM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEH,MAAA;AAEM,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AACD,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAA0D,IAAA;AACxD,MAAA;AACJ,QAAA;AACF,MAAA;AACA,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAoD,IAAA;AAClD,MAAA;AACN,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAgE,IAAA;AAC9D,MAAA;AACJ,QAAA;AACF,MAAA;AACA,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAMM,EAAA;AAEJ,IAAA;AACM,MAAA;AAEC,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAMM,EAAA;AAEJ,IAAA;AACM,MAAA;AAEC,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAMM,EAAA;AAKJ,IAAA;AACM,MAAA;AAEC,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAKJ,IAAA;AACO,MAAA;AACL,QAAA;AACD,MAAA;AACH,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQM,EAAA;AASJ,IAAA;AACM,MAAA;AACC,MAAA;AAAyB,QAAA;AAEhC,MAAA;AACF,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAMJ,IAAA;AACM,MAAA;AACC,QAAA;AACL,QAAA;AACF,MAAA;AACI,MAAA;AACK,QAAA;AACT,MAAA;AAEM,MAAA;AAA8C,QAAA;AAEpD,MAAA;AAEM,MAAA;AACJ,QAAA;AACF,MAAA;AACM,MAAA;AAEI,QAAA;AACD,QAAA;AAEE,QAAA;AACL,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAED,MAAA;AAGH,MAAA;AACQ,QAAA;AAIA,QAAA;AAIC,QAAA;AACR,MAAA;AAEM,MAAA;AACT,IAAA;AAAA,EAAA;AAEM,EAAA;AAKJ,IAAA;AACM,MAAA;AACJ,QAAA;AACD,MAAA;AAEM,MAAA;AACT,IAAA;AAAA,EAAA;AAEA,EAAA;AACQ,IAAA;AACK,MAAA;AACX,IAAA;AAEO,IAAA;AACT,EAAA;AAEA,EAAA;AACS,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA,EAAA;AAKM,IAAA;AAEO,MAAA;AACA,QAAA;AACL,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AAIA,MAAA;AACO,QAAA;AACH,UAAA;AACE,YAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAES,IAAA;AACX,EAAA;AAEkB,EAAA;AAAmC,IAAA;AAC7C,MAAA;AACC,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOS,EAAA;AAQD,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AACE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AACE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AACE,IAAA;AAEF,IAAA;AACA,IAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACJ,IAAA;AACM,IAAA;AACA,IAAA;AAEF,IAAA;AACA,IAAA;AACM,MAAA;AACR,MAAA;AACF,IAAA;AAEM,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEQ,IAAA;AACN,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEI,IAAA;AACA,IAAA;AACF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACJ,IAAA;AAEM,IAAA;AACJ,MAAA;AACA,MAAA;AACF,IAAA;AAEO,IAAA;AACL,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,EAAA;AACQ,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AAEE,IAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,IAAA;AAEI,IAAA;AAEF,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AAEI,QAAA;AACA,QAAA;AACA,QAAA;AAAA,QAAA;AAEF,MAAA;AAEJ,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AAEI,QAAA;AACA,QAAA;AACA,QAAA;AAAA,QAAA;AAEF,MAAA;AACJ,IAAA;AAEE,IAAA;AACA,IAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AAEF,IAAA;AAEG,IAAA;AACL,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,EAAA;AACQ,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AACE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AAAA,MAAA;AAEF,IAAA;AACM,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AAAA,MAAA;AAEF,IAAA;AAEO,IAAA;AACL,MAAA;AACA,MAAA;AAEM,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEN,MAAA;AAEM,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAER,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,EAAA;AACQ,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AAEC,IAAA;AACG,MAAA;AACR,IAAA;AAEM,IAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,IAAA;AAEE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,EAAA;AAGQ,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AAEA,IAAA;AACI,MAAA;AACR,IAAA;AAEM,IAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,IAAA;AAEE,IAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,IAAA;AAEE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEM,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEM,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AAEM,IAAA;AACJ,MAAA;AACA,MAAA;AACF,IAAA;AAEO,IAAA;AACL,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOiB,EAAA;AAAqC,IAAA;AAC9C,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEM,MAAA;AACJ,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAII,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAIH,IAAA;AACK,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACA,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AACM,MAAA;AACJ,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAIM,MAAA;AACX,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAwD,IAAA;AACpD,MAAA;AAEF,MAAA;AACA,MAAA;AAEC,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOmB,EAAA;AAAuC,IAAA;AAClD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCE,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEM,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEK,MAAA;AACN,MAAA;AACM,QAAA;AACJ,QAAA;AACI,QAAA;AACN,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAA0D,IAAA;AACxD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AAEF,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACD,QAAA;AACH,QAAA;AAEF,MAAA;AAEO,MAAA;AAEH,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAgE,IAAA;AAC9D,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AAEF,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACD,QAAA;AACH,QAAA;AAEF,MAAA;AAEM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEG,MAAA;AACN,MAAA;AACM,QAAA;AACJ,QAAA;AACI,QAAA;AACN,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO0C,EAAA;AAAA,IAAA;AAClC,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEG,MAAA;AACL,QAAA;AAEG,MAAA;AAGC,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEO,MAAA;AAEH,QAAA;AACA,QAAA;AAED,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOmB,EAAA;AAAuC,IAAA;AAClD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACE,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACO,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAA8D,IAAA;AAC1D,MAAA;AAGD,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAwD,IAAA;AACtD,MAAA;AAEC,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAA4D,IAAA;AAC1D,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEG,MAAA;AACN,MAAA;AACM,QAAA;AACJ,QAAA;AACI,QAAA;AACN,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAEM,EAAA;AAAsD,IAAA;AAClD,MAAA;AAGF,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEM,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaM,EAAA;AAEO,IAAA;AACL,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEI,MAAA;AACA,MAAA;AAEA,MAAA;AACN,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEK,MAAA;AACG,QAAA;AACR,MAAA;AAEM,MAAA;AACA,MAAA;AAEA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAGI,MAAA;AACI,QAAA;AAEF,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACD,QAAA;AAEH,QAAA;AAEF,MAAA;AAEM,MAAA;AAEF,MAAA;AACF,QAAA;AACF,MAAA;AAGM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEH,MAAA;AAEI,MAAA;AACF,QAAA;AACF,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcM,EAAA;AAAsD,IAAA;AACpD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEI,MAAA;AACN,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEK,MAAA;AACG,QAAA;AACR,MAAA;AAEM,MAAA;AACE,MAAA;AAEF,MAAA;AACA,MAAA;AAEA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEH,MAAA;AACCA,QAAAA;AAEF,MAAA;AACM,QAAA;AACN,QAAA;AACF,MAAA;AAEI,MAAA;AAEA,MAAA;AAEI,QAAA;AACH,UAAA;AACC,YAAA;AACE,cAAA;AACA,cAAA;AACF,YAAA;AACA,YAAA;AACF,UAAA;AACIF,UAAAA;AACN,QAAA;AAEA,QAAA;AACE,UAAA;AACF,QAAA;AAEM,QAAA;AAEF,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACD,QAAA;AACH,QAAA;AAEF,MAAA;AAEM,MAAA;AAEF,MAAA;AACF,QAAA;AACF,MAAA;AAGM,MAAA;AAEF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAEH,MAAA;AAGM,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACD,MAAA;AAED,MAAA;AAEI,MAAA;AACF,QAAA;AACF,MAAA;AAEO,MAAA;AACT,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAoE,IAAA;AAChE,MAAA;AACD,MAAA;AAGH,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAAgE,IAAA;AAC5D,MAAA;AACD,MAAA;AAGH,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOiB,EAAA;AAAqC,IAAA;AAC5C,MAAA;AAEF,MAAA;AACA,MAAA;AACE,MAAA;AACF,MAAA;AAEA,MAAA;AAEE,MAAA;AAEC,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEF,MAAA;AAIS,MAAA;AACD,QAAA;AACJ,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAEO,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AACL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAEO,IAAA;AACH,MAAA;AACF,MAAA;AAEA,MAAA;AACE,MAAA;AACF,MAAA;AAEA,MAAA;AACA,MAAA;AACE,MAAA;AAEC,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACF,MAAA;AAGS,MAAA;AACD,QAAA;AACN,QAAA;AACF,MAAA;AAEO,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOM,EAAA;AAA0D,IAAA;AACtD,MAAA;AACF,MAAA;AACA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACA,MAAA;AAEA,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AAEM,MAAA;AAEJ,MAAA;AACE,QAAA;AACA,QAAA;AACA,MAAA;AAEI,QAAA;AACN,QAAA;AACF,MAAA;AAEO,MAAA;AAGH,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOkB,EAAA;AAAsC,IAAA;AAChD,MAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACE,MAAA;AAEE,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACE,MAAA;AAEC,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACF,MAAA;AACF,MAAA;AAEI,MAAA;AACI,QAAA;AACN,QAAA;AACF,MAAA;AACO,MAAA;AAGG,QAAA;AACN,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACO,QAAA;AACP,QAAA;AAED,MAAA;AAGL,IAAA;AAAA,EAAA;AACF;ADsjNe;AACA;AiBzzRR;AjB2zRQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","sourcesContent":[null,"import { Program, BN } from \"@coral-xyz/anchor\";\nimport { NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport invariant from \"invariant\";\n\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport {\n Connection,\n Transaction,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n AccountMeta,\n} from \"@solana/web3.js\";\nimport {\n AddLiquidityParams,\n AmmProgram,\n BuildAddLiquidityParams,\n BuildLiquidatePositionInstructionParams,\n BuildRemoveAllLiquidityInstructionParams,\n ClaimPartnerFeeParams,\n ClaimPositionFeeInstructionParams,\n ClaimPositionFeeParams,\n ClaimRewardParams,\n ClosePositionInstructionParams,\n ClosePositionParams,\n ConfigState,\n CreatePoolParams,\n CreatePositionParams,\n DepositQuote,\n DynamicFeeParams,\n FundRewardParams,\n GetDepositQuoteParams,\n GetQuoteParams,\n GetWithdrawQuoteParams,\n InitializeCustomizeablePoolParams,\n LockPositionParams,\n MergePositionParams,\n PermanentLockParams,\n PoolState,\n PositionState,\n PreparedPoolCreation,\n PreparePoolCreationParams,\n PreparePoolCreationSingleSide,\n RefreshVestingParams,\n RemoveAllLiquidityAndClosePositionParams,\n RemoveAllLiquidityParams,\n RemoveLiquidityParams,\n Rounding,\n SwapParams,\n TxBuilder,\n UpdateRewardDurationParams,\n UpdateRewardFunderParams,\n VestingState,\n WithdrawIneligibleRewardParams,\n WithdrawQuote,\n} from \"./types\";\nimport {\n deriveCustomizablePoolAddress,\n derivePoolAddress,\n derivePoolAuthority,\n derivePositionAddress,\n derivePositionNftAccount,\n deriveTokenBadgeAddress,\n deriveTokenVaultAddress,\n} from \"./pda\";\n\nimport {\n getFeeNumerator,\n getOrCreateATAInstruction,\n getTokenProgram,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n getSwapAmount,\n getLiquidityDeltaFromAmountA,\n getLiquidityDeltaFromAmountB,\n getMinAmountWithSlippage,\n getPriceImpact,\n positionByPoolFilter,\n vestingByPositionFilter,\n calculateInitSqrtPrice,\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n getAmountBFromLiquidityDelta,\n getAmountAFromLiquidityDelta,\n getAllUserPositionNftAccount,\n getAvailableVestingLiquidity,\n isVestingComplete,\n} from \"./helpers\";\nimport { min } from \"bn.js\";\n\n/**\n * CpAmm SDK class to interact with the Dynamic CP-AMM\n */\nexport class CpAmm {\n _program: AmmProgram;\n private poolAuthority: PublicKey;\n constructor(connection: Connection) {\n this._program = new Program(CpAmmIDL as CpAmmTypes, {\n connection: connection,\n });\n this.poolAuthority = derivePoolAuthority();\n }\n\n /**\n * Returns the Anchor program instance.\n * @returns The AmmProgram instance.\n */\n getProgram() {\n return this._program;\n }\n\n /**\n * Prepares token accounts for a transaction by retrieving or creating associated token accounts.\n * @private\n * @param {PublicKey} owner - The owner of the token accounts\n * @param {PublicKey} tokenAMint - Mint address of token A\n * @param {PublicKey} tokenBMint - Mint address of token B\n * @param {PublicKey} tokenAProgram - Program ID for token A (Token or Token2022)\n * @param {PublicKey} tokenBProgram - Program ID for token B (Token or Token2022)\n * @returns {Promise<{tokenAAta: PublicKey, tokenBAta: PublicKey, instructions: TransactionInstruction[]}>}\n * The token account addresses and any instructions needed to create them\n */\n private async prepareTokenAccounts(\n owner: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenAProgram: PublicKey,\n tokenBProgram: PublicKey\n ): Promise<{\n tokenAAta: PublicKey;\n tokenBAta: PublicKey;\n instructions: TransactionInstruction[];\n }> {\n const instructions: TransactionInstruction[] = [];\n const [\n { ataPubkey: tokenAAta, ix: createInputTokenAccountIx },\n { ataPubkey: tokenBAta, ix: createOutputTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenAMint,\n owner,\n owner,\n true,\n tokenAProgram\n ),\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenBMint,\n owner,\n owner,\n true,\n tokenBProgram\n ),\n ]);\n createInputTokenAccountIx && instructions.push(createInputTokenAccountIx);\n createOutputTokenAccountIx && instructions.push(createOutputTokenAccountIx);\n\n return { tokenAAta, tokenBAta, instructions };\n }\n\n /**\n * Derives token badge account metadata\n * @param tokenAMint - Public key of token A mint\n * @param tokenBMint - Public key of token B mint\n * @returns Array of account metadata for token badges\n */\n private getTokenBadgeAccounts(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n ): AccountMeta[] {\n return [\n {\n pubkey: deriveTokenBadgeAddress(tokenAMint),\n isWritable: false,\n isSigner: false,\n },\n {\n pubkey: deriveTokenBadgeAddress(tokenBMint),\n isWritable: false,\n isSigner: false,\n },\n ];\n }\n\n /**\n * Builds an instruction to add liquidity to a position.\n * @private\n * @param {BuildAddLiquidityParams} params - Parameters for adding liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to add liquidity\n */\n private async buildAddLiquidityInstruction(\n params: BuildAddLiquidityParams\n ): Promise<TransactionInstruction> {\n const {\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n return await this._program.methods\n .addLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to remove all liquidity from a position.\n * @private\n * @param {BuildRemoveAllLiquidityInstructionParams} params - Parameters for removing all liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to remove all liquidity\n */\n private async buildRemoveAllLiquidityInstruction(\n params: BuildRemoveAllLiquidityInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .removeAllLiquidity(tokenAAmountThreshold, tokenBAmountThreshold)\n .accountsPartial({\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to claim fees accumulated by a position.\n * @private\n * @param {ClaimPositionFeeInstructionParams} params - Parameters for claiming position fees\n * @returns {Promise<TransactionInstruction>} Instruction to claim position fees\n */\n private async buildClaimPositionFeeInstruction(\n params: ClaimPositionFeeInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .claimPositionFee()\n .accountsPartial({\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to close a position.\n * @private\n * @param {ClosePositionInstructionParams} params - Parameters for closing a position\n * @returns {Promise<TransactionInstruction>} Instruction to close the position\n */\n private async buildClosePositionInstruction(\n params: ClosePositionInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n positionNftMint,\n } = params;\n\n return await this._program.methods\n .closePosition()\n .accountsPartial({\n positionNftMint,\n positionNftAccount,\n pool,\n position,\n poolAuthority,\n rentReceiver: owner,\n owner,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to refresh vesting for a position\n * @param params Parameters required for the refresh vesting instruction\n * @returns Transaction instruction or null if no vestings to refresh\n */\n private async buildRefreshVestingInstruction(\n params: RefreshVestingParams\n ): Promise<TransactionInstruction | null> {\n const { owner, position, positionNftAccount, pool, vestingAccounts } =\n params;\n\n if (vestingAccounts.length == 0) {\n return null;\n }\n\n return await this._program.methods\n .refreshVesting()\n .accountsPartial({\n position,\n positionNftAccount,\n pool,\n owner,\n })\n .remainingAccounts(\n vestingAccounts.map((pubkey: PublicKey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n })\n )\n .instruction();\n }\n\n /**\n * Helper function that builds instructions to claim fees, remove liquidity, and close a position\n * @param {BuildLiquidatePositionInstructionParams} params - Parameters for liquidating a position\n * @returns {Promise<TransactionInstruction[]>} Array of instructions\n * @private\n */\n private async buildLiquidatePositionInstruction(\n params: BuildLiquidatePositionInstructionParams\n ): Promise<TransactionInstruction[]> {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n\n const { nftMint: positionNftMint, pool } = positionState;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const instructions: TransactionInstruction[] = [];\n\n // 1. claim position fee\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(claimPositionFeeInstruction);\n\n // 2. remove all liquidity\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(removeAllLiquidityInstruction);\n // 3. close position\n const closePositionInstruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n instructions.push(closePositionInstruction);\n\n return instructions;\n }\n\n /**\n * Fetches the Config state of the program.\n * @param config - Public key of the config account.\n * @returns Parsed ConfigState.\n */\n async fetchConfigState(config: PublicKey): Promise<ConfigState> {\n const configState = await this._program.account.config.fetchNullable(\n config\n );\n invariant(configState, `Config account: ${config} not found`);\n\n return configState;\n }\n\n /**\n * Fetches the Pool state.\n * @param pool - Public key of the pool.\n * @returns Parsed PoolState.\n */\n async fetchPoolState(pool: PublicKey): Promise<PoolState> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n invariant(poolState, `Pool account: ${pool} not found`);\n\n return poolState;\n }\n\n /**\n * Fetches the Position state.\n * @param position - Public key of the position.\n * @returns Parsed PositionState.\n */\n async fetchPositionState(position: PublicKey): Promise<PositionState> {\n const positionState = await this._program.account.position.fetchNullable(\n position\n );\n invariant(positionState, `Position account: ${position} not found`);\n\n return positionState;\n }\n\n /**\n * Retrieves all config accounts.\n * @returns Array of config public keys and their states.\n */\n async getAllConfigs(): Promise<\n Array<{ publicKey: PublicKey; account: ConfigState }>\n > {\n const configAccounts = await this._program.account.config.all();\n\n return configAccounts;\n }\n\n /**\n * Retrieves all pool accounts.\n * @returns Array of pool public keys and their states.\n */\n async getAllPools(): Promise<\n Array<{ publicKey: PublicKey; account: PoolState }>\n > {\n const poolAccounts = await this._program.account.pool.all();\n\n return poolAccounts;\n }\n\n /**\n * Retrieves all position accounts.\n * @returns Array of position public keys and their states.\n */\n async getAllPositions(): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n const poolAccounts = await this._program.account.position.all();\n\n return poolAccounts;\n }\n\n /**\n * Gets all positions a specific pool.\n * @param pool - Public key of the pool.\n * @returns List of user positions for the pool.\n */\n async getAllPositionsByPool(pool: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n return await this._program.account.position.all([\n positionByPoolFilter(pool),\n ]);\n }\n\n /**\n * Gets all positions of a user for a specific pool.\n * @param pool - Public key of the pool.\n * @param user - Public key of the user.\n * @returns List of user positions for the pool.\n */\n async getUserPositionByPool(\n pool: PublicKey,\n user: PublicKey\n ): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const allUserPositions = await this.getPositionsByUser(user);\n return allUserPositions.filter((position) =>\n position.positionState.pool.equals(pool)\n );\n }\n\n /**\n * Gets all positions of a user across all pools.\n * @param user - Public key of the user.\n * @returns Array of user positions already sorted by liquidity\n */\n async getPositionsByUser(user: PublicKey): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const userPositionAccounts = await getAllUserPositionNftAccount(\n this._program.provider.connection,\n user\n );\n if (userPositionAccounts.length === 0) {\n return [];\n }\n\n const positionAddresses = userPositionAccounts.map((account) =>\n derivePositionAddress(account.positionNft)\n );\n\n const positionStates = await this._program.account.position.fetchMultiple(\n positionAddresses\n );\n const positionResult = userPositionAccounts\n .map((account, index) => {\n const positionState = positionStates[index];\n if (!positionState) return null;\n\n return {\n positionNftAccount: account.positionNftAccount,\n position: positionAddresses[index],\n positionState,\n };\n })\n .filter(Boolean);\n\n // in-place sort\n positionResult.sort((a, b) => {\n const totalLiquidityA = a.positionState.vestedLiquidity\n .add(a.positionState.permanentLockedLiquidity)\n .add(a.positionState.unlockedLiquidity);\n\n const totalLiquidityB = b.positionState.vestedLiquidity\n .add(b.positionState.permanentLockedLiquidity)\n .add(b.positionState.unlockedLiquidity);\n\n return totalLiquidityB.cmp(totalLiquidityA);\n });\n\n return positionResult;\n }\n\n async getAllVestingsByPosition(position: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: VestingState;\n }>\n > {\n const vestings = await this._program.account.vesting.all([\n vestingByPositionFilter(position),\n ]);\n\n return vestings;\n }\n\n isLockedPosition(position: PositionState): boolean {\n const totalLockedLiquidity = position.vestedLiquidity.add(\n position.permanentLockedLiquidity\n );\n\n return totalLockedLiquidity.gtn(0);\n }\n\n isPermanentLockedPosition(positionState: PositionState): boolean {\n return positionState.permanentLockedLiquidity.gtn(0);\n }\n\n /**\n * Checks if a position can be unlocked based on its locking state and vesting schedules.\n *\n * This method evaluates whether a position is eligible for operations that require\n * unlocked liquidity, such as removing all liquidity or closing the position. It checks both\n * permanent locks and time-based vesting schedules.\n *\n * @private\n * @param {PositionState} positionState - The current state of the position\n * @param {Array<{account: PublicKey; vestingState: VestingState}>} vestings - Array of vesting accounts and their states\n * @param {BN} currentPoint - Current timestamp or slot number (depending on activation type of pool)\n *\n * @returns {Object} Result object containing unlock status and reason\n * @returns {boolean} result.canUnlock - Whether the position can be unlocked\n * @returns {string|undefined} result.reason - Reason why position cannot be unlocked (if applicable)\n */\n canUnlockPosition(\n positionState: PositionState,\n vestings: Array<{ account: PublicKey; vestingState: VestingState }>,\n currentPoint: BN\n ): { canUnlock: boolean; reason?: string } {\n if (vestings.length > 0) {\n // Check if permanently locked\n if (this.isPermanentLockedPosition(positionState)) {\n return {\n canUnlock: false,\n reason: \"Position is permanently locked\",\n };\n }\n\n // Check each vesting\n // We expect that should have only one vesting per position\n for (const vesting of vestings) {\n if (!isVestingComplete(vesting.vestingState, currentPoint)) {\n return {\n canUnlock: false,\n reason: \"Position has incomplete vesting schedule\",\n };\n }\n }\n }\n\n return { canUnlock: true };\n }\n\n async isPoolExist(pool: PublicKey): Promise<boolean> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n return poolState !== null;\n }\n\n /**\n * Calculates swap quote based on input amount and pool state.\n * @param params - Swap parameters including input amount, pool state, slippage, etc.\n * @returns Swap quote including expected output amount, fee, and price impact.\n */\n getQuote(params: GetQuoteParams): {\n swapInAmount: BN;\n consumedInAmount: BN;\n swapOutAmount: BN;\n minSwapOutAmount: BN;\n totalFee: BN;\n priceImpact: number;\n } {\n const {\n inAmount,\n inputTokenMint,\n slippage,\n poolState,\n currentTime,\n currentSlot,\n inputTokenInfo,\n outputTokenInfo,\n } = params;\n const {\n sqrtPrice: sqrtPriceQ64,\n liquidity: liquidityQ64,\n activationType,\n activationPoint,\n collectFeeMode,\n poolFees,\n } = poolState;\n const {\n feeSchedulerMode,\n cliffFeeNumerator,\n numberOfPeriod,\n reductionFactor,\n periodFrequency,\n } = poolFees.baseFee;\n const dynamicFee = poolFees.dynamicFee;\n\n let actualAmountIn = inAmount;\n if (inputTokenInfo) {\n actualAmountIn = calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount;\n }\n const aToB = poolState.tokenAMint.equals(inputTokenMint);\n const currentPoint = activationType ? currentTime : currentSlot;\n\n let dynamicFeeParams: DynamicFeeParams;\n if (dynamicFee.initialized) {\n const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFee;\n dynamicFeeParams = { volatilityAccumulator, binStep, variableFeeControl };\n }\n\n const tradeFeeNumerator = getFeeNumerator(\n currentPoint,\n activationPoint,\n numberOfPeriod,\n periodFrequency,\n feeSchedulerMode,\n cliffFeeNumerator,\n reductionFactor,\n dynamicFeeParams\n );\n\n const { amountOut, totalFee } = getSwapAmount(\n actualAmountIn,\n sqrtPriceQ64,\n liquidityQ64,\n tradeFeeNumerator,\n aToB,\n collectFeeMode\n );\n\n let actualAmountOut = amountOut;\n if (outputTokenInfo) {\n actualAmountOut = calculateTransferFeeExcludedAmount(\n amountOut,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount;\n }\n\n const minSwapOutAmount = getMinAmountWithSlippage(\n actualAmountOut,\n slippage\n );\n\n return {\n swapInAmount: inAmount,\n consumedInAmount: actualAmountIn,\n swapOutAmount: actualAmountOut,\n minSwapOutAmount,\n totalFee,\n priceImpact: getPriceImpact(minSwapOutAmount, actualAmountOut),\n };\n }\n\n /**\n * Calculates the deposit quote for liquidity pool.\n *\n * @param {GetDepositQuoteParams} params - The parameters for calculating the deposit quote.\n *\n * @returns {Promise<Object>} Deposit quote results\n * @returns {BN} returns.actualInputAmount - The actual amount used as input (after deducting transfer fees).\n * @returns {BN} returns.outputAmount - The calculated corresponding amount of the other token.\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be added to the pool.\n */\n getDepositQuote(params: GetDepositQuoteParams): DepositQuote {\n const {\n inAmount,\n isTokenA,\n inputTokenInfo,\n outputTokenInfo,\n minSqrtPrice,\n maxSqrtPrice,\n sqrtPrice,\n } = params;\n\n const actualAmountIn = inputTokenInfo\n ? inAmount.sub(\n calculateTransferFeeIncludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).transferFee\n )\n : inAmount;\n\n const { liquidityDelta, rawAmount } = isTokenA\n ? {\n liquidityDelta: getLiquidityDeltaFromAmountA(\n actualAmountIn,\n sqrtPrice,\n maxSqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountBFromLiquidityDelta(\n delta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Up\n ),\n }\n : {\n liquidityDelta: getLiquidityDeltaFromAmountB(\n actualAmountIn,\n minSqrtPrice,\n sqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountAFromLiquidityDelta(\n delta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Up\n ),\n };\n\n const rawOutputAmount = new BN(rawAmount(liquidityDelta));\n const outputAmount = outputTokenInfo\n ? calculateTransferFeeIncludedAmount(\n rawOutputAmount,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount\n : rawOutputAmount;\n\n return {\n actualInputAmount: actualAmountIn,\n consumedInputAmount: inAmount,\n liquidityDelta,\n outputAmount,\n };\n }\n\n /**\n * Calculates the withdrawal quote for removing liquidity from a concentrated liquidity pool.\n *\n * @param {GetWithdrawQuoteParams} params - The parameters for calculating the withdraw quote\n *\n * @param {Object|null} params.tokenATokenInfo - must provide if token a is token2022\n * @param {Object|null} params.tokenBTokenInfo - must provide if token b is token2022\n *\n * @returns {Promise<Object>} Withdrawal quote results\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be removed from the pool\n * @returns {BN} returns.outAmountA - The calculated amount of token A to be received (after deducting transfer fees)\n * @returns {BN} returns.outAmountB - The calculated amount of token B to be received (after deducting transfer fees)\n */\n getWithdrawQuote(params: GetWithdrawQuoteParams): WithdrawQuote {\n const {\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n minSqrtPrice,\n tokenATokenInfo,\n tokenBTokenInfo,\n } = params;\n const amountA = getAmountAFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Down\n );\n const amountB = getAmountBFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Down\n );\n\n return {\n liquidityDelta,\n outAmountA: tokenATokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountA,\n tokenATokenInfo.mint,\n tokenATokenInfo.currentEpoch\n ).amount\n : amountA,\n outAmountB: tokenBTokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountB,\n tokenBTokenInfo.mint,\n tokenBTokenInfo.currentEpoch\n ).amount\n : amountB,\n };\n }\n\n /**\n * Calculates liquidity and corresponding token amounts for token A single-sided pool creation\n * Only supports initialization where initial price equals min sqrt price\n * @param params Parameters for single-sided pool creation\n * @returns Calculated liquidity delta\n */\n preparePoolCreationSingleSide(params: PreparePoolCreationSingleSide): BN {\n const {\n tokenAAmount,\n initSqrtPrice,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n } = params;\n\n if (!initSqrtPrice.eq(minSqrtPrice)) {\n throw new Error(\"Only support single side for base token.\");\n }\n\n const actualAmountIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const liquidityDelta = getLiquidityDeltaFromAmountA(\n actualAmountIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n return liquidityDelta;\n }\n\n /**\n * Prepares parameters required for pool creation, including initial sqrt price and liquidity.\n * @private\n * @param {PreparePoolCreationParams} params - Initial token amounts for pool creation.\n * @returns init sqrt price and liquidity in Q64 format.\n */\n preparePoolCreationParams(\n params: PreparePoolCreationParams\n ): PreparedPoolCreation {\n const {\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n tokenBInfo,\n } = params;\n\n if (tokenAAmount.eq(new BN(0)) && tokenBAmount.eq(new BN(0))) {\n throw new Error(\"Invalid input amount\");\n }\n\n const actualAmountAIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const actualAmountBIn = tokenBInfo\n ? tokenBAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenBAmount,\n tokenBInfo.mint,\n tokenBInfo.currentEpoch\n ).transferFee\n )\n : tokenBAmount;\n\n const initSqrtPrice = calculateInitSqrtPrice(\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n actualAmountAIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n actualAmountBIn,\n minSqrtPrice,\n initSqrtPrice\n );\n\n const liquidityDelta = min(\n liquidityDeltaFromAmountA,\n liquidityDeltaFromAmountB\n );\n\n return {\n initSqrtPrice,\n liquidityDelta,\n };\n }\n\n /**\n * Builds a transaction to create a permissionless pool.\n * @param params - Parameters for pool creation.\n * @returns Transaction builder.\n */\n async createPool(params: CreatePoolParams): TxBuilder {\n const {\n payer,\n creator,\n config,\n positionNft,\n tokenAMint,\n tokenBMint,\n initSqrtPrice,\n liquidityDelta,\n activationPoint,\n tokenAAmount,\n tokenBAmount,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(tokenBAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n const tx = await this._program.methods\n .initializePool({\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationPoint: activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n config,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return tx;\n }\n\n /**\n * Builds a transaction to create a customizable pool.\n * @param params - Parameters for customizable pool creation.\n * @returns Transaction and related addresses.\n */\n async createCustomPool(params: InitializeCustomizeablePoolParams): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n } = params;\n const pool = deriveCustomizablePoolAddress(tokenAMint, tokenBMint);\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const lamports = tokenBAmount.eq(new BN(0)) ? new BN(1) : tokenBAmount;\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(lamports.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n const transaction = await this._program.methods\n .initializeCustomizablePool({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n /**\n * Builds a transaction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction builder.\n */\n async createPosition(params: CreatePositionParams): TxBuilder {\n const { owner, payer, pool, positionNft } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n return await this._program.methods\n .createPosition()\n .accountsPartial({\n owner,\n positionNftMint: positionNft,\n poolAuthority: this.poolAuthority,\n positionNftAccount,\n payer: payer,\n pool,\n position,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to add liquidity to an existing position.\n * @param {AddLiquidityParams} params - Parameters for adding liquidity.\n * @returns Transaction builder.\n */\n async addLiquidity(params: AddLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeLiquidity(params: RemoveLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n return await this._program.methods\n .removeLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeAllLiquidity(params: RemoveAllLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n removeAllLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to perform a swap in the pool.\n * @param {SwapParams} params - Parameters for swapping tokens.\n * @returns Transaction builder.\n */\n async swap(params: SwapParams): TxBuilder {\n const {\n payer,\n pool,\n inputTokenMint,\n outputTokenMint,\n amountIn,\n minimumAmountOut,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n } = params;\n\n const [inputTokenProgram, outputTokenProgram] = inputTokenMint.equals(\n tokenAMint\n )\n ? [tokenAProgram, tokenBProgram]\n : [tokenBProgram, tokenAProgram];\n\n const {\n tokenAAta: inputTokenAccount,\n tokenBAta: outputTokenAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n payer,\n inputTokenMint,\n outputTokenMint,\n inputTokenProgram,\n outputTokenProgram\n );\n\n if (inputTokenMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n inputTokenAccount,\n BigInt(amountIn.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(payer);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .swap({\n amountIn,\n minimumAmountOut,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n payer,\n inputTokenAccount,\n outputTokenAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to lock a position with vesting schedule.\n * @param {LockPositionParams} params - Locking parameters.\n * @returns Transaction builder.\n */\n async lockPosition(params: LockPositionParams): TxBuilder {\n const {\n owner,\n pool,\n payer,\n vestingAccount,\n position,\n positionNftAccount,\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n } = params;\n const lockPositionParams = {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n };\n return await this._program.methods\n .lockPosition(lockPositionParams)\n .accountsPartial({\n position,\n positionNftAccount,\n vesting: vestingAccount,\n pool: pool,\n owner: owner,\n payer: payer,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to permanently lock a position.\n * @param {PermanentLockParams} params - Parameters for permanent locking.\n * @returns Transaction builder.\n */\n async permanentLockPosition(params: PermanentLockParams): TxBuilder {\n const { owner, position, positionNftAccount, pool, unlockedLiquidity } =\n params;\n\n return await this._program.methods\n .permanentLockPosition(unlockedLiquidity)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: owner,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to refresh vesting status of a position.\n * @param {RefreshVestingParams} params - Refresh vesting parameters.\n * @returns Transaction builder.\n */\n async refreshVesting(params: RefreshVestingParams): TxBuilder {\n const instruction = await this.buildRefreshVestingInstruction(params);\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to claim position fee rewards.\n * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.\n * @returns Transaction builder.\n */\n async claimPositionFee(params: ClaimPositionFeeParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n claimPositionFeeInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n async closePosition(params: ClosePositionParams): TxBuilder {\n const { owner, pool, position, positionNftMint, positionNftAccount } =\n params;\n\n const instruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to remove all liquidity from a position and close it.\n * This combines several operations in a single transaction:\n * 1. Claims any accumulated fees\n * 2. Removes all liquidity\n * 3. Closes the position\n *\n * @param {RemoveAllLiquidityAndClosePositionParams} params - Combined parameters\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If the position is locked or cannot be closed\n */\n async removeAllLiquidityAndClosePosition(\n params: RemoveAllLiquidityAndClosePositionParams\n ): TxBuilder {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n vestings,\n currentPoint,\n } = params;\n\n const { pool } = positionState;\n const { tokenAMint, tokenBMint } = poolState;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionState,\n vestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n // 1. refresh vesting if vesting account provided\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to merge liquidity from one position into another.\n * This process:\n * 1. Claims fees from the source position\n * 2. Removes all liquidity from the source position\n * 3. Adds that liquidity to the target position\n * 4. Closes the source position\n *\n * @param {MergePositionParams} params - Parameters for merging positions\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If either position is locked or incompatible\n */\n async mergePosition(params: MergePositionParams): TxBuilder {\n const {\n owner,\n positionA,\n positionB,\n positionBState,\n poolState,\n positionBNftAccount,\n positionANftAccount,\n tokenAAmountAddLiquidityThreshold,\n tokenBAmountAddLiquidityThreshold,\n tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountRemoveLiquidityThreshold,\n positionBVestings,\n currentPoint,\n } = params;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionBState,\n positionBVestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const pool = positionBState.pool;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n let positionBLiquidityDelta = positionBState.unlockedLiquidity;\n // 1. refresh vesting position B if vesting account provided\n if (positionBVestings.length > 0) {\n // accumulate all liquidity delta of position b (unlocked + available vesting)\n const totalAvailableVestingLiquidity = positionBVestings.reduce(\n (total, position) => {\n const available = getAvailableVestingLiquidity(\n position.vestingState,\n currentPoint\n );\n return total.add(available);\n },\n new BN(0)\n );\n\n positionBLiquidityDelta = positionBLiquidityDelta.add(\n totalAvailableVestingLiquidity\n );\n\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n pool,\n vestingAccounts: positionBVestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n positionState: positionBState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold: tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountRemoveLiquidityThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n // 3. add liquidity from position B to positon A\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position: positionA,\n positionNftAccount: positionANftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta: positionBLiquidityDelta,\n tokenAAmountThreshold: tokenAAmountAddLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountAddLiquidityThreshold,\n });\n\n transaction.add(addLiquidityInstruction);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to update reward duration.\n * @param {UpdateRewardDurationParams} params - Parameters including pool and new duration.\n * @returns Transaction builder.\n */\n async updateRewardDuration(params: UpdateRewardDurationParams): TxBuilder {\n const { pool, admin, rewardIndex, newDuration } = params;\n return await this._program.methods\n .updateRewardDuration(rewardIndex, newDuration)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to update reward funder address.\n * @param {UpdateRewardFunderParams} params - Parameters including pool and new funder address.\n * @returns Transaction builder.\n */\n async updateRewardFunder(params: UpdateRewardFunderParams): TxBuilder {\n const { pool, admin, rewardIndex, newFunder } = params;\n return await this._program.methods\n .updateRewardFunder(rewardIndex, newFunder)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to fund rewards in a pool.\n * @param {FundRewardParams} params - Funding parameters.\n * @returns Transaction builder.\n */\n async fundReward(params: FundRewardParams): TxBuilder {\n const { rewardIndex, carryForward, pool, funder, amount } = params;\n\n const poolState = await this.fetchPoolState(pool);\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { vault, mint } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardIndex);\n\n const preInstructions: TransactionInstruction[] = [];\n\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n // TODO: check case reward mint is wSOL && carryForward is true => total amount > amount\n if (mint.equals(NATIVE_MINT) && !amount.isZero()) {\n const wrapSOLIx = wrapSOLInstruction(\n funder,\n funderTokenAccount,\n BigInt(amount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n return await this._program.methods\n .fundReward(rewardIndex, amount, carryForward)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to withdraw ineligible rewards from a pool.\n * @param {WithdrawIneligibleRewardParams} params - Parameters for withdrawal.\n * @returns Transaction builder.\n */\n async withdrawIneligibleReward(\n params: WithdrawIneligibleRewardParams\n ): TxBuilder {\n const { rewardIndex, pool, funder } = params;\n const poolState = await this.fetchPoolState(pool);\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { mint, vault, rewardTokenFlag } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n if (mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(funder);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .withdrawIneligibleReward(rewardIndex)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n poolAuthority: this.poolAuthority,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim partner fee rewards.\n * @param {ClaimPartnerFeeParams} params - Claim parameters including amounts and partner address.\n * @returns Transaction builder.\n */\n async claimPartnerFee(params: ClaimPartnerFeeParams): TxBuilder {\n const { partner, pool, maxAmountA, maxAmountB } = params;\n const poolState = await this.fetchPoolState(pool);\n const {\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAFlag,\n tokenBFlag,\n } = poolState;\n\n const tokenAProgram = getTokenProgram(tokenAFlag);\n const tokenBProgram = getTokenProgram(tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts(\n partner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram\n );\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [\n poolState.tokenAMint.toBase58(),\n poolState.tokenBMint.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(partner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .claimPartnerFee(maxAmountA, maxAmountB)\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n partner,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim reward from a position.\n * @param {ClaimRewardParams} params - Parameters for claiming reward.\n * @returns Transaction builder.\n */\n async claimReward(params: ClaimRewardParams): TxBuilder {\n const {\n user,\n position,\n positionNftAccount,\n rewardIndex,\n poolState,\n positionState,\n } = params;\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const tokenProgram = getTokenProgram(rewardInfo.rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: userTokenAccount, ix: createUserTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n rewardInfo.mint,\n user,\n user,\n true,\n tokenProgram\n );\n createUserTokenAccountIx && preInstructions.push(createUserTokenAccountIx);\n\n if (rewardInfo.mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return await this._program.methods\n .claimReward(rewardIndex)\n .accountsPartial({\n pool: positionState.pool,\n positionNftAccount,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n poolAuthority: this.poolAuthority,\n position,\n userTokenAccount,\n owner: user,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n}\n","{\n \"address\": \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\",\n \"metadata\": {\n \"name\": \"cp_amm\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity\",\n \"discriminator\": [\n 181,\n 157,\n 89,\n 67,\n 143,\n 182,\n 52,\n 72\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_partner_fee\",\n \"discriminator\": [\n 97,\n 206,\n 39,\n 105,\n 94,\n 94,\n 126,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"partner\",\n \"signer\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_b\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_position_fee\",\n \"discriminator\": [\n 180,\n 38,\n 154,\n 17,\n 133,\n 33,\n 162,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_protocol_fee\",\n \"discriminator\": [\n 165,\n 228,\n 133,\n 48,\n 99,\n 249,\n 255,\n 33\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 153,\n 10,\n 107,\n 154,\n 255,\n 249,\n 210,\n 173,\n 176,\n 67,\n 220,\n 214,\n 152,\n 71,\n 46,\n 146,\n 161,\n 33,\n 81,\n 148,\n 166,\n 119,\n 5,\n 189,\n 142,\n 11,\n 57,\n 68,\n 162,\n 70,\n 126,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_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\": \"token_b_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 153,\n 10,\n 107,\n 154,\n 255,\n 249,\n 210,\n 173,\n 176,\n 67,\n 220,\n 214,\n 152,\n 71,\n 46,\n 146,\n 161,\n 33,\n 81,\n 148,\n 166,\n 119,\n 5,\n 189,\n 142,\n 11,\n 57,\n 68,\n 162,\n 70,\n 126,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_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\": \"claim_fee_operator\",\n \"docs\": [\n \"Claim fee operator\"\n ]\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator\"\n ],\n \"signer\": true,\n \"relations\": [\n \"claim_fee_operator\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_reward\",\n \"discriminator\": [\n 149,\n 95,\n 181,\n 242,\n 94,\n 90,\n 158,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"docs\": [\n \"The vault token account for reward token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"close_claim_fee_operator\",\n \"discriminator\": [\n 38,\n 134,\n 82,\n 216,\n 95,\n 124,\n 17,\n 99\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_config\",\n \"discriminator\": [\n 145,\n 9,\n 72,\n 157,\n 95,\n 125,\n 61,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position\",\n \"discriminator\": [\n 123,\n 134,\n 81,\n 0,\n 49,\n 68,\n 98,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_claim_fee_operator\",\n \"discriminator\": [\n 169,\n 62,\n 207,\n 107,\n 58,\n 187,\n 162,\n 109\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 102,\n 95,\n 111,\n 112,\n 101,\n 114,\n 97,\n 116,\n 111,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_config\",\n \"docs\": [\n \"ADMIN FUNCTIONS /////\"\n ],\n \"discriminator\": [\n 201,\n 207,\n 243,\n 114,\n 75,\n 111,\n 47,\n 189\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"config_parameters.index\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_position\",\n \"discriminator\": [\n 48,\n 215,\n 197,\n 153,\n 96,\n 203,\n 180,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the position. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_token_badge\",\n \"discriminator\": [\n 88,\n 206,\n 0,\n 91,\n 60,\n 175,\n 151,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"token_badge\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 98,\n 97,\n 100,\n 103,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"fund_reward\",\n \"discriminator\": [\n 188,\n 50,\n 249,\n 165,\n 93,\n 151,\n 38,\n 63\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carry_forward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_pool\",\n \"discriminator\": [\n 20,\n 161,\n 241,\n 24,\n 189,\n 221,\n 180,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"Token a vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"Token b vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_pool\",\n \"docs\": [\n \"USER FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 95,\n 180,\n 10,\n 172,\n 84,\n 174,\n 232,\n 40\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"Token a vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"Token b vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_reward\",\n \"discriminator\": [\n 95,\n 135,\n 192,\n 196,\n 242,\n 129,\n 230,\n 68\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 119,\n 97,\n 114,\n 100,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"reward_index\"\n }\n ]\n }\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"lock_position\",\n \"discriminator\": [\n 227,\n 62,\n 2,\n 252,\n 247,\n 10,\n 171,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"vesting\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"VestingParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"permanent_lock_position\",\n \"discriminator\": [\n 165,\n 176,\n 125,\n 6,\n 231,\n 171,\n 186,\n 213\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"refresh_vesting\",\n \"discriminator\": [\n 9,\n 94,\n 216,\n 14,\n 116,\n 204,\n 247,\n 0\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_all_liquidity\",\n \"discriminator\": [\n 10,\n 51,\n 61,\n 35,\n 112,\n 105,\n 24,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity\",\n \"discriminator\": [\n 80,\n 85,\n 209,\n 72,\n 24,\n 206,\n 177,\n 108\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_pool_status\",\n \"discriminator\": [\n 112,\n 87,\n 135,\n 223,\n 83,\n 204,\n 132,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"discriminator\": [\n 248,\n 198,\n 158,\n 145,\n 225,\n 117,\n 135,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"input_token_account\",\n \"docs\": [\n \"The user token account for input token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"output_token_account\",\n \"docs\": [\n \"The user token account for output token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"The user performing the swap\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"referral_token_account\",\n \"docs\": [\n \"referral token account\"\n ],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_reward_duration\",\n \"discriminator\": [\n 138,\n 174,\n 196,\n 169,\n 213,\n 235,\n 254,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_reward_funder\",\n \"discriminator\": [\n 211,\n 28,\n 48,\n 32,\n 215,\n 160,\n 35,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_ineligible_reward\",\n \"discriminator\": [\n 148,\n 206,\n 42,\n 195,\n 247,\n 49,\n 103,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"ClaimFeeOperator\",\n \"discriminator\": [\n 166,\n 48,\n 134,\n 86,\n 34,\n 200,\n 188,\n 150\n ]\n },\n {\n \"name\": \"Config\",\n \"discriminator\": [\n 155,\n 12,\n 170,\n 224,\n 30,\n 250,\n 204,\n 130\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"TokenBadge\",\n \"discriminator\": [\n 116,\n 219,\n 204,\n 229,\n 249,\n 116,\n 255,\n 150\n ]\n },\n {\n \"name\": \"Vesting\",\n \"discriminator\": [\n 100,\n 149,\n 66,\n 138,\n 95,\n 200,\n 128,\n 241\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"EvtAddLiquidity\",\n \"discriminator\": [\n 175,\n 242,\n 8,\n 157,\n 30,\n 247,\n 185,\n 169\n ]\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"discriminator\": [\n 118,\n 99,\n 77,\n 10,\n 226,\n 1,\n 1,\n 87\n ]\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"discriminator\": [\n 198,\n 182,\n 183,\n 52,\n 97,\n 12,\n 49,\n 56\n ]\n },\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"discriminator\": [\n 186,\n 244,\n 75,\n 251,\n 188,\n 13,\n 25,\n 33\n ]\n },\n {\n \"name\": \"EvtClaimReward\",\n \"discriminator\": [\n 218,\n 86,\n 147,\n 200,\n 235,\n 188,\n 215,\n 231\n ]\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"discriminator\": [\n 111,\n 39,\n 37,\n 55,\n 110,\n 216,\n 194,\n 23\n ]\n },\n {\n \"name\": \"EvtCloseConfig\",\n \"discriminator\": [\n 36,\n 30,\n 239,\n 45,\n 58,\n 132,\n 14,\n 5\n ]\n },\n {\n \"name\": \"EvtClosePosition\",\n \"discriminator\": [\n 20,\n 145,\n 144,\n 68,\n 143,\n 142,\n 214,\n 178\n ]\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"discriminator\": [\n 21,\n 6,\n 153,\n 120,\n 68,\n 116,\n 28,\n 177\n ]\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"discriminator\": [\n 131,\n 207,\n 180,\n 174,\n 180,\n 73,\n 165,\n 54\n ]\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"discriminator\": [\n 156,\n 15,\n 119,\n 198,\n 29,\n 181,\n 221,\n 55\n ]\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"discriminator\": [\n 141,\n 120,\n 134,\n 116,\n 34,\n 28,\n 114,\n 160\n ]\n },\n {\n \"name\": \"EvtFundReward\",\n \"discriminator\": [\n 104,\n 233,\n 237,\n 122,\n 199,\n 191,\n 121,\n 85\n ]\n },\n {\n \"name\": \"EvtInitializePool\",\n \"discriminator\": [\n 228,\n 50,\n 246,\n 85,\n 203,\n 66,\n 134,\n 37\n ]\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"discriminator\": [\n 129,\n 91,\n 188,\n 3,\n 246,\n 52,\n 185,\n 249\n ]\n },\n {\n \"name\": \"EvtLockPosition\",\n \"discriminator\": [\n 168,\n 63,\n 108,\n 83,\n 219,\n 82,\n 2,\n 200\n ]\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"discriminator\": [\n 145,\n 143,\n 162,\n 218,\n 218,\n 80,\n 67,\n 11\n ]\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"discriminator\": [\n 87,\n 46,\n 88,\n 98,\n 175,\n 96,\n 34,\n 91\n ]\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"discriminator\": [\n 100,\n 213,\n 74,\n 3,\n 95,\n 91,\n 228,\n 146\n ]\n },\n {\n \"name\": \"EvtSwap\",\n \"discriminator\": [\n 27,\n 60,\n 21,\n 213,\n 138,\n 170,\n 187,\n 147\n ]\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"discriminator\": [\n 149,\n 135,\n 65,\n 231,\n 129,\n 153,\n 65,\n 57\n ]\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"discriminator\": [\n 76,\n 154,\n 208,\n 13,\n 40,\n 115,\n 246,\n 146\n ]\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"discriminator\": [\n 248,\n 215,\n 184,\n 78,\n 31,\n 180,\n 179,\n 168\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidFee\",\n \"msg\": \"Invalid fee setup\"\n },\n {\n \"code\": 6002,\n \"name\": \"ExceededSlippage\",\n \"msg\": \"Exceeded slippage tolerance\"\n },\n {\n \"code\": 6003,\n \"name\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6006,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6007,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6008,\n \"name\": \"UnableToModifyActivationPoint\",\n \"msg\": \"Unable to modify activation point\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidAuthorityToCreateThePool\",\n \"msg\": \"Invalid authority to create the pool\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidActivationPoint\",\n \"msg\": \"Invalid activation point\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Quote token must be SOL,USDC\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeCurve\",\n \"msg\": \"Invalid fee curve\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidPriceRange\",\n \"msg\": \"Invalid Price Range\"\n },\n {\n \"code\": 6015,\n \"name\": \"PriceRangeViolation\",\n \"msg\": \"Trade is over price range\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidParameters\",\n \"msg\": \"Invalid parameters\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidCollectFeeMode\",\n \"msg\": \"Invalid collect fee mode\"\n },\n {\n \"code\": 6018,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input\"\n },\n {\n \"code\": 6019,\n \"name\": \"CannotCreateTokenBadgeOnSupportedMint\",\n \"msg\": \"Cannot create token badge on supported mint\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidTokenBadge\",\n \"msg\": \"Invalid token badge\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidMinimumLiquidity\",\n \"msg\": \"Invalid minimum liquidity\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidVestingInfo\",\n \"msg\": \"Invalid vesting information\"\n },\n {\n \"code\": 6023,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidVestingAccount\",\n \"msg\": \"Invalid vesting account\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidPoolStatus\",\n \"msg\": \"Invalid pool status\"\n },\n {\n \"code\": 6026,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupported native mint token2022\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6029,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6030,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6032,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n },\n {\n \"code\": 6033,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6034,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6035,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6036,\n \"name\": \"InvalidFunder\",\n \"msg\": \"Invalid funder\"\n },\n {\n \"code\": 6037,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6038,\n \"name\": \"FeeInverseIsIncorrect\",\n \"msg\": \"Fee inverse is incorrect\"\n },\n {\n \"code\": 6039,\n \"name\": \"PositionIsNotEmpty\",\n \"msg\": \"Position is not empty\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"maximum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"maximum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeStruct\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding_1\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFeeOperator\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"operator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Config\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"vault_config_key\",\n \"docs\": [\n \"Vault config key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"docs\": [\n \"Only pool_creator_authority can use the current config to initialize new pool. When it's Pubkey::default, it's a public config.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesConfig\"\n }\n }\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"Collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"index\",\n \"docs\": [\n \"config index\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Fee curve point\",\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeStruct\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price_reference\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_accumulator\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_reference\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtAddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_claimed\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_reward\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"docs\": [\n \"Close claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"claim_fee_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCloseConfig\",\n \"docs\": [\n \"Close config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Config pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin pk\"\n ],\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClosePosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"docs\": [\n \"Create claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"docs\": [\n \"Create config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"docs\": [\n \"Create token badge\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtFundReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"transfer_fee_excluded_amount_in\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializePool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"alpha_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vesting\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_liquidity_amount\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_permanent_locked_liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtSwap\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"trade_direction\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_referral\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n },\n {\n \"name\": \"swap_result\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapResult\"\n }\n }\n },\n {\n \"name\": \"actual_amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeCustomizablePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"pool fees\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\n \"has alpha vault\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesStruct\"\n }\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"token a mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"token b mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"token a vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"token b vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"whitelisted_vault\",\n \"docs\": [\n \"Whitelisted vault to be able to buy pool before activation_point\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"liquidity share\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_reserve\",\n \"docs\": [\n \"token a reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_reserve\",\n \"docs\": [\n \"token b reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_a_fee\",\n \"docs\": [\n \"protocol a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_b_fee\",\n \"docs\": [\n \"protocol b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_a_fee\",\n \"docs\": [\n \"partner a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_b_fee\",\n \"docs\": [\n \"partner b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"current price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"Activation point, can be slot or timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type, 0 means by slot, 1 means by timestamp\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_status\",\n \"docs\": [\n \"pool status, 0: enable, 1 disable\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_flag\",\n \"docs\": [\n \"token a flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"docs\": [\n \"token b flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"pool type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n },\n {\n \"name\": \"fee_a_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetrics\"\n }\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RewardInfo\"\n }\n },\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeeParameters\",\n \"docs\": [\n \"Information regarding fee charges\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"docs\": [\n \"Base fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeParameters\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trade fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"DynamicFeeParameters\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeConfig\"\n }\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeConfig\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesStruct\",\n \"docs\": [\n \"Information regarding fee charges\",\n \"trading_fee = amount * trade_fee_numerator / denominator\",\n \"protocol_fee = trading_fee * protocol_fee_percentage / 100\",\n \"referral_fee = protocol_fee * referral_percentage / 100\",\n \"partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"docs\": [\n \"Trade fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, making the value of liquidity tokens rise.\",\n \"Trade fee numerator\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeStruct\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trading fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, with the equivalent in pool tokens minted to\",\n \"the protocol of the program.\",\n \"Protocol trade fee numerator\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeStruct\"\n }\n }\n },\n {\n \"name\": \"padding_1\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_lp_a_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_lp_b_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_protocol_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_protocol_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_position\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nft_mint\",\n \"docs\": [\n \"nft mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_per_token_checkpoint\",\n \"docs\": [\n \"fee a checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_token_checkpoint\",\n \"docs\": [\n \"fee b checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_a_pending\",\n \"docs\": [\n \"fee a pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_pending\",\n \"docs\": [\n \"fee b pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"unlocked_liquidity\",\n \"docs\": [\n \"unlock liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"vested_liquidity\",\n \"docs\": [\n \"vesting liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"permanent_locked_liquidity\",\n \"docs\": [\n \"permanent locked liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PositionMetrics\"\n }\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future usage\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_claimed_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"minimum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"minimum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"docs\": [\n \"Indicates if the reward has been initialized\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_token_flag\",\n \"docs\": [\n \"reward token flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding to ensure `reward_rate: u128` is 16-byte aligned\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_duration\",\n \"docs\": [\n \"reward duration\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration_end\",\n \"docs\": [\n \"reward duration end\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_rate\",\n \"docs\": [\n \"reward rate\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_per_token_stored\",\n \"docs\": [\n \"Reward per token stored\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_update_time\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_seconds_with_empty_liquidity_reward\",\n \"docs\": [\n \"Accumulated seconds when the farm distributed rewards but the bin was empty.\",\n \"These rewards will be carried over to the next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_amount_out\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapResult\",\n \"docs\": [\n \"Encodes all results of swapping\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"output_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"next_sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"lp_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenBadge\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"docs\": [\n \"token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"UserRewardInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_token_checkpoint\",\n \"docs\": [\n \"The latest update reward checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reward_pendings\",\n \"docs\": [\n \"Current pending rewards\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Vesting\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_released_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 14\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u128\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VestingParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_point\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import { IdlAccounts, IdlTypes, Program, BN } from \"@coral-xyz/anchor\";\nimport { PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport { Mint } from \"@solana/spl-token\";\n\nexport type AmmProgram = Program<CpAmmTypes>;\n\nexport type TxBuilder = Promise<Transaction>;\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport enum ActivationPoint {\n Timestamp,\n Slot,\n}\n\nexport enum FeeSchedulerMode {\n Linear,\n Exponential,\n}\n\nexport enum CollectFeeMode {\n BothToken,\n OnlyB,\n}\n\nexport enum TradeDirection {\n AtoB,\n BtoA,\n}\n\nexport enum ActivationType {\n Slot,\n Timestamp,\n}\n\nexport type FeeMode = {\n feeOnInput: boolean;\n feesOnTokenA: boolean;\n};\n\n// Account state types\nexport type PoolState = IdlAccounts<CpAmmTypes>[\"pool\"];\nexport type PositionState = IdlAccounts<CpAmmTypes>[\"position\"];\nexport type VestingState = IdlAccounts<CpAmmTypes>[\"vesting\"];\nexport type ConfigState = IdlAccounts<CpAmmTypes>[\"config\"];\nexport type TokenBadgeState = IdlAccounts<CpAmmTypes>[\"tokenBadge\"];\n\n// Program params types\n// export type LockPositionParams = IdlTypes<CpAmm>[\"VestingParameters\"];\n// export type AddLiquidityParams = IdlTypes<CpAmm>[\"AddLiquidityParameters\"];\n// export type RemoveLiquidityParams =\n// IdlTypes<CpAmm>[\"RemoveLiquidityParameters\"];\n// export type SwapParams = IdlTypes<CpAmm>[\"SwapParameters\"];\n// export type InitPoolParams = IdlTypes<CpAmm>[\"InitializePoolParameters\"];\n// export type InitCustomizePoolParams =\n// IdlTypes<CpAmm>[\"InitializeCustomizablePoolParameters\"];\nexport type RewardInfo = IdlTypes<CpAmmTypes>[\"rewardInfo\"];\n\nexport type DynamicFee = {\n binStep: number;\n binStepU128: BN;\n filterPeriod: number;\n decayPeriod: number;\n reductionFactor: number;\n maxVolatilityAccumulator: number;\n variableFeeControl: number;\n};\n\nexport type BaseFee = {\n cliffFeeNumerator: BN;\n numberOfPeriod: number;\n periodFrequency: BN;\n reductionFactor: BN;\n feeSchedulerMode: number;\n};\n\nexport type PoolFeesParams = {\n baseFee: BaseFee;\n protocolFeePercent: number;\n partnerFeePercent: number;\n referralFeePercent: number;\n dynamicFee: DynamicFee | null;\n};\n\nexport type InitializeCustomizeablePoolParams = {\n payer: PublicKey;\n creator: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n liquidityDelta: BN;\n initSqrtPrice: BN;\n poolFees: PoolFeesParams;\n hasAlphaVault: boolean;\n activationType: number;\n collectFeeMode: number;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type PreparePoolCreationParams = {\n tokenAAmount: BN;\n tokenBAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type PreparedPoolCreation = {\n initSqrtPrice: BN;\n liquidityDelta: BN;\n};\n\nexport type PreparePoolCreationSingleSide = {\n tokenAAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n initSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type CreatePoolParams = {\n creator: PublicKey;\n payer: PublicKey;\n config: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n initSqrtPrice: BN;\n liquidityDelta: BN;\n tokenAAmount: BN;\n tokenBAmount: BN;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type CreatePositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n};\n\nexport type AddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type LiquidityDeltaParams = {\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n sqrtPrice: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type RemoveLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type RemoveAllLiquidityParams = Omit<\n RemoveLiquidityParams,\n \"liquidityDelta\"\n>;\n\nexport type BuildAddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type BuildLiquidatePositionInstructionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n positionState: PositionState;\n poolState: PoolState;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n};\n\nexport type BuildRemoveAllLiquidityInstructionParams = {\n poolAuthority: PublicKey;\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionParams = {\n owner: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type RemoveAllLiquidityAndClosePositionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type MergePositionParams = {\n owner: PublicKey;\n positionA: PublicKey;\n positionB: PublicKey;\n poolState: PoolState;\n positionBNftAccount: PublicKey;\n positionANftAccount: PublicKey;\n positionBState: PositionState;\n tokenAAmountAddLiquidityThreshold: BN;\n tokenBAmountAddLiquidityThreshold: BN;\n tokenAAmountRemoveLiquidityThreshold: BN;\n tokenBAmountRemoveLiquidityThreshold: BN;\n positionBVestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type GetQuoteParams = {\n inAmount: BN;\n inputTokenMint: PublicKey;\n slippage: number;\n poolState: PoolState;\n currentTime: number;\n currentSlot: number;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type SwapQuotes = {\n totalFee: BN;\n minOutAmount: BN;\n actualAmount: BN;\n};\n\nexport type SwapParams = {\n payer: PublicKey;\n pool: PublicKey;\n inputTokenMint: PublicKey;\n outputTokenMint: PublicKey;\n amountIn: BN;\n minimumAmountOut: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n referralTokenAccount: PublicKey | null;\n};\n\nexport type LockPositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n vestingAccount: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n cliffPoint: BN | null;\n periodFrequency: BN;\n cliffUnlockLiquidity: BN;\n liquidityPerPeriod: BN;\n numberOfPeriod: number;\n};\n\nexport type ClaimPositionFeeInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClaimPositionFeeParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type InitializeRewardParams = {\n rewardIndex: number;\n rewardDuration: BN;\n pool: PublicKey;\n rewardMint: PublicKey;\n payer: PublicKey;\n};\n\nexport type UpdateRewardDurationParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newDuration: BN;\n};\n\nexport type UpdateRewardFunderParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newFunder: PublicKey;\n};\n\nexport type FundRewardParams = {\n funder: PublicKey;\n rewardIndex: number;\n pool: PublicKey;\n carryForward: boolean;\n amount: BN;\n};\n\nexport type WithdrawIneligibleRewardParams = {\n rewardIndex: number;\n pool: PublicKey;\n funder: PublicKey;\n};\n\nexport type ClaimPartnerFeeParams = {\n partner: PublicKey;\n pool: PublicKey;\n maxAmountA: BN;\n maxAmountB: BN;\n};\n\nexport type ClaimRewardParams = {\n user: PublicKey;\n position: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n positionNftAccount: PublicKey;\n rewardIndex: number;\n};\n\nexport type RefreshVestingParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n vestingAccounts: PublicKey[];\n};\n\nexport type PermanentLockParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n unlockedLiquidity: BN;\n};\n\nexport type GetDepositQuoteParams = {\n inAmount: BN;\n isTokenA: boolean;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type GetWithdrawQuoteParams = {\n liquidityDelta: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n tokenATokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type DepositQuote = {\n actualInputAmount: BN;\n consumedInputAmount: BN;\n outputAmount: BN;\n liquidityDelta: BN;\n};\n\nexport type WithdrawQuote = {\n liquidityDelta: BN;\n outAmountA: BN;\n outAmountB: BN;\n};\n\nexport type DynamicFeeParams = {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@coral-xyz/anchor\";\nimport { CP_AMM_PROGRAM_ID } from \"./constants\";\n\n// Private function: Only use to derive pool account\nexport function getFirstKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer();\n const buf2 = key2.toBuffer();\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf1;\n }\n return buf2;\n}\n\nexport function getSecondKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer();\n const buf2 = key2.toBuffer();\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf2;\n }\n return buf1;\n}\n\nexport function derivePoolAuthority(): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"pool_authority\")],\n CP_AMM_PROGRAM_ID\n )[0];\n}\nexport function deriveConfigAddress(index: BN): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"config\"), index.toArrayLike(Buffer, \"le\", 8)],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n config.toBuffer(),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionAddress(positionNft: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), positionNft.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenVaultAddress(\n tokenMint: PublicKey,\n pool: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_vault\"), tokenMint.toBuffer(), pool.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveRewardVaultAddress(\n pool: PublicKey,\n rewardIndex: number\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"reward_vault\"), pool.toBuffer(), Buffer.from([rewardIndex])],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveCustomizablePoolAddress(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"cpool\"),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenBadgeAddress(tokenMint: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), tokenMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveClaimFeeOperatorAddress(operator: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"cf_operator\"), operator.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionNftAccount(\n positionNftMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position_nft_account\"), positionNftMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const CP_AMM_PROGRAM_ID = new PublicKey(\n \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\"\n);\n\nexport const LIQUIDITY_SCALE = 128;\nexport const SCALE_OFFSET = 64;\nexport const BASIS_POINT_MAX = 10_000;\nexport const MAX_FEE_NUMERATOR = 500_000_000;\nexport const FEE_DENOMINATOR = 1_000_000_000;\n\nexport const MIN_SQRT_PRICE = new BN(\"4295048016\");\nexport const MAX_SQRT_PRICE = new BN(\"79226673521066979257578248091\");\nexport const MIN_CU_BUFFER = 50_000;\nexport const MAX_CU_BUFFER = 200_000;\n","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport {\n AccountLayout,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getMint,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nexport function getTokenProgram(flag: number): PublicKey {\n return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID;\n}\nexport const getTokenDecimals = async (\n connection: Connection,\n mint: PublicKey\n): Promise<number> => {\n return (await getMint(connection, mint)).decimals;\n};\n\nexport const getOrCreateATAInstruction = async (\n connection: Connection,\n tokenMint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true,\n tokenProgram: PublicKey\n): Promise<{ ataPubkey: PublicKey; ix?: TransactionInstruction }> => {\n const toAccount = getAssociatedTokenAddressSync(\n tokenMint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n\n try {\n await getAccount(connection, toAccount);\n return { ataPubkey: toAccount, ix: undefined };\n } catch (e) {\n if (\n e instanceof TokenAccountNotFoundError ||\n e instanceof TokenInvalidAccountOwnerError\n ) {\n const ix = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n toAccount,\n owner,\n tokenMint,\n tokenProgram\n );\n\n return { ataPubkey: toAccount, ix };\n } else {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\n }\n};\n\nexport const wrapSOLInstruction = (\n from: PublicKey,\n to: PublicKey,\n amount: bigint\n): TransactionInstruction[] => {\n return [\n SystemProgram.transfer({\n fromPubkey: from,\n toPubkey: to,\n lamports: amount,\n }),\n new TransactionInstruction({\n keys: [\n {\n pubkey: to,\n isSigner: false,\n isWritable: true,\n },\n ],\n data: Buffer.from(new Uint8Array([17])),\n programId: TOKEN_PROGRAM_ID,\n }),\n ];\n};\n\nexport const unwrapSOLInstruction = async (\n owner: PublicKey,\n allowOwnerOffCurve = true\n) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n );\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n );\n return closedWrappedSolInstruction;\n }\n return null;\n};\n\nexport async function getAllUserPositionNftAccount(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const filters: GetProgramAccountsFilter[] = [\n {\n memcmp: {\n offset: 32,\n bytes: user.toBase58(),\n },\n },\n {\n memcmp: {\n offset: 64,\n bytes: bs58.encode(Buffer.from([1, 0, 0, 0, 0, 0, 0, 0])), // 1\n },\n },\n ];\n\n const tokenAccountsRaw = await connection.getProgramAccounts(\n TOKEN_2022_PROGRAM_ID,\n {\n filters,\n }\n );\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccountsRaw) {\n const tokenAccountData = AccountLayout.decode(account.data);\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n\n return userPositionNftAccount;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { CollectFeeMode, FeeMode, FeeSchedulerMode, Rounding } from \"../types\";\nimport {\n BASIS_POINT_MAX,\n FEE_DENOMINATOR,\n MAX_FEE_NUMERATOR,\n SCALE_OFFSET,\n} from \"../constants\";\nimport { ONE, pow } from \"../math/feeMath\";\nimport { mulDiv } from \"../math\";\nimport {\n getAmountAFromLiquidityDelta,\n getAmountBFromLiquidityDelta,\n getNextSqrtPrice,\n} from \"./curve\";\n\n// Fee scheduler\n// Linear: cliffFeeNumerator - period * reductionFactor\n// Exponential: cliffFeeNumerator * (1 -reductionFactor/BASIS_POINT_MAX)^period\nexport function getBaseFeeNumerator(\n feeSchedulerMode: FeeSchedulerMode,\n cliffFeeNumerator: BN,\n period: BN,\n reductionFactor: BN\n): BN {\n let feeNumerator: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));\n } else {\n const bps = reductionFactor.shln(SCALE_OFFSET).div(new BN(BASIS_POINT_MAX));\n const base = ONE.sub(bps);\n const result = pow(base, period);\n feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);\n }\n\n return feeNumerator;\n}\n\n/**\n * Calculates the dynamic fee numerator based on market volatility metrics\n *\n * @param volatilityAccumulator - A measure of accumulated market volatility (BN)\n * @param binStep - The size of price bins in the liquidity distribution (BN)\n * @param variableFeeControl - Parameter controlling the impact of volatility on fees (BN)\n * @returns The calculated dynamic fee numerator (BN)\n */\nexport function getDynamicFeeNumerator(\n volatilityAccumulator: BN,\n binStep: BN,\n variableFeeControl: BN\n): BN {\n if (variableFeeControl.isZero()) {\n return new BN(0);\n }\n const squareVfaBin = volatilityAccumulator\n .mul(new BN(binStep))\n .pow(new BN(2));\n const vFee = variableFeeControl.mul(squareVfaBin);\n\n return vFee.add(new BN(99_999_999_999)).div(new BN(100_000_000_000));\n}\n\n/**\n * Calculates the fee numerator based on current market conditions and fee schedule configuration\n *\n * @param currentPoint - The current price point in the liquidity curve\n * @param activationPoint - The price point at which the fee schedule is activated (BN)\n * @param numberOfPeriod - The total number of periods in the fee schedule\n * @param periodFrequency - The frequency at which periods change (BN)\n * @param feeSchedulerMode - The mode determining how fees are calculated (0 = constant, 1 = linear, etc.)\n * @param cliffFeeNumerator - The initial fee numerator at the cliff point (BN)\n * @param reductionFactor - The factor by which fees are reduced in each period (BN)\n * @param dynamicFeeParams - Optional parameters for dynamic fee calculation\n * @param dynamicFeeParams.volatilityAccumulator - Measure of accumulated market volatility (BN)\n * @param dynamicFeeParams.binStep - Size of price bins in the liquidity distribution (BN)\n * @param dynamicFeeParams.variableFeeControl - Parameter controlling the impact of volatility (BN)\n * @returns The calculated fee numerator (BN), capped at MAX_FEE_NUMERATOR\n */\nexport function getFeeNumerator(\n currentPoint: number,\n activationPoint: BN,\n numberOfPeriod: number,\n periodFrequency: BN,\n feeSchedulerMode: number,\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n dynamicFeeParams?: {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n }\n): BN {\n if (Number(periodFrequency) == 0) {\n return cliffFeeNumerator;\n }\n const period = new BN(currentPoint).lt(activationPoint)\n ? new BN(numberOfPeriod)\n : BN.min(\n new BN(numberOfPeriod),\n new BN(currentPoint).sub(activationPoint).div(periodFrequency)\n );\n\n let feeNumerator = getBaseFeeNumerator(\n feeSchedulerMode,\n cliffFeeNumerator,\n period,\n reductionFactor\n );\n\n if (dynamicFeeParams) {\n const { volatilityAccumulator, binStep, variableFeeControl } =\n dynamicFeeParams;\n const dynamicFeeNumberator = getDynamicFeeNumerator(\n volatilityAccumulator,\n new BN(binStep),\n new BN(variableFeeControl)\n );\n feeNumerator = feeNumerator.add(dynamicFeeNumberator);\n }\n return feeNumerator.gt(new BN(MAX_FEE_NUMERATOR))\n ? new BN(MAX_FEE_NUMERATOR)\n : feeNumerator;\n}\n\n/**\n * Determines the fee mode based on the swap direction and fee collection configuration\n *\n * @param collectFeeMode - The fee collection mode (e.g., OnlyB, BothToken)\n * @param btoA - Boolean indicating if the swap is from token B to token A\n * @returns { feeOnInput, feesOnTokenA }\n */\nfunction getFeeMode(collectFeeMode: CollectFeeMode, btoA: boolean): FeeMode {\n const feeOnInput = btoA && collectFeeMode === CollectFeeMode.OnlyB;\n const feesOnTokenA = btoA && collectFeeMode === CollectFeeMode.BothToken;\n\n return {\n feeOnInput,\n feesOnTokenA,\n };\n}\n\n/**\n * Calculates the total fee amount based on the transaction amount and fee numerator\n *\n * @param amount - The transaction amount (BN)\n * @param tradeFeeNumerator - The fee numerator to apply (BN)\n * @returns The calculated fee amount (BN), rounded up\n */\nfunction getTotalFeeOnAmount(amount: BN, tradeFeeNumerator: BN) {\n return mulDiv(\n amount,\n tradeFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n );\n}\n\n/**\n *\n * Calculates the output amount and fees for a swap operation in a concentrated liquidity pool.\n *\n * @param inAmount - The input amount of tokens the user is swapping\n * @param sqrtPrice - The current square root price of the pool\n * @param liquidity - The current liquidity available in the pool\n * @param tradeFeeNumerator - The fee numerator used to calculate trading fees\n * @param aToB - Direction of the swap: true for token A to token B, false for token B to token A\n * @param collectFeeMode - Determines how fees are collected (0: both tokens, 1: only token B)\n * @returns Object containing the actual output amount after fees and the total fee amount\n */\nexport function getSwapAmount(\n inAmount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n tradeFeeNumerator: BN,\n aToB: boolean,\n collectFeeMode: number\n): { amountOut: BN; totalFee: BN } {\n let feeMode = getFeeMode(collectFeeMode, !aToB);\n let actualInAmount = inAmount;\n let totalFee = new BN(0);\n\n if (feeMode.feeOnInput) {\n totalFee = getTotalFeeOnAmount(inAmount, tradeFeeNumerator);\n actualInAmount = inAmount.sub(totalFee);\n }\n\n // Calculate the output amount based on swap direction\n const outAmount = aToB\n ? getAmountBFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, true),\n Rounding.Down\n )\n : getAmountAFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n getNextSqrtPrice(actualInAmount, sqrtPrice, liquidity, false),\n Rounding.Down\n );\n\n // Apply fees to output amount if fee is taken on output\n const amountOut = feeMode.feeOnInput\n ? outAmount\n : ((totalFee = getTotalFeeOnAmount(outAmount, tradeFeeNumerator)),\n outAmount.sub(totalFee));\n\n return { amountOut, totalFee };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { SCALE_OFFSET } from \"../constants\";\n\nconst MAX_EXPONENTIAL = new BN(0x80000);\n\nexport const ONE = new BN(1).shln(SCALE_OFFSET);\nconst MAX = new BN(2).pow(new BN(128)).sub(new BN(1));\n\nexport function pow(base: BN, exp: BN): BN {\n let invert = exp.isNeg();\n\n if (exp.isZero()) {\n return ONE;\n }\n\n exp = invert ? exp.abs() : exp;\n\n if (exp.gt(MAX_EXPONENTIAL)) {\n return new BN(0);\n }\n\n let squaredBase = base;\n let result = ONE;\n\n if (squaredBase.gte(result)) {\n squaredBase = MAX.div(squaredBase);\n invert = !invert;\n }\n\n if (!exp.and(new BN(0x1)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x80)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x100)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x200)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x400)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x800)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x1000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n if (result.isZero()) {\n return new BN(0);\n }\n\n if (invert) {\n result = MAX.div(result);\n }\n\n return result;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\nimport { Rounding } from \"../types\";\n\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n const { div, mod } = x.mul(y).divmod(denominator);\n\n if (rounding == Rounding.Up && !mod.isZero()) {\n return div.add(new BN(1));\n }\n return div;\n}\n\nexport function q64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n return new Decimal(num.toString())\n .div(Decimal.pow(2, 64))\n .toDecimalPlaces(decimalPlaces);\n}\n\nexport function decimalToQ64(num: Decimal): BN {\n return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Rounding } from \"../types\";\nimport { mulDiv } from \"../math\";\nimport { SCALE_OFFSET } from \"../constants\";\n\n// aToB\n// √P' = √P * L / (L + Δx*√P)\n// bToA\n// √P' = √P + Δy / L\nexport function getNextSqrtPrice(\n amount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n aToB: boolean\n): BN {\n let result: BN;\n if (aToB) {\n const product = amount.mul(sqrtPrice);\n const denominator = liquidity.add(product);\n result = mulDiv(liquidity, sqrtPrice, denominator, Rounding.Up);\n } else {\n const quotient = amount.shln(SCALE_OFFSET * 2).div(liquidity);\n result = sqrtPrice.add(quotient);\n }\n\n return result;\n}\n\n// Δa = L * (1 / √P_lower - 1 / √P_upper)\n//\n// Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower)\n//\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n//\nexport function getLiquidityDeltaFromAmountA(\n amountA: BN,\n lowerSqrtPrice: BN, // current sqrt price\n upperSqrtPrice: BN // max sqrt price\n): BN {\n const product = amountA.mul(lowerSqrtPrice).mul(upperSqrtPrice); // Q128.128\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice); // Q64.64\n\n return product.div(denominator);\n}\n\n// Δb = L (√P_upper - √P_lower)\n// L = Δb / (√P_upper - √P_lower)\nexport function getLiquidityDeltaFromAmountB(\n amountB: BN,\n lowerSqrtPrice: BN, // min sqrt price\n upperSqrtPrice: BN // current sqrt price,\n): BN {\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice);\n const product = amountB.shln(128);\n return product.div(denominator);\n}\n\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n// Δa = L * (√P_upper - √P_lower) / √P_upper * √P_lower\nexport function getAmountAFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price\n maxSqrtPrice: BN,\n rounding: Rounding\n): BN {\n // Q128.128\n const product = liquidity.mul(maxSqrtPrice.sub(currentSqrtPrice));\n // Q128.128\n const denominator = currentSqrtPrice.mul(maxSqrtPrice);\n // Q64.64\n if (rounding == Rounding.Up) {\n return product.add(denominator.sub(new BN(1))).div(denominator);\n }\n return product.div(denominator);\n}\n\n// L = Δb / (√P_upper - √P_lower)\n// Δb = L * (√P_upper - √P_lower)\nexport function getAmountBFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price,\n minSqrtPrice: BN,\n rounding: Rounding\n): BN {\n const one = new BN(1).shln(128);\n const deltaPrice = currentSqrtPrice.sub(minSqrtPrice);\n const result = liquidity.mul(deltaPrice); // Q128\n if (rounding == Rounding.Up) {\n return result.add(one.sub(new BN(1))).div(one);\n }\n return result.shrn(128);\n}\n","import {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { MAX_CU_BUFFER, MIN_CU_BUFFER } from \"../constants\";\n\nexport const getSimulationComputeUnits = async (\n connection: Connection,\n instructions: Array<TransactionInstruction>,\n payer: PublicKey,\n lookupTables: Array<AddressLookupTableAccount> | [],\n commitment: Commitment = \"confirmed\"\n): Promise<number | null> => {\n const testInstructions = [\n // Set an arbitrarily high number in simulation\n // so we can be sure the transaction will succeed\n // and get the real compute units used\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n ...instructions,\n ];\n\n const testTransaction = new VersionedTransaction(\n new TransactionMessage({\n instructions: testInstructions,\n payerKey: payer,\n // RecentBlockhash can by any public key during simulation\n // since 'replaceRecentBlockhash' is set to 'true' below\n recentBlockhash: PublicKey.default.toString(),\n }).compileToV0Message(lookupTables)\n );\n\n const rpcResponse = await connection.simulateTransaction(testTransaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n commitment,\n });\n\n if (rpcResponse?.value?.err) {\n const logs = rpcResponse.value.logs?.join(\"\\n • \") || \"No logs available\";\n throw new Error(\n `Transaction simulation failed:\\n •${logs}` +\n JSON.stringify(rpcResponse?.value?.err)\n );\n }\n\n return rpcResponse.value.unitsConsumed || null;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns The estimated compute unit usage with the buffer.\n */\nexport const getEstimatedComputeUnitUsageWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n if (!buffer) {\n buffer = 0.1;\n }\n // Avoid negative value\n buffer = Math.max(0, buffer);\n // Limit buffer to 1\n buffer = Math.min(1, buffer);\n\n const estimatedComputeUnitUsage = await getSimulationComputeUnits(\n connection,\n instructions,\n feePayer,\n []\n );\n\n if (!estimatedComputeUnitUsage) {\n return 0;\n }\n\n let extraComputeUnitBuffer = estimatedComputeUnitUsage * buffer;\n if (extraComputeUnitBuffer > MAX_CU_BUFFER) {\n extraComputeUnitBuffer = MAX_CU_BUFFER;\n } else if (extraComputeUnitBuffer < MIN_CU_BUFFER) {\n extraComputeUnitBuffer = MIN_CU_BUFFER;\n }\n\n return estimatedComputeUnitUsage + extraComputeUnitBuffer;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer and converts it to a SetComputeUnitLimit instruction.\n * If the estimated compute unit usage cannot be retrieved, returns a SetComputeUnitLimit instruction with the fallback unit.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns A SetComputeUnitLimit instruction with the estimated compute unit usage.\n */\nexport const getEstimatedComputeUnitIxWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n const units = await getEstimatedComputeUnitUsageWithBuffer(\n connection,\n instructions,\n feePayer,\n buffer\n ).catch((error) => {\n console.error(\"Error::getEstimatedComputeUnitUsageWithBuffer\", error);\n return 1_400_000;\n });\n\n return ComputeBudgetProgram.setComputeUnitLimit({ units });\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport { BASIS_POINT_MAX, LIQUIDITY_SCALE } from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport { PoolState, PositionState } from \"../types\";\nimport { PublicKey } from \"@solana/web3.js\";\n/**\n * It takes an amount and a slippage rate, and returns the maximum amount that can be received with\n * that slippage rate\n * @param {BN} amount - The amount of tokens you want to buy.\n * @param {number} rate - The maximum percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The maximum amount of tokens that can be bought with the given amount of ETH, given the\n * slippage rate.\n */\nexport const getMaxAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 + rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * It takes an amount and a slippage rate, and returns the minimum amount that will be received after\n * slippage\n * @param {BN} amount - The amount of tokens you want to sell.\n * @param {number} rate - The percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The minimum amount that can be received after slippage is applied.\n */\nexport const getMinAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 - rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * Calculate price impact as a percentage\n * @param actualAmount Amount after slippage in token units\n * @param idealAmount Theoretical amount without slippage in token units\n * @returns Price impact as a percentage (e.g., 1.5 means 1.5%)\n */\nexport const getPriceImpact = (actualAmount: BN, idealAmount: BN): number => {\n const diff = idealAmount.sub(actualAmount);\n return new Decimal(diff.toString())\n .div(new Decimal(idealAmount.toString()))\n .mul(100)\n .toNumber();\n};\n\n// (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128\nexport const getPriceFromSqrtPrice = (\n sqrtPrice: BN,\n tokenADecimal: number,\n tokenBDecimal: number\n): string => {\n const decimalSqrtPrice = new Decimal(sqrtPrice.toString());\n const price = decimalSqrtPrice\n .mul(decimalSqrtPrice)\n .mul(new Decimal(10 ** (tokenADecimal - tokenBDecimal)))\n .div(Decimal.pow(2, 128))\n .toString();\n\n return price;\n};\n\n// sqrt(price / 10^(tokenADecimal - tokenBDecimal)) * 2^64\nexport const getSqrtPriceFromPrice = (\n price: string,\n tokenADecimal: number,\n tokenBDecimal: number\n): BN => {\n const decimalPrice = new Decimal(price);\n\n const adjustedByDecimals = decimalPrice.div(\n new Decimal(10 ** (tokenADecimal - tokenBDecimal))\n );\n\n const sqrtValue = Decimal.sqrt(adjustedByDecimals);\n\n const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64));\n\n return new BN(sqrtValueQ64.floor().toFixed());\n};\n\n// fee = totalLiquidity * feePerTokenStore\n// precision: (totalLiquidity * feePerTokenStore) >> 128\nexport const getUnClaimReward = (\n poolState: PoolState,\n positionState: PositionState\n): {\n feeTokenA: BN;\n feeTokenB: BN;\n rewards: BN[];\n} => {\n const totalPositionLiquidity = positionState.unlockedLiquidity\n .add(positionState.vestedLiquidity)\n .add(positionState.permanentLockedLiquidity);\n\n const feeAPerTokenStored = new BN(\n Buffer.from(poolState.feeAPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeAPerTokenCheckpoint).reverse()));\n\n const feeBPerTokenStored = new BN(\n Buffer.from(poolState.feeBPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeBPerTokenCheckpoint).reverse()));\n\n const feeA = totalPositionLiquidity\n .mul(feeAPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n const feeB = totalPositionLiquidity\n .mul(feeBPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n\n return {\n feeTokenA: positionState.feeAPending.add(feeA),\n feeTokenB: positionState.feeBPending.add(feeB),\n rewards:\n positionState.rewardInfos.length > 0\n ? positionState.rewardInfos.map((item) => item.rewardPendings)\n : [],\n };\n};\n","import { GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\n\nexport const positionByPoolFilter = (\n pool: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: pool.toBase58(),\n offset: 8,\n },\n };\n};\n\nexport const vestingByPositionFilter = (\n position: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: position.toBase58(),\n offset: 8,\n },\n };\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\n\n// a = L * (1/s - 1/pb)\n// b = L * (s - pa)\n// b/a = (s - pa) / (1/s - 1/pb)\n// With: x = 1 / pb and y = b/a\n// => s ^ 2 + s * (-pa + x * y) - y = 0\n// s = [(pa - xy) + √((xy - pa)² + 4y)]/2\nexport function calculateInitSqrtPrice(\n tokenAAmount: BN,\n tokenBAmount: BN,\n minSqrtPrice: BN,\n maxSqrtPrice: BN\n): BN {\n if (tokenAAmount.isZero() || tokenBAmount.isZero()) {\n throw new Error(\"Amount cannot be zero\");\n }\n\n const amountADecimal = new Decimal(tokenAAmount.toString());\n const amountBDecimal = new Decimal(tokenBAmount.toString());\n const minSqrtPriceDecimal = new Decimal(minSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n const maxSqrtPriceDecimal = new Decimal(maxSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n\n const x = new Decimal(1).div(maxSqrtPriceDecimal);\n const y = amountBDecimal.div(amountADecimal);\n const xy = x.mul(y);\n\n const paMinusXY = minSqrtPriceDecimal.sub(xy);\n const xyMinusPa = xy.sub(minSqrtPriceDecimal);\n\n const fourY = new Decimal(4).mul(y);\n\n const discriminant = xyMinusPa.mul(xyMinusPa).add(fourY);\n\n // sqrt_discriminant = √discriminant\n const sqrtDiscriminant = discriminant.sqrt();\n const result = paMinusXY\n .add(sqrtDiscriminant)\n .div(new Decimal(2))\n .mul(Decimal.pow(2, 64));\n\n return new BN(result.floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n calculateFee,\n getEpochFee,\n getTransferFeeConfig,\n MAX_FEE_BASIS_POINTS,\n Mint,\n TransferFee,\n} from \"@solana/spl-token\";\n\ninterface TransferFeeIncludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nfunction calculatePreFeeAmount(transferFee: TransferFee, postFeeAmount: BN) {\n if (postFeeAmount.isZero()) {\n return new BN(0);\n }\n\n if (transferFee.transferFeeBasisPoints === 0) {\n return postFeeAmount;\n }\n\n const maximumFee = new BN(transferFee.maximumFee.toString());\n\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return postFeeAmount.add(maximumFee);\n }\n\n const ONE_IN_BASIS_POINTS = new BN(MAX_FEE_BASIS_POINTS);\n const numerator = postFeeAmount.mul(ONE_IN_BASIS_POINTS);\n const denominator = ONE_IN_BASIS_POINTS.sub(\n new BN(transferFee.transferFeeBasisPoints)\n );\n\n const rawPreFeeAmount = numerator\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n\n if (rawPreFeeAmount.sub(postFeeAmount).gte(maximumFee)) {\n return postFeeAmount.add(maximumFee);\n }\n\n return rawPreFeeAmount;\n}\n\nfunction calculateInverseFee(transferFee: TransferFee, postFeeAmount: BN) {\n const preFeeAmount = calculatePreFeeAmount(transferFee, postFeeAmount);\n return new BN(\n calculateFee(transferFee, BigInt(preFeeAmount.toString())).toString()\n );\n}\n\nexport function calculateTransferFeeIncludedAmount(\n transferFeeExcludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeIncludedAmount {\n if (transferFeeExcludedAmount.isZero()) {\n return {\n amount: new BN(0),\n transferFee: new BN(0),\n };\n }\n\n const transferFeeConfig = getTransferFeeConfig(mint);\n\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch));\n\n const transferFee =\n epochFee.transferFeeBasisPoints == MAX_FEE_BASIS_POINTS\n ? new BN(epochFee.maximumFee.toString())\n : calculateInverseFee(epochFee, transferFeeExcludedAmount);\n\n const transferFeeIncludedAmount = transferFeeExcludedAmount.add(transferFee);\n\n return {\n amount: transferFeeIncludedAmount,\n transferFee,\n };\n}\n\ninterface TransferFeeExcludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeExcludedAmount(\n transferFeeIncludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeExcludedAmount {\n const transferFeeConfig = getTransferFeeConfig(mint);\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeIncludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const transferFeeIncludedAmountN = BigInt(\n transferFeeIncludedAmount.toString()\n );\n\n const transferFee = calculateFee(\n getEpochFee(transferFeeConfig, BigInt(currentEpoch)),\n transferFeeIncludedAmountN\n );\n\n const transferFeeExcludedAmount = new BN(\n (transferFeeIncludedAmountN - transferFee).toString()\n );\n\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(transferFee.toString()),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PositionState, VestingState } from \"../types\";\nimport { min } from \"bn.js\";\n\n/**\n * Checks if a vesting schedule is ready for full release\n * @param vestingData The vesting account data\n * @param currentPoint Current timestamp or slot\n * @returns True if the vesting is complete and all liquidity can be released\n */\nexport function isVestingComplete(\n vestingData: VestingState,\n currentPoint: BN\n): boolean {\n const cliffPoint = vestingData.cliffPoint;\n const periodFrequency = vestingData.periodFrequency;\n const numberOfPeriods = vestingData.numberOfPeriod;\n\n const endPoint = cliffPoint.add(periodFrequency.muln(numberOfPeriods));\n\n return currentPoint.gte(endPoint);\n}\n\n/**\n * Gets the total amount of liquidity in the vesting schedule\n * @param vestingData The vesting account data\n * @returns The total locked liquidity amount\n */\nexport function getTotalLockedLiquidity(vestingData: VestingState): BN {\n return vestingData.cliffUnlockLiquidity.add(\n vestingData.liquidityPerPeriod.mul(new BN(vestingData.numberOfPeriod))\n );\n}\n\n/**\n * Calculates the available liquidity to withdraw based on vesting schedule\n * @param vestingData The vesting account data\n * @param positionData The position account data\n * @param currentPoint Current timestamp or slot\n * @returns The amount of liquidity available to withdraw\n */\nexport function getAvailableVestingLiquidity(\n vestingData: VestingState,\n currentPoint: BN\n): BN {\n const {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n totalReleasedLiquidity,\n } = vestingData;\n\n if (currentPoint.lt(cliffPoint)) {\n return new BN(0);\n }\n\n if (periodFrequency.isZero()) {\n return cliffUnlockLiquidity;\n }\n\n let passedPeriod = new BN(currentPoint).sub(cliffPoint).div(periodFrequency);\n\n passedPeriod = min(passedPeriod, new BN(numberOfPeriod));\n\n // total unlocked liquidity: cliff + (periods * per_period)\n const unlockedLiquidity = cliffUnlockLiquidity.add(\n passedPeriod.mul(liquidityPerPeriod)\n );\n const availableReleasingLiquidity = unlockedLiquidity.sub(\n totalReleasedLiquidity\n );\n\n return availableReleasingLiquidity;\n}\n","export * from \"./CpAmm\";\nexport * from \"./pda\";\nexport * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./helpers\";\nexport * from \"./types\";\nexport * from \"./math\";\nexport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nexport default CpAmmIDL;\n"]}
|