@panoptic-eng/sdk 1.0.16 → 1.0.18
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/cow/index.js +3 -3
- package/dist/{cow-6TKtUiII.js → cow-BciGptKA.js} +2 -2
- package/dist/{cow-6TKtUiII.js.map → cow-BciGptKA.js.map} +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/{irm-BFNo29rr.js → irm-y3T4tvfM.js} +2 -2
- package/dist/{irm-BFNo29rr.js.map → irm-y3T4tvfM.js.map} +1 -1
- package/dist/panoptic/v2/index.d.ts +37 -1
- package/dist/panoptic/v2/index.d.ts.map +1 -1
- package/dist/panoptic/v2/index.js +6 -6
- package/dist/{position-DH1n4Lj7.js → position-Bo7y8jcj.js} +50 -2
- package/dist/position-Bo7y8jcj.js.map +1 -0
- package/dist/{router-BQFLrRaH.js → router-qZEEc47U.js} +2 -2
- package/dist/{router-BQFLrRaH.js.map → router-qZEEc47U.js.map} +1 -1
- package/dist/uniswap/index.js +3 -3
- package/dist/{writes-DSaFjWre.js → writes-DQ-H14sj.js} +2 -2
- package/dist/{writes-DSaFjWre.js.map → writes-DQ-H14sj.js.map} +1 -1
- package/package.json +1 -1
- package/dist/position-DH1n4Lj7.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"position-DH1n4Lj7.js","names":["params: GetBlockMetaParams","Q192","exponent: bigint","value: bigint","value: string","numerator: bigint","denominator: bigint","precision: bigint","leftNumerator: bigint","leftDenominator: bigint","rightNumerator: bigint","rightDenominator: bigint","tick: bigint","sqrtPriceX96: bigint","decimals0: bigint","decimals1: bigint","price: string","tickLower: bigint","tickUpper: bigint","feeBps: bigint","tickSpacing: bigint","currentTick: bigint","toleranceBps: bigint","decodePositionBalance","balanceData: bigint","value: bigint","logs: Log[]","events: PanopticEvent[]","client: PublicClient","hash: Hash","confirmations?: bigint","params: SubmitWriteParams","hash","gasOverrides: Record<string, unknown>","message: string","cause?: Error","solvent: bigint","numberOfTicks: bigint","cause?: Error","tokenAddress: Address","assetsRequested: bigint","assetBalance: bigint","parameterType: bigint","currentTick: bigint","token: Address","from: Address","amount: bigint","balance: bigint","walletChainId: bigint","expectedChainId: bigint","cause?: Error","requestedPool: Address","configuredPool: Address","elapsedMs: bigint","blocksProcessed: bigint","blocksRemaining: bigint","providerBlock: bigint","expectedBlock: bigint","label: string","index: number","functionName: string","currentCount: bigint","attemptedAdd: bigint","level: SafeMode","reason: string","blockTimestamp: bigint","currentTimestamp: bigint","stalenessSeconds: bigint","healthStatus: PoolHealthStatus","lastUpdate: bigint","currentTime: bigint","method: string","retriesAttempted: bigint","code: bigint","rpcMessage: string","dataType: 'poolMeta' | 'positions' | 'positionMeta'","key: string","tickLimitLow: bigint","tickLimitHigh: bigint","token: Address","operation: string","diagnostics: BatchDiagnostic[]","tokenAddress: Address","token0: Address","token1: Address","errorConstructors: Record<\n string,\n (args: readonly unknown[], cause?: Error) => PanopticError\n>","error: unknown","found: { errorName: string; args: readonly unknown[] } | null","current: Record<string, unknown> | null","errorName: string","args: readonly unknown[]","originalError: unknown","selector: `0x${string}`","i: { type: string }","foundData: `0x${string}` | null","error: PanopticError","errorClass: new (...args: unknown[]) => T","erc20Abi","params: GetPoolMetadataParams","underlyingPoolId: string","fee: bigint","params: GetPoolParams","vegoid","collateralTracker0: CollateralTracker","collateralTracker1: CollateralTracker","riskEngine: RiskEngine","params: GetUtilizationParams","collateralToken0: Address","collateralToken1: Address","params: GetOracleStateParams","params: GetRiskParametersParams","params: {\n client: PublicClient\n poolAddress: Address\n builderCode: bigint\n}","client: PublicClient","poolAddress: Address","poolId: bigint","poolKeyBytes: `0x${string}`","params: FetchPoolIdParams","tick: bigint","isAssetToken0: boolean","numerator: bigint","denominator: bigint","leg: Pick<TokenIdLeg, 'asset'>","assetIndex?: bigint","leg: TokenIdLeg","m: bigint","qCurrentTick: bigint","qStrikeTick: bigint","qMintTick: bigint","_definedRisk: boolean","tokenType: bigint","legs: Pick<TokenIdLeg, 'tokenType' | 'isLong'>[]","currentTick: bigint","mintTick: bigint","positionSize: bigint","poolTickSpacing: bigint","definedRisk: boolean","v: bigint","itm: bigint","mintTick: bigint | undefined","vDelta","isPut","debtDelta","itmDelta","vDelta: bigint","input: PositionGreeksInput","swapAtMint: boolean","input: PositionGreeksInput & { swapAtMint: boolean }","encodedStrike: bigint","index: bigint","leg: bigint","tokenId: bigint","encodedPosition: bigint","legs: LegParams[]","hex: string","length: number","balance: bigint","params: GetPositionParams","legs: TokenIdLeg[]","params: GetPositionsParams","_meta","ids: bigint[]","positionBalances: readonly bigint[]","meta: BlockMeta","positions: Position[]","candidates: bigint[][]","candidate: bigint[]","validTokenIds: bigint[]","validBalances: bigint[]","params: GetPositionGreeksParams"],"sources":["../src/generated.ts","../src/panoptic/v2/clients/blockMeta.ts","../src/panoptic/v2/utils/constants.ts","../src/panoptic/v2/formatters/tick.ts","../src/panoptic/v2/writes/utils.ts","../src/panoptic/v2/errors/base.ts","../src/panoptic/v2/errors/contract.ts","../src/panoptic/v2/errors/sdk.ts","../src/panoptic/v2/errors/errorsAbi.ts","../src/panoptic/v2/errors/parser.ts","../src/panoptic/v2/abis/stateView.ts","../src/panoptic/v2/abis/uniswapV3Pool.ts","../src/panoptic/v2/reads/pool.ts","../src/panoptic/v2/greeks/index.ts","../src/panoptic/v2/tokenId/constants.ts","../src/panoptic/v2/utils/option-encoding-v2.ts","../src/panoptic/v2/reads/position.ts"],"sourcesContent":["//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// CollateralTrackerV2\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const collateralTrackerV2Abi = [\n { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },\n {\n type: 'function',\n inputs: [],\n name: 'accrueInterest',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'spender', internalType: 'address', type: 'address' },\n ],\n name: 'allowance',\n outputs: [{ name: 'allowance', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'asset',\n outputs: [{ name: 'assetTokenAddress', internalType: 'address', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'assetsAndInterest',\n outputs: [\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'assetsOf',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'borrowIndex',\n outputs: [{ name: '', internalType: 'uint80', type: 'uint80' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n name: 'convertToAssets',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n name: 'convertToShares',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'decimals',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'delegatee', internalType: 'address', type: 'address' }],\n name: 'delegate',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'assets', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'deposit',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getPoolData',\n outputs: [\n { name: 'depositedAssets', internalType: 'uint256', type: 'uint256' },\n { name: 'insideAMM', internalType: 'uint256', type: 'uint256' },\n { name: 'creditedShares', internalType: 'uint256', type: 'uint256' },\n {\n name: 'currentPoolUtilization',\n internalType: 'uint256',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'interestRate',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'user', internalType: 'address', type: 'address' }],\n name: 'interestState',\n outputs: [\n { name: 'userBorrowIndex', internalType: 'int128', type: 'int128' },\n { name: 'netBorrows', internalType: 'int128', type: 'int128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'lastInteractionTimestamp',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'address', type: 'address' }],\n name: 'maxDeposit',\n outputs: [{ name: 'maxAssets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'address', type: 'address' }],\n name: 'maxMint',\n outputs: [{ name: 'maxShares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'maxRedeem',\n outputs: [{ name: 'maxShares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'maxWithdraw',\n outputs: [{ name: 'maxAssets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'shares', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n ],\n name: 'mint',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'owedInterest',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'panopticPool',\n outputs: [{ name: '', internalType: 'contract PanopticPoolV2', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'poolFee',\n outputs: [{ name: '_poolFee', internalType: 'uint24', type: 'uint24' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'poolManager',\n outputs: [{ name: '', internalType: 'contract IPoolManager', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n name: 'previewDeposit',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n name: 'previewMint',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'previewOwedInterest',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n name: 'previewRedeem',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n name: 'previewWithdraw',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'rateAtTarget',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'shares', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'redeem',\n outputs: [{ name: 'assets', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'reentrancyGuardEntered',\n outputs: [{ name: 'entered', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'refunder', internalType: 'address', type: 'address' },\n { name: 'refundee', internalType: 'address', type: 'address' },\n { name: 'assets', internalType: 'int256', type: 'int256' },\n ],\n name: 'refund',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'delegatee', internalType: 'address', type: 'address' }],\n name: 'revoke',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'riskEngine',\n outputs: [{ name: '', internalType: 'contract IRiskEngine', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'optionOwner', internalType: 'address', type: 'address' },\n { name: 'longAmount', internalType: 'int128', type: 'int128' },\n { name: 'shortAmount', internalType: 'int128', type: 'int128' },\n { name: 'ammDeltaAmount', internalType: 'int128', type: 'int128' },\n { name: 'realizedPremium', internalType: 'int128', type: 'int128' },\n {\n name: 'riskParameters',\n internalType: 'RiskParameters',\n type: 'uint256',\n },\n ],\n name: 'settleBurn',\n outputs: [{ name: '', internalType: 'int128', type: 'int128' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'liquidator', internalType: 'address', type: 'address' },\n { name: 'liquidatee', internalType: 'address', type: 'address' },\n { name: 'bonus', internalType: 'int256', type: 'int256' },\n ],\n name: 'settleLiquidation',\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'optionOwner', internalType: 'address', type: 'address' },\n { name: 'longAmount', internalType: 'int128', type: 'int128' },\n { name: 'shortAmount', internalType: 'int128', type: 'int128' },\n { name: 'ammDeltaAmount', internalType: 'int128', type: 'int128' },\n {\n name: 'riskParameters',\n internalType: 'RiskParameters',\n type: 'uint256',\n },\n ],\n name: 'settleMint',\n outputs: [\n { name: '', internalType: 'uint32', type: 'uint32' },\n { name: '', internalType: 'int128', type: 'int128' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'token0',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'token1',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalAssets',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'totalSupply',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transfer',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'underlyingIsToken0',\n outputs: [{ name: '_underlyingIsToken0', internalType: 'bool', type: 'bool' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'underlyingToken',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes', type: 'bytes' }],\n name: 'unlockCallback',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'unrealizedGlobalInterest',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'assets', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n ],\n name: 'withdraw',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'assets', internalType: 'uint256', type: 'uint256' },\n { name: 'receiver', internalType: 'address', type: 'address' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'usePremiaAsCollateral', internalType: 'bool', type: 'bool' },\n ],\n name: 'withdraw',\n outputs: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'spender',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'builder',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'commissionPaidProtocol',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n {\n name: 'commissionPaidBuilder',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'CommissionPaid',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'sender',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'assets',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'shares',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Deposit',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'interestOwed',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'interestPaid',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'sharesBurned',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'InsolvencyPenaltyApplied',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'liquidatee',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'liquidator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'protocolLossAssets',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'protocolLossShares',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'ProtocolLossRealized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Transfer',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'sender',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'receiver',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'assets',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'shares',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Withdraw',\n },\n { type: 'error', inputs: [], name: 'AlreadyInitialized' },\n { type: 'error', inputs: [], name: 'BelowMinimumRedemption' },\n { type: 'error', inputs: [], name: 'CastingError' },\n { type: 'error', inputs: [], name: 'DepositTooLarge' },\n { type: 'error', inputs: [], name: 'ExceedsMaximumRedemption' },\n {\n type: 'error',\n inputs: [\n { name: 'tokenAddress', internalType: 'address', type: 'address' },\n { name: 'assetsRequested', internalType: 'uint256', type: 'uint256' },\n { name: 'assetBalance', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'NotEnoughTokens',\n },\n { type: 'error', inputs: [], name: 'NotPanopticPool' },\n { type: 'error', inputs: [], name: 'PositionCountNotZero' },\n { type: 'error', inputs: [], name: 'Reentrancy' },\n {\n type: 'error',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferFailed',\n },\n { type: 'error', inputs: [], name: 'UnauthorizedUniswapCallback' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// PanopticFactoryV3\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const panopticFactoryV3Abi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: '_SFPM',\n internalType: 'contract SemiFungiblePositionManagerV3',\n type: 'address',\n },\n {\n name: '_univ3Factory',\n internalType: 'contract IUniswapV3Factory',\n type: 'address',\n },\n { name: '_poolReference', internalType: 'address', type: 'address' },\n {\n name: '_collateralReference',\n internalType: 'address',\n type: 'address',\n },\n { name: 'properties', internalType: 'bytes32[]', type: 'bytes32[]' },\n { name: 'indices', internalType: 'uint256[][]', type: 'uint256[][]' },\n { name: 'pointers', internalType: 'Pointer[][]', type: 'uint256[][]' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'panopticPool', internalType: 'address', type: 'address' },\n { name: 'symbol0', internalType: 'string', type: 'string' },\n { name: 'symbol1', internalType: 'string', type: 'string' },\n { name: 'fee', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'constructMetadata',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token0', internalType: 'address', type: 'address' },\n { name: 'token1', internalType: 'address', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n },\n { name: 'salt', internalType: 'uint96', type: 'uint96' },\n ],\n name: 'deployNewPool',\n outputs: [\n {\n name: 'newPoolContract',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n name: 'getApproved',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'univ3pool',\n internalType: 'contract IUniswapV3Pool',\n type: 'address',\n },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n },\n ],\n name: 'getPanopticPool',\n outputs: [{ name: '', internalType: 'contract PanopticPoolV2', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n ],\n name: 'isApprovedForAll',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'deployerAddress', internalType: 'address', type: 'address' },\n { name: 'v3Pool', internalType: 'address', type: 'address' },\n { name: 'riskEngine', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'uint96', type: 'uint96' },\n { name: 'loops', internalType: 'uint256', type: 'uint256' },\n { name: 'minTargetRarity', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'minePoolAddress',\n outputs: [\n { name: 'bestSalt', internalType: 'uint96', type: 'uint96' },\n { name: 'highestRarity', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'uint256', type: 'uint256' }],\n name: 'ownerOf',\n outputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'operator', internalType: 'address', type: 'address' },\n { name: 'approved', internalType: 'bool', type: 'bool' },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],\n name: 'supportsInterface',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }],\n name: 'tokenURI',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'spender',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'ApprovalForAll',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'poolAddress',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n {\n name: 'uniswapPool',\n internalType: 'contract IUniswapV3Pool',\n type: 'address',\n indexed: true,\n },\n {\n name: 'collateralTracker0',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n indexed: false,\n },\n {\n name: 'collateralTracker1',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n indexed: false,\n },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n indexed: false,\n },\n ],\n name: 'PoolDeployed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true },\n ],\n name: 'Transfer',\n },\n { type: 'error', inputs: [], name: 'AlreadyInitialized' },\n { type: 'error', inputs: [], name: 'CreateFail' },\n { type: 'error', inputs: [], name: 'PoolNotInitialized' },\n { type: 'error', inputs: [], name: 'ZeroAddress' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// PanopticFactoryV4\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const panopticFactoryV4Abi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: '_SFPM',\n internalType: 'contract SemiFungiblePositionManagerV4',\n type: 'address',\n },\n {\n name: '_manager',\n internalType: 'contract IPoolManager',\n type: 'address',\n },\n { name: '_poolReference', internalType: 'address', type: 'address' },\n {\n name: '_collateralReference',\n internalType: 'address',\n type: 'address',\n },\n { name: 'properties', internalType: 'bytes32[]', type: 'bytes32[]' },\n { name: 'indices', internalType: 'uint256[][]', type: 'uint256[][]' },\n { name: 'pointers', internalType: 'Pointer[][]', type: 'uint256[][]' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'spender', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'panopticPool', internalType: 'address', type: 'address' },\n { name: 'symbol0', internalType: 'string', type: 'string' },\n { name: 'symbol1', internalType: 'string', type: 'string' },\n { name: 'fee', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'constructMetadata',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'key',\n internalType: 'struct PoolKey',\n type: 'tuple',\n components: [\n { name: 'currency0', internalType: 'Currency', type: 'address' },\n { name: 'currency1', internalType: 'Currency', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'tickSpacing', internalType: 'int24', type: 'int24' },\n { name: 'hooks', internalType: 'contract IHooks', type: 'address' },\n ],\n },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n },\n { name: 'salt', internalType: 'uint96', type: 'uint96' },\n ],\n name: 'deployNewPool',\n outputs: [\n {\n name: 'newPoolContract',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n name: 'getApproved',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'keyV4',\n internalType: 'struct PoolKey',\n type: 'tuple',\n components: [\n { name: 'currency0', internalType: 'Currency', type: 'address' },\n { name: 'currency1', internalType: 'Currency', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'tickSpacing', internalType: 'int24', type: 'int24' },\n { name: 'hooks', internalType: 'contract IHooks', type: 'address' },\n ],\n },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n },\n ],\n name: 'getPanopticPool',\n outputs: [{ name: '', internalType: 'contract PanopticPoolV2', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n ],\n name: 'isApprovedForAll',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'deployerAddress', internalType: 'address', type: 'address' },\n {\n name: 'key',\n internalType: 'struct PoolKey',\n type: 'tuple',\n components: [\n { name: 'currency0', internalType: 'Currency', type: 'address' },\n { name: 'currency1', internalType: 'Currency', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'tickSpacing', internalType: 'int24', type: 'int24' },\n { name: 'hooks', internalType: 'contract IHooks', type: 'address' },\n ],\n },\n { name: 'riskEngine', internalType: 'address', type: 'address' },\n { name: 'salt', internalType: 'uint96', type: 'uint96' },\n { name: 'loops', internalType: 'uint256', type: 'uint256' },\n { name: 'minTargetRarity', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'minePoolAddress',\n outputs: [\n { name: 'bestSalt', internalType: 'uint96', type: 'uint96' },\n { name: 'highestRarity', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'name',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'id', internalType: 'uint256', type: 'uint256' }],\n name: 'ownerOf',\n outputs: [{ name: 'owner', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'operator', internalType: 'address', type: 'address' },\n { name: 'approved', internalType: 'bool', type: 'bool' },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],\n name: 'supportsInterface',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'tokenId', internalType: 'uint256', type: 'uint256' }],\n name: 'tokenURI',\n outputs: [{ name: '', internalType: 'string', type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'to', internalType: 'address', type: 'address' },\n { name: 'id', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'transferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'spender',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true },\n ],\n name: 'Approval',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'ApprovalForAll',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'poolAddress',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n { name: 'idV4', internalType: 'PoolId', type: 'bytes32', indexed: true },\n {\n name: 'collateralTracker0',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n indexed: false,\n },\n {\n name: 'collateralTracker1',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n indexed: false,\n },\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n indexed: false,\n },\n ],\n name: 'PoolDeployed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: true },\n ],\n name: 'Transfer',\n },\n { type: 'error', inputs: [], name: 'AlreadyInitialized' },\n { type: 'error', inputs: [], name: 'CreateFail' },\n { type: 'error', inputs: [], name: 'PoolNotInitialized' },\n { type: 'error', inputs: [], name: 'ZeroAddress' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// PanopticGuardian\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const panopticGuardianAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: 'guardianAdmin', internalType: 'address', type: 'address' },\n { name: 'treasurer', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'GUARDIAN_ADMIN',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'TREASURER',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'UNLOCK_DELAY',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'address', type: 'address' }],\n name: 'builderAdminRevoked',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'cancelUnlock',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'riskEngine',\n internalType: 'contract IRiskEngine',\n type: 'address',\n },\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'collect',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'builderCode', internalType: 'uint256', type: 'uint256' },\n { name: 'builderAdmin', internalType: 'address', type: 'address' },\n {\n name: 'builderFactory',\n internalType: 'contract BuilderFactory',\n type: 'address',\n },\n ],\n name: 'deployBuilder',\n outputs: [{ name: 'wallet', internalType: 'address', type: 'address' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'executeUnlock',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n { name: 'builderCode', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'isBuilderAdmin',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'isPoolUnlockReady',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'lockPool',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n { name: 'builderCode', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'lockPoolAsBuilder',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'requestUnlock',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'admin', internalType: 'address', type: 'address' },\n { name: 'revoked', internalType: 'bool', type: 'bool' },\n ],\n name: 'setBuilderAdminRevoked',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: '', internalType: 'contract PanopticPoolV2', type: 'address' }],\n name: 'unlockEta',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'admin',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'BuilderAdminRestored',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'admin',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'BuilderAdminRevoked',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'builderCode',\n internalType: 'uint256',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'wallet',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'BuilderDeployed',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n {\n name: 'locker',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'PoolLocked',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'PoolUnlocked',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'token',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'TokensCollected',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'UnlockCancelled',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n indexed: true,\n },\n { name: 'eta', internalType: 'uint256', type: 'uint256', indexed: false },\n ],\n name: 'UnlockRequested',\n },\n { type: 'error', inputs: [], name: 'InvalidBuilderCode' },\n { type: 'error', inputs: [], name: 'NoPendingUnlock' },\n { type: 'error', inputs: [], name: 'NotAuthorizedBuilder' },\n { type: 'error', inputs: [], name: 'NotFactoryAdmin' },\n { type: 'error', inputs: [], name: 'NotGuardianAdmin' },\n { type: 'error', inputs: [], name: 'NotTreasurer' },\n { type: 'error', inputs: [], name: 'UnlockAlreadyPending' },\n {\n type: 'error',\n inputs: [{ name: 'eta', internalType: 'uint256', type: 'uint256' }],\n name: 'UnlockNotReady',\n },\n { type: 'error', inputs: [], name: 'ZeroAddress' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// PanopticPoolV2\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const panopticPoolV2Abi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: '_sfpm',\n internalType: 'contract ISemiFungiblePositionManager',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'SFPM',\n outputs: [\n {\n name: '',\n internalType: 'contract ISemiFungiblePositionManager',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'minValue0', internalType: 'uint256', type: 'uint256' },\n { name: 'minValue1', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'assertMinCollateralValues',\n outputs: [],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'collateralToken0',\n outputs: [\n {\n name: '',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'collateralToken1',\n outputs: [\n {\n name: '',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n {\n name: 'finalPositionIdList',\n internalType: 'TokenId[]',\n type: 'uint256[]',\n },\n { name: 'positionSizes', internalType: 'uint128[]', type: 'uint128[]' },\n {\n name: 'tickAndSpreadLimits',\n internalType: 'int24[3][]',\n type: 'int24[3][]',\n },\n { name: 'usePremiaAsCollateral', internalType: 'bool', type: 'bool' },\n { name: 'builderCode', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'dispatch',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'positionIdListFrom',\n internalType: 'TokenId[]',\n type: 'uint256[]',\n },\n { name: 'account', internalType: 'address', type: 'address' },\n {\n name: 'positionIdListTo',\n internalType: 'TokenId[]',\n type: 'uint256[]',\n },\n {\n name: 'positionIdListToFinal',\n internalType: 'TokenId[]',\n type: 'uint256[]',\n },\n {\n name: 'usePremiaAsCollateral',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n ],\n name: 'dispatchFrom',\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [{ name: 'account', internalType: 'address', type: 'address' }],\n name: 'getAssetsOf',\n outputs: [\n { name: 'assets0', internalType: 'uint256', type: 'uint256' },\n { name: 'assets1', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n ],\n name: 'getChunkData',\n outputs: [\n {\n name: 'liquidities0',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'liquidities1',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n { name: 'settled0', internalType: 'LeftRightUnsigned', type: 'uint256' },\n { name: 'settled1', internalType: 'LeftRightUnsigned', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getCurrentTick',\n outputs: [{ name: 'currentTick', internalType: 'int24', type: 'int24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'includePendingPremium', internalType: 'bool', type: 'bool' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'getFullPositionsData',\n outputs: [\n {\n name: 'shortPremium',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'longPremium',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'positionBalances',\n internalType: 'PositionBalance[]',\n type: 'uint256[]',\n },\n {\n name: 'collateralRequirements',\n internalType: 'LeftRightUnsigned[]',\n type: 'uint256[]',\n },\n {\n name: 'netPremiaPerPosition',\n internalType: 'LeftRightSigned[]',\n type: 'int256[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getOracleTicks',\n outputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: 'spotTick', internalType: 'int24', type: 'int24' },\n { name: 'medianTick', internalType: 'int24', type: 'int24' },\n { name: 'latestTick', internalType: 'int24', type: 'int24' },\n { name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'builderCode', internalType: 'uint256', type: 'uint256' }],\n name: 'getRiskParameters',\n outputs: [\n {\n name: 'riskParameters',\n internalType: 'RiskParameters',\n type: 'uint256',\n },\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'getTWAP',\n outputs: [{ name: 'twapTick', internalType: 'int24', type: 'int24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'isSafeMode',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'lockSafeMode',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [{ name: 'user', internalType: 'address', type: 'address' }],\n name: 'numberOfLegs',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'onERC1155Received',\n outputs: [{ name: '', internalType: 'bytes4', type: 'bytes4' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'pokeOracle',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'poolId',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'poolKey',\n outputs: [{ name: 'key', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'poolManager',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'reentrancyGuardEntered',\n outputs: [{ name: 'entered', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'riskEngine',\n outputs: [{ name: '', internalType: 'contract IRiskEngine', type: 'address' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'tickSpacing',\n outputs: [{ name: '', internalType: 'int24', type: 'int24' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [],\n name: 'unlockSafeMode',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'usePremiaAsCollateral', internalType: 'bool', type: 'bool' },\n ],\n name: 'validateCollateralWithdrawable',\n outputs: [],\n stateMutability: 'view',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'liquidator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'liquidatee',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'bonusAmounts',\n internalType: 'LeftRightSigned',\n type: 'int256',\n indexed: false,\n },\n ],\n name: 'AccountLiquidated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'exercisor',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'exerciseFee',\n internalType: 'LeftRightSigned',\n type: 'int256',\n indexed: false,\n },\n ],\n name: 'ForcedExercised',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'positionSize',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'premiaByLeg',\n internalType: 'LeftRightSigned[4]',\n type: 'int256[4]',\n indexed: false,\n },\n ],\n name: 'OptionBurnt',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'balanceData',\n internalType: 'PositionBalance',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'OptionMinted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'user', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'legIndex',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'settledAmounts',\n internalType: 'LeftRightSigned',\n type: 'int256',\n indexed: false,\n },\n ],\n name: 'PremiumSettled',\n },\n {\n type: 'error',\n inputs: [\n { name: 'solvent', internalType: 'uint256', type: 'uint256' },\n { name: 'numberOfTicks', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'AccountInsolvent',\n },\n { type: 'error', inputs: [], name: 'AlreadyInitialized' },\n { type: 'error', inputs: [], name: 'CastingError' },\n { type: 'error', inputs: [], name: 'DuplicateTokenId' },\n { type: 'error', inputs: [], name: 'EffectiveLiquidityAboveThreshold' },\n { type: 'error', inputs: [], name: 'InputListFail' },\n { type: 'error', inputs: [], name: 'InvalidTick' },\n { type: 'error', inputs: [], name: 'InvalidTickBound' },\n { type: 'error', inputs: [], name: 'LiquidityTooHigh' },\n { type: 'error', inputs: [], name: 'NetLiquidityZero' },\n { type: 'error', inputs: [], name: 'NoLegsExercisable' },\n { type: 'error', inputs: [], name: 'NotGuardian' },\n { type: 'error', inputs: [], name: 'NotMarginCalled' },\n { type: 'error', inputs: [], name: 'PositionNotOwned' },\n { type: 'error', inputs: [], name: 'PriceImpactTooLarge' },\n { type: 'error', inputs: [], name: 'Reentrancy' },\n { type: 'error', inputs: [], name: 'StaleOracle' },\n { type: 'error', inputs: [], name: 'TokenIdHasZeroLegs' },\n { type: 'error', inputs: [], name: 'TooManyLegsOpen' },\n { type: 'error', inputs: [], name: 'UnderOverFlow' },\n { type: 'error', inputs: [], name: 'WrongPoolId' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// PanopticQuery\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const panopticQueryAbi = [\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'checkCollateral',\n outputs: [\n {\n name: 'collateralBalances0',\n internalType: 'uint256[4]',\n type: 'uint256[4]',\n },\n {\n name: 'requiredCollaterals0',\n internalType: 'uint256[4]',\n type: 'uint256[4]',\n },\n {\n name: 'collateralBalances1',\n internalType: 'uint256[4]',\n type: 'uint256[4]',\n },\n {\n name: 'requiredCollaterals1',\n internalType: 'uint256[4]',\n type: 'uint256[4]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'checkCollateral',\n outputs: [\n {\n name: 'balancesAndRequired',\n internalType: 'uint256[4]',\n type: 'uint256[4]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'checkCollateralListOutput',\n outputs: [\n { name: '', internalType: 'uint256[4][]', type: 'uint256[4][]' },\n { name: '', internalType: 'int256[]', type: 'int256[]' },\n { name: '', internalType: 'int24[]', type: 'int24[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'getChunkData',\n outputs: [{ name: '', internalType: 'uint256[2][4][]', type: 'uint256[2][4][]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'getLiquidationPrices',\n outputs: [\n { name: 'liquidationPriceDown', internalType: 'int24', type: 'int24' },\n { name: 'liquidationPriceUp', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n {\n name: 'existingPositionIds',\n internalType: 'TokenId[]',\n type: 'uint256[]',\n },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n ],\n name: 'getMaxPositionSizeBounds',\n outputs: [\n { name: 'maxSizeAtMinUtil', internalType: 'uint128', type: 'uint128' },\n { name: 'maxSizeAtMaxUtil', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'includePendingPremium', internalType: 'bool', type: 'bool' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'getNetLiquidationValue',\n outputs: [\n { name: 'value0', internalType: 'int256', type: 'int256' },\n { name: 'value1', internalType: 'int256', type: 'int256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'getPortfolioValue',\n outputs: [\n { name: 'value0', internalType: 'int256', type: 'int256' },\n { name: 'value1', internalType: 'int256', type: 'int256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'atTicks', internalType: 'int24[]', type: 'int24[]' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n ],\n name: 'getPortfolioValueAtTicks',\n outputs: [\n { name: 'value0', internalType: 'int256[]', type: 'int256[]' },\n { name: 'value1', internalType: 'int256[]', type: 'int256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'getRequiredBase',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'startTick', internalType: 'int24', type: 'int24' },\n { name: 'nTicks', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'getTickNets',\n outputs: [\n { name: 'tickData', internalType: 'int256[]', type: 'int256[]' },\n { name: 'liquidityNets', internalType: 'int256[]', type: 'int256[]' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'isAccountSolvent',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n ],\n name: 'optimizeRiskPartners',\n outputs: [{ name: '', internalType: 'TokenId', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'pool', internalType: 'contract PanopticPool', type: 'address' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n { name: 'width', internalType: 'int24', type: 'int24' },\n ],\n name: 'scanChunks',\n outputs: [\n { name: '', internalType: 'int24[]', type: 'int24[]' },\n { name: '', internalType: 'uint128[2][]', type: 'uint128[2][]' },\n { name: '', internalType: 'uint128[2][]', type: 'uint128[2][]' },\n {\n name: '',\n internalType: 'LeftRightUnsigned[2][]',\n type: 'uint256[2][]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'self', internalType: 'TokenId', type: 'uint256' }],\n name: 'validateTokenId',\n outputs: [],\n stateMutability: 'pure',\n },\n { type: 'error', inputs: [], name: 'CastingError' },\n { type: 'error', inputs: [], name: 'InvalidTick' },\n {\n type: 'error',\n inputs: [{ name: 'parameterType', internalType: 'uint256', type: 'uint256' }],\n name: 'InvalidTokenIdParameter',\n },\n { type: 'error', inputs: [], name: 'LiquidityTooHigh' },\n { type: 'error', inputs: [], name: 'UnderOverFlow' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// RiskEngine\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const riskEngineAbi = [\n {\n type: 'constructor',\n inputs: [\n { name: '_crossBuffer0', internalType: 'uint256', type: 'uint256' },\n { name: '_crossBuffer1', internalType: 'uint256', type: 'uint256' },\n { name: '_guardian', internalType: 'address', type: 'address' },\n { name: '_builderFactory', internalType: 'address', type: 'address' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'ADJUSTMENT_SPEED',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'BP_DECREASE_BUFFER',\n outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'BUILDER_FACTORY',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'BUILDER_SPLIT',\n outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'BUYER_COLLATERAL_RATIO',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'CROSS_BUFFER_0',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'CROSS_BUFFER_1',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'CURVE_STEEPNESS',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'DECIMALS',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'EMA_PERIODS',\n outputs: [{ name: '', internalType: 'uint96', type: 'uint96' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'FORCE_EXERCISE_COST',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'GUARDIAN',\n outputs: [{ name: '', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'INITIAL_RATE_AT_TARGET',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'IRM_MAX_ELAPSED_TIME',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAINT_MARGIN_RATE',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_BONUS',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_CLAMP_DELTA',\n outputs: [{ name: '', internalType: 'int24', type: 'int24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_OPEN_LEGS',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_RATE_AT_TARGET',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_SPREAD',\n outputs: [{ name: '', internalType: 'uint24', type: 'uint24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_TICKS_DELTA',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MAX_TWAP_DELTA_DISPATCH',\n outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'MIN_RATE_AT_TARGET',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'NOTIONAL_FEE',\n outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'PREMIUM_FEE',\n outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'PROTOCOL_SPLIT',\n outputs: [{ name: '', internalType: 'uint16', type: 'uint16' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'SATURATED_POOL_UTIL',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'SELLER_COLLATERAL_RATIO',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'TARGET_POOL_UTIL',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'TARGET_UTILIZATION',\n outputs: [{ name: '', internalType: 'int256', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'VEGOID',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n ],\n name: 'collect',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'recipient', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'collect',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' },\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'computeInternalMedian',\n outputs: [\n { name: 'medianTick', internalType: 'int24', type: 'int24' },\n {\n name: 'updatedOraclePack',\n internalType: 'OraclePack',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'utilization', internalType: 'int256', type: 'int256' },\n { name: 'crossBuffer', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'crossBufferRatio',\n outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: 'oracleTick', internalType: 'int24', type: 'int24' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n {\n name: 'positionBalance',\n internalType: 'PositionBalance',\n type: 'uint256',\n },\n ],\n name: 'exerciseCost',\n outputs: [{ name: 'exerciseFees', internalType: 'LeftRightSigned', type: 'int256' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'builderCode', internalType: 'uint256', type: 'uint256' }],\n name: 'getFeeRecipient',\n outputs: [{ name: 'feeRecipient', internalType: 'address', type: 'address' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'tokenData0',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'tokenData1',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n { name: 'atSqrtPriceX96', internalType: 'uint160', type: 'uint160' },\n { name: 'netPaid', internalType: 'LeftRightSigned', type: 'int256' },\n {\n name: 'shortPremium',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'loanAmounts',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n ],\n name: 'getLiquidationBonus',\n outputs: [\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'positionBalanceArray',\n internalType: 'PositionBalance[]',\n type: 'uint256[]',\n },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'user', internalType: 'address', type: 'address' },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n {\n name: 'shortPremia',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'longPremia',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'ct0',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n {\n name: 'ct1',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n ],\n name: 'getMargin',\n outputs: [\n {\n name: 'tokenData0',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'tokenData1',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'globalUtilizations',\n internalType: 'PositionBalance',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: '_oraclePack', internalType: 'OraclePack', type: 'uint256' },\n ],\n name: 'getOracleTicks',\n outputs: [\n { name: 'spotTick', internalType: 'int24', type: 'int24' },\n { name: 'medianTick', internalType: 'int24', type: 'int24' },\n { name: 'latestTick', internalType: 'int24', type: 'int24' },\n { name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'positionBalanceArray',\n internalType: 'PositionBalance[]',\n type: 'uint256[]',\n },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n ],\n name: 'getPerPositionCollateralRequirements',\n outputs: [\n {\n name: 'collateralRequirements',\n internalType: 'LeftRightUnsigned[]',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'payor', internalType: 'address', type: 'address' },\n { name: 'fees', internalType: 'LeftRightSigned', type: 'int256' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n {\n name: 'ct0',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n {\n name: 'ct1',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n ],\n name: 'getRefundAmounts',\n outputs: [{ name: '', internalType: 'LeftRightSigned', type: 'int256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' },\n { name: 'builderCode', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'getRiskParameters',\n outputs: [{ name: '', internalType: 'RiskParameters', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: '_oraclePack', internalType: 'OraclePack', type: 'uint256' },\n { name: 'safeMode', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'getSolvencyTicks',\n outputs: [\n { name: '', internalType: 'int24[]', type: 'int24[]' },\n { name: '', internalType: 'OraclePack', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n {\n name: 'premiasByLeg',\n internalType: 'LeftRightSigned[4][]',\n type: 'int256[4][]',\n },\n {\n name: 'collateralRemaining',\n internalType: 'LeftRightSigned',\n type: 'int256',\n },\n { name: 'atSqrtPriceX96', internalType: 'uint160', type: 'uint160' },\n ],\n name: 'haircutPremia',\n outputs: [\n { name: 'bonusDeltas', internalType: 'LeftRightSigned', type: 'int256' },\n {\n name: 'haircutTotal',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'haircutPerLeg',\n internalType: 'LeftRightSigned[4][]',\n type: 'int256[4][]',\n },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'utilization', internalType: 'uint256', type: 'uint256' },\n {\n name: 'interestRateAccumulator',\n internalType: 'MarketState',\n type: 'uint256',\n },\n ],\n name: 'interestRate',\n outputs: [{ name: '', internalType: 'uint128', type: 'uint128' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'positionBalanceArray',\n internalType: 'PositionBalance[]',\n type: 'uint256[]',\n },\n { name: 'positionIdList', internalType: 'TokenId[]', type: 'uint256[]' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'user', internalType: 'address', type: 'address' },\n {\n name: 'shortPremia',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'longPremia',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n {\n name: 'ct0',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n {\n name: 'ct1',\n internalType: 'contract CollateralTrackerV2',\n type: 'address',\n },\n { name: 'buffer', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'isAccountSolvent',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'currentTick', internalType: 'int24', type: 'int24' },\n { name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' },\n ],\n name: 'isSafeMode',\n outputs: [{ name: 'safeMode', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'lockPool',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'oraclePack', internalType: 'OraclePack', type: 'uint256' }],\n name: 'twapEMA',\n outputs: [{ name: '', internalType: 'int24', type: 'int24' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'pool',\n internalType: 'contract PanopticPoolV2',\n type: 'address',\n },\n ],\n name: 'unlockPool',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'utilization', internalType: 'uint256', type: 'uint256' },\n {\n name: 'interestRateAccumulator',\n internalType: 'MarketState',\n type: 'uint256',\n },\n ],\n name: 'updateInterestRate',\n outputs: [\n { name: '', internalType: 'uint128', type: 'uint128' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [],\n name: 'vegoid',\n outputs: [{ name: '', internalType: 'uint8', type: 'uint8' }],\n stateMutability: 'pure',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'collateralToken',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'avgBorrowRate',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'rateAtTarget',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'BorrowRateUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [{ name: 'lockMode', internalType: 'bool', type: 'bool', indexed: false }],\n name: 'GuardianSafeModeUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'token',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'TokensCollected',\n },\n { type: 'error', inputs: [], name: 'BelowMinimumRedemption' },\n { type: 'error', inputs: [], name: 'CastingError' },\n { type: 'error', inputs: [], name: 'InvalidBuilderCode' },\n { type: 'error', inputs: [], name: 'InvalidTick' },\n { type: 'error', inputs: [], name: 'LengthMismatch' },\n { type: 'error', inputs: [], name: 'LiquidityTooHigh' },\n { type: 'error', inputs: [], name: 'NotGuardian' },\n {\n type: 'error',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferFailed',\n },\n { type: 'error', inputs: [], name: 'UnderOverFlow' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SemiFungiblePositionManagerV3\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const semiFungiblePositionManagerV3Abi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: '_factory',\n internalType: 'contract IUniswapV3Factory',\n type: 'address',\n },\n {\n name: '_minEnforcedTickFillCost',\n internalType: 'uint256',\n type: 'uint256',\n },\n {\n name: '_supplyMultiplierTickFill',\n internalType: 'uint256',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'tokenId', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'balanceOf',\n outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owners', internalType: 'address[]', type: 'address[]' },\n { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n name: 'balanceOfBatch',\n outputs: [{ name: 'balances', internalType: 'uint256[]', type: 'uint256[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n { name: 'positionSize', internalType: 'uint128', type: 'uint128' },\n { name: 'tickLimitLow', internalType: 'int24', type: 'int24' },\n { name: 'tickLimitHigh', internalType: 'int24', type: 'int24' },\n ],\n name: 'burnTokenizedPosition',\n outputs: [\n { name: '', internalType: 'LeftRightUnsigned[4]', type: 'uint256[4]' },\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'expandEnforcedTickRange',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'tokenType', internalType: 'uint256', type: 'uint256' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n ],\n name: 'getAccountFeesBase',\n outputs: [\n { name: 'feesBase0', internalType: 'int128', type: 'int128' },\n { name: 'feesBase1', internalType: 'int128', type: 'int128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'tokenType', internalType: 'uint256', type: 'uint256' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n ],\n name: 'getAccountLiquidity',\n outputs: [\n {\n name: 'accountLiquidities',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'tokenType', internalType: 'uint256', type: 'uint256' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'isLong', internalType: 'uint256', type: 'uint256' },\n { name: 'vegoid', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'getAccountPremium',\n outputs: [\n { name: '', internalType: 'uint128', type: 'uint128' },\n { name: '', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolKey', internalType: 'bytes', type: 'bytes' }],\n name: 'getCurrentTick',\n outputs: [{ name: 'currentTick', internalType: 'int24', type: 'int24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'getEnforcedTickLimits',\n outputs: [\n { name: '', internalType: 'int24', type: 'int24' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'id', internalType: 'bytes', type: 'bytes' },\n { name: 'vegoid', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'getPoolId',\n outputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'getUniswapV3PoolFromId',\n outputs: [\n {\n name: 'uniswapV3Pool',\n internalType: 'contract IUniswapV3Pool',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'token0', internalType: 'address', type: 'address' },\n { name: 'token1', internalType: 'address', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'vegoid', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'initializeAMMPool',\n outputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'operator', internalType: 'address', type: 'address' },\n ],\n name: 'isApprovedForAll',\n outputs: [{ name: 'approvedForAll', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n { name: 'positionSize', internalType: 'uint128', type: 'uint128' },\n { name: 'tickLimitLow', internalType: 'int24', type: 'int24' },\n { name: 'tickLimitHigh', internalType: 'int24', type: 'int24' },\n ],\n name: 'mintTokenizedPosition',\n outputs: [\n { name: '', internalType: 'LeftRightUnsigned[4]', type: 'uint256[4]' },\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'reentrancyGuardEntered',\n outputs: [{ name: 'entered', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'operator', internalType: 'address', type: 'address' },\n { name: 'approved', internalType: 'bool', type: 'bool' },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],\n name: 'supportsInterface',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'amount0Owed', internalType: 'uint256', type: 'uint256' },\n { name: 'amount1Owed', internalType: 'uint256', type: 'uint256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'uniswapV3MintCallback',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'amount0Delta', internalType: 'int256', type: 'int256' },\n { name: 'amount1Delta', internalType: 'int256', type: 'int256' },\n { name: 'data', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'uniswapV3SwapCallback',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'ApprovalForAll',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'uniswapPool',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'minEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'maxEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n ],\n name: 'EnforcedTicksUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'univ3pool',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenType',\n internalType: 'uint256',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'tickLower',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'tickUpper',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'liquidityDelta',\n internalType: 'int128',\n type: 'int128',\n indexed: false,\n },\n ],\n name: 'LiquidityChunkUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'uniswapPool',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'poolId',\n internalType: 'uint64',\n type: 'uint64',\n indexed: false,\n },\n {\n name: 'minEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'maxEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n ],\n name: 'PoolInitialized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'positionSize',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'TokenizedPositionBurnt',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'caller',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'positionSize',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'TokenizedPositionMinted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'ids',\n internalType: 'uint256[]',\n type: 'uint256[]',\n indexed: false,\n },\n {\n name: 'amounts',\n internalType: 'uint256[]',\n type: 'uint256[]',\n indexed: false,\n },\n ],\n name: 'TransferBatch',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'TransferSingle',\n },\n { type: 'error', inputs: [], name: 'CastingError' },\n { type: 'error', inputs: [], name: 'ChunkHasZeroLiquidity' },\n { type: 'error', inputs: [], name: 'InvalidTick' },\n { type: 'error', inputs: [], name: 'InvalidTickBound' },\n {\n type: 'error',\n inputs: [{ name: 'parameterType', internalType: 'uint256', type: 'uint256' }],\n name: 'InvalidTokenIdParameter',\n },\n { type: 'error', inputs: [], name: 'InvalidUniswapCallback' },\n { type: 'error', inputs: [], name: 'LiquidityTooHigh' },\n { type: 'error', inputs: [], name: 'NotAuthorized' },\n { type: 'error', inputs: [], name: 'NotEnoughLiquidityInChunk' },\n { type: 'error', inputs: [], name: 'PoolNotInitialized' },\n { type: 'error', inputs: [], name: 'PositionTooLarge' },\n {\n type: 'error',\n inputs: [{ name: 'currentTick', internalType: 'int24', type: 'int24' }],\n name: 'PriceBoundFail',\n },\n { type: 'error', inputs: [], name: 'Reentrancy' },\n {\n type: 'error',\n inputs: [\n { name: 'token', internalType: 'address', type: 'address' },\n { name: 'from', internalType: 'address', type: 'address' },\n { name: 'amount', internalType: 'uint256', type: 'uint256' },\n { name: 'balance', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'TransferFailed',\n },\n { type: 'error', inputs: [], name: 'UnderOverFlow' },\n { type: 'error', inputs: [], name: 'UnsafeRecipient' },\n { type: 'error', inputs: [], name: 'WrongUniswapPool' },\n] as const\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SemiFungiblePositionManagerV4\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nexport const semiFungiblePositionManagerV4Abi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: 'poolManager',\n internalType: 'contract IPoolManager',\n type: 'address',\n },\n {\n name: '_minEnforcedTickFillCost',\n internalType: 'uint256',\n type: 'uint256',\n },\n {\n name: '_nativeEnforcedTickFillCost',\n internalType: 'uint256',\n type: 'uint256',\n },\n {\n name: '_supplyMultiplierTickFill',\n internalType: 'uint256',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'account', internalType: 'address', type: 'address' },\n { name: 'tokenId', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'balanceOf',\n outputs: [{ name: 'balance', internalType: 'uint256', type: 'uint256' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owners', internalType: 'address[]', type: 'address[]' },\n { name: 'ids', internalType: 'uint256[]', type: 'uint256[]' },\n ],\n name: 'balanceOfBatch',\n outputs: [{ name: 'balances', internalType: 'uint256[]', type: 'uint256[]' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n { name: 'positionSize', internalType: 'uint128', type: 'uint128' },\n { name: 'tickLimitLow', internalType: 'int24', type: 'int24' },\n { name: 'tickLimitHigh', internalType: 'int24', type: 'int24' },\n ],\n name: 'burnTokenizedPosition',\n outputs: [\n { name: '', internalType: 'LeftRightUnsigned[4]', type: 'uint256[4]' },\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'expandEnforcedTickRange',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'tokenType', internalType: 'uint256', type: 'uint256' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n ],\n name: 'getAccountLiquidity',\n outputs: [\n {\n name: 'accountLiquidities',\n internalType: 'LeftRightUnsigned',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'tokenType', internalType: 'uint256', type: 'uint256' },\n { name: 'tickLower', internalType: 'int24', type: 'int24' },\n { name: 'tickUpper', internalType: 'int24', type: 'int24' },\n { name: 'atTick', internalType: 'int24', type: 'int24' },\n { name: 'isLong', internalType: 'uint256', type: 'uint256' },\n { name: 'vegoid', internalType: 'uint256', type: 'uint256' },\n ],\n name: 'getAccountPremium',\n outputs: [\n { name: '', internalType: 'uint128', type: 'uint128' },\n { name: '', internalType: 'uint128', type: 'uint128' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolKey', internalType: 'bytes', type: 'bytes' }],\n name: 'getCurrentTick',\n outputs: [{ name: 'currentTick', internalType: 'int24', type: 'int24' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'getEnforcedTickLimits',\n outputs: [\n { name: '', internalType: 'int24', type: 'int24' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'id', internalType: 'bytes', type: 'bytes' },\n { name: 'vegoid', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'getPoolId',\n outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n name: 'getUniswapV4PoolKeyFromId',\n outputs: [\n {\n name: '',\n internalType: 'struct PoolKey',\n type: 'tuple',\n components: [\n { name: 'currency0', internalType: 'Currency', type: 'address' },\n { name: 'currency1', internalType: 'Currency', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'tickSpacing', internalType: 'int24', type: 'int24' },\n { name: 'hooks', internalType: 'contract IHooks', type: 'address' },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n {\n name: 'key',\n internalType: 'struct PoolKey',\n type: 'tuple',\n components: [\n { name: 'currency0', internalType: 'Currency', type: 'address' },\n { name: 'currency1', internalType: 'Currency', type: 'address' },\n { name: 'fee', internalType: 'uint24', type: 'uint24' },\n { name: 'tickSpacing', internalType: 'int24', type: 'int24' },\n { name: 'hooks', internalType: 'contract IHooks', type: 'address' },\n ],\n },\n { name: 'vegoid', internalType: 'uint8', type: 'uint8' },\n ],\n name: 'initializeAMMPool',\n outputs: [{ name: 'poolId', internalType: 'uint64', type: 'uint64' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [\n { name: 'owner', internalType: 'address', type: 'address' },\n { name: 'operator', internalType: 'address', type: 'address' },\n ],\n name: 'isApprovedForAll',\n outputs: [{ name: 'approvedForAll', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: 'poolKey', internalType: 'bytes', type: 'bytes' },\n { name: 'tokenId', internalType: 'TokenId', type: 'uint256' },\n { name: 'positionSize', internalType: 'uint128', type: 'uint128' },\n { name: 'tickLimitLow', internalType: 'int24', type: 'int24' },\n { name: 'tickLimitHigh', internalType: 'int24', type: 'int24' },\n ],\n name: 'mintTokenizedPosition',\n outputs: [\n { name: '', internalType: 'LeftRightUnsigned[4]', type: 'uint256[4]' },\n { name: '', internalType: 'LeftRightSigned', type: 'int256' },\n { name: '', internalType: 'int24', type: 'int24' },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],\n name: 'multicall',\n outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n inputs: [],\n name: 'reentrancyGuardEntered',\n outputs: [{ name: 'entered', internalType: 'bool', type: 'bool' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'uint256[]', type: 'uint256[]' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'address', type: 'address' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'uint256', type: 'uint256' },\n { name: '', internalType: 'bytes', type: 'bytes' },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [\n { name: 'operator', internalType: 'address', type: 'address' },\n { name: 'approved', internalType: 'bool', type: 'bool' },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n inputs: [{ name: 'interfaceId', internalType: 'bytes4', type: 'bytes4' }],\n name: 'supportsInterface',\n outputs: [{ name: '', internalType: 'bool', type: 'bool' }],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n inputs: [{ name: 'data', internalType: 'bytes', type: 'bytes' }],\n name: 'unlockCallback',\n outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'approved', internalType: 'bool', type: 'bool', indexed: false },\n ],\n name: 'ApprovalForAll',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'idV4', internalType: 'PoolId', type: 'bytes32', indexed: true },\n {\n name: 'minEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'maxEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n ],\n name: 'EnforcedTicksUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'poolId',\n internalType: 'PoolId',\n type: 'bytes32',\n indexed: true,\n },\n {\n name: 'owner',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenType',\n internalType: 'uint256',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'tickLower',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'tickUpper',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'liquidityDelta',\n internalType: 'int128',\n type: 'int128',\n indexed: false,\n },\n ],\n name: 'LiquidityChunkUpdated',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n { name: 'idV4', internalType: 'PoolId', type: 'bytes32', indexed: true },\n {\n name: 'poolId',\n internalType: 'uint64',\n type: 'uint64',\n indexed: false,\n },\n {\n name: 'minEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n {\n name: 'maxEnforcedTick',\n internalType: 'int24',\n type: 'int24',\n indexed: false,\n },\n ],\n name: 'PoolInitialized',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'recipient',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'positionSize',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'TokenizedPositionBurnt',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'caller',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenId',\n internalType: 'TokenId',\n type: 'uint256',\n indexed: true,\n },\n {\n name: 'positionSize',\n internalType: 'uint128',\n type: 'uint128',\n indexed: false,\n },\n ],\n name: 'TokenizedPositionMinted',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n {\n name: 'ids',\n internalType: 'uint256[]',\n type: 'uint256[]',\n indexed: false,\n },\n {\n name: 'amounts',\n internalType: 'uint256[]',\n type: 'uint256[]',\n indexed: false,\n },\n ],\n name: 'TransferBatch',\n },\n {\n type: 'event',\n anonymous: false,\n inputs: [\n {\n name: 'operator',\n internalType: 'address',\n type: 'address',\n indexed: true,\n },\n { name: 'from', internalType: 'address', type: 'address', indexed: true },\n { name: 'to', internalType: 'address', type: 'address', indexed: true },\n { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false },\n {\n name: 'amount',\n internalType: 'uint256',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'TransferSingle',\n },\n { type: 'error', inputs: [], name: 'ChunkHasZeroLiquidity' },\n { type: 'error', inputs: [], name: 'InvalidTick' },\n { type: 'error', inputs: [], name: 'InvalidTickBound' },\n {\n type: 'error',\n inputs: [{ name: 'parameterType', internalType: 'uint256', type: 'uint256' }],\n name: 'InvalidTokenIdParameter',\n },\n { type: 'error', inputs: [], name: 'LiquidityTooHigh' },\n { type: 'error', inputs: [], name: 'NotAuthorized' },\n { type: 'error', inputs: [], name: 'NotEnoughLiquidityInChunk' },\n { type: 'error', inputs: [], name: 'PoolNotInitialized' },\n { type: 'error', inputs: [], name: 'PositionTooLarge' },\n {\n type: 'error',\n inputs: [{ name: 'currentTick', internalType: 'int24', type: 'int24' }],\n name: 'PriceBoundFail',\n },\n { type: 'error', inputs: [], name: 'Reentrancy' },\n { type: 'error', inputs: [], name: 'UnauthorizedUniswapCallback' },\n { type: 'error', inputs: [], name: 'UnderOverFlow' },\n { type: 'error', inputs: [], name: 'UnsafeRecipient' },\n { type: 'error', inputs: [], name: 'WrongUniswapPool' },\n] as const\n","/**\n * Block metadata utilities for the Panoptic v2 SDK.\n * @module v2/clients/blockMeta\n */\n\nimport type { PublicClient } from 'viem'\n\nimport type { BlockMeta } from '../types'\n\n/**\n * Parameters for getBlockMeta.\n */\nexport interface GetBlockMetaParams {\n /** viem PublicClient */\n client: PublicClient\n /** Optional block number (defaults to latest) */\n blockNumber?: bigint\n}\n\n/**\n * Get block metadata for a given block.\n * Used to tag all read results with same-block consistency proof.\n *\n * @param params - The parameters\n * @returns Block metadata\n */\nexport async function getBlockMeta(params: GetBlockMetaParams): Promise<BlockMeta> {\n const { client, blockNumber } = params\n\n const block = await client.getBlock({\n blockNumber,\n includeTransactions: false,\n })\n\n return {\n blockNumber: block.number,\n blockHash: block.hash,\n blockTimestamp: block.timestamp,\n }\n}\n","/**\n * Constants for the Panoptic v2 SDK.\n * @module v2/utils/constants\n */\n\n/**\n * WAD constant (10^18) used for fixed-point arithmetic.\n * Commonly used for spread calculations and other WAD-scaled values.\n */\nexport const WAD = 10n ** 18n\n\n/**\n * Zero collateral object for guest mode.\n * Returns safe defaults when no wallet is connected.\n */\nexport const ZERO_COLLATERAL = {\n token0: {\n assets: 0n,\n shares: 0n,\n availableAssets: 0n,\n lockedAssets: 0n,\n },\n token1: {\n assets: 0n,\n shares: 0n,\n availableAssets: 0n,\n lockedAssets: 0n,\n },\n} as const\n\n/**\n * Zero valuation object for guest mode.\n * Returns safe defaults when no wallet is connected.\n */\nexport const ZERO_VALUATION = {\n netLiquidationValue0: 0n,\n netLiquidationValue1: 0n,\n maintenanceMargin0: 0n,\n maintenanceMargin1: 0n,\n marginExcess0: 0n,\n marginExcess1: 0n,\n} as const\n\n/**\n * Storage schema version for the SDK.\n * Increment when storage format changes (triggers migration or clear).\n */\nexport const SCHEMA_VERSION = 1\n\n/**\n * Storage key prefix for all SDK data.\n */\nexport const STORAGE_PREFIX = 'panoptic-v2-sdk'\n\n/**\n * Maximum number of chunks that can be tracked per pool.\n * Exceeding this limit throws ChunkLimitError.\n */\nexport const MAX_TRACKED_CHUNKS = 1000\n\n/**\n * Default reorg depth for chain reorganization handling.\n * On reorg detection, rollback this many blocks and re-sync.\n */\nexport const REORG_DEPTH = 128n\n\n/**\n * Oracle epoch duration in seconds (64 seconds per epoch).\n */\nexport const ORACLE_EPOCH_SECONDS = 64n\n\n/**\n * Minimum tick value for Uniswap v3/v4 pools.\n */\nexport const MIN_TICK = -887272n\n\n/**\n * Maximum tick value for Uniswap v3/v4 pools.\n */\nexport const MAX_TICK = 887272n\n\n/**\n * Basis points denominator (100% = 10000 bps).\n */\nexport const BPS_DENOMINATOR = 10000n\n\n/**\n * Utilization denominator (100% = 10000).\n */\nexport const UTILIZATION_DENOMINATOR = 10000n\n","/**\n * Tick and price formatters for Uniswap V3/V4 pools.\n *\n * Ticks represent logarithmic prices where: price = 1.0001^tick\n *\n * @module v2/formatters/tick\n */\n\nimport { MAX_TICK, MIN_TICK } from '../utils/constants'\n\nconst Q192 = 1n << 192n\nconst RAW_PRICE_PRECISION = 40n\n\nfunction pow10(exponent: bigint): bigint {\n if (exponent < 0n) {\n throw new RangeError('Exponent must be non-negative')\n }\n return 10n ** exponent\n}\n\nfunction absBigint(value: bigint): bigint {\n return value < 0n ? -value : value\n}\n\nfunction trimTrailingZeros(value: string): string {\n const dotIndex = value.indexOf('.')\n if (dotIndex === -1) return value\n\n let end = value.length\n while (end > dotIndex && value[end - 1] === '0') {\n end -= 1\n }\n\n if (end === dotIndex + 1) {\n end = dotIndex\n }\n\n return value.slice(0, end)\n}\n\nfunction formatRatio(numerator: bigint, denominator: bigint, precision: bigint): string {\n if (precision < 0n) {\n throw new RangeError('Precision must be non-negative')\n }\n\n const sign = numerator < 0n ? '-' : ''\n const absNumerator = numerator < 0n ? -numerator : numerator\n\n const scale = pow10(precision)\n const scaled = (absNumerator * scale + denominator / 2n) / denominator\n const integerPart = scaled / scale\n const fractionalPart = scaled % scale\n\n if (precision === 0n) {\n return `${sign}${integerPart}`\n }\n\n return `${sign}${integerPart}.${fractionalPart.toString().padStart(Number(precision), '0')}`\n}\n\nfunction parseDecimalToFraction(value: string): { numerator: bigint; denominator: bigint } {\n const trimmed = value.trim()\n if (trimmed.length === 0) {\n throw new Error('Price must be a number')\n }\n\n const isNegative = trimmed.startsWith('-')\n const unsigned = isNegative || trimmed.startsWith('+') ? trimmed.slice(1) : trimmed\n\n const [basePart, exponentPart] = unsigned.toLowerCase().split('e')\n const [integerStr, fractionalStr = ''] = basePart.split('.')\n\n if (integerStr === '' && fractionalStr === '') {\n throw new Error('Price must be a number')\n }\n\n const integerDigits = integerStr === '' ? '0' : integerStr\n const digits = `${integerDigits}${fractionalStr}`\n\n let numerator = BigInt(digits === '' ? '0' : digits)\n let denominator = pow10(BigInt(fractionalStr.length))\n\n if (exponentPart !== undefined && exponentPart !== '') {\n const exponent = BigInt(exponentPart)\n if (exponent > 0n) {\n numerator *= pow10(exponent)\n } else if (exponent < 0n) {\n denominator *= pow10(-exponent)\n }\n }\n\n if (isNegative) {\n numerator = -numerator\n }\n\n return { numerator, denominator }\n}\n\nfunction compareRatios(\n leftNumerator: bigint,\n leftDenominator: bigint,\n rightNumerator: bigint,\n rightDenominator: bigint,\n): -1 | 0 | 1 {\n const left = leftNumerator * rightDenominator\n const right = rightNumerator * leftDenominator\n\n if (left === right) return 0\n return left < right ? -1 : 1\n}\n\nexport function tickToSqrtPriceX96(tick: bigint): bigint {\n if (tick < MIN_TICK || tick > MAX_TICK) {\n throw new RangeError('Tick out of bounds')\n }\n\n const absTick = tick < 0n ? -tick : tick\n\n let ratio =\n (absTick & 0x1n) !== 0n\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n\n if ((absTick & 0x2n) !== 0n) ratio = (ratio * 0xfff97272373d413259a46990580e213an) >> 128n\n if ((absTick & 0x4n) !== 0n) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n\n if ((absTick & 0x8n) !== 0n) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n\n if ((absTick & 0x10n) !== 0n) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644n) >> 128n\n if ((absTick & 0x20n) !== 0n) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n\n if ((absTick & 0x40n) !== 0n) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n\n if ((absTick & 0x80n) !== 0n) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n\n if ((absTick & 0x100n) !== 0n) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n\n if ((absTick & 0x200n) !== 0n) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n\n if ((absTick & 0x400n) !== 0n) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n\n if ((absTick & 0x800n) !== 0n) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n\n if ((absTick & 0x1000n) !== 0n) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n\n if ((absTick & 0x2000n) !== 0n) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n\n if ((absTick & 0x4000n) !== 0n) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n\n if ((absTick & 0x8000n) !== 0n) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6n) >> 128n\n if ((absTick & 0x10000n) !== 0n) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n\n if ((absTick & 0x20000n) !== 0n) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604n) >> 128n\n if ((absTick & 0x40000n) !== 0n) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98n) >> 128n\n if ((absTick & 0x80000n) !== 0n) ratio = (ratio * 0x48a170391f7dc42444e8fa2n) >> 128n\n\n if (tick > 0n) {\n ratio = ((1n << 256n) - 1n) / ratio\n }\n\n const remainderMask = (1n << 32n) - 1n\n const sqrtPriceX96 = (ratio >> 32n) + ((ratio & remainderMask) === 0n ? 0n : 1n)\n\n return sqrtPriceX96\n}\n\nconst MIN_SQRT_PRICE_X96 = tickToSqrtPriceX96(MIN_TICK)\nconst MAX_SQRT_PRICE_X96 = tickToSqrtPriceX96(MAX_TICK)\n\nfunction getPriceRatioFromSqrtPriceX96(sqrtPriceX96: bigint): {\n numerator: bigint\n denominator: bigint\n} {\n return {\n numerator: sqrtPriceX96 * sqrtPriceX96,\n denominator: Q192,\n }\n}\n\nfunction getRawPriceRatio(tick: bigint): { numerator: bigint; denominator: bigint } {\n return getPriceRatioFromSqrtPriceX96(tickToSqrtPriceX96(tick))\n}\n\nfunction adjustRatioForDecimals(\n numerator: bigint,\n denominator: bigint,\n decimals0: bigint,\n decimals1: bigint,\n): { numerator: bigint; denominator: bigint } {\n const diff = decimals0 - decimals1\n if (diff === 0n) {\n return { numerator, denominator }\n }\n\n if (diff > 0n) {\n return { numerator: numerator * pow10(diff), denominator }\n }\n\n return { numerator, denominator: denominator * pow10(-diff) }\n}\n\n/**\n * Convert a tick to a raw price string (no decimal adjustment).\n * Uses the formula: price = 1.0001^tick\n *\n * This returns the raw price ratio, not adjusted for token decimals.\n * A fixed internal precision is used and trailing zeros are trimmed.\n *\n * @param tick - The tick value\n * @returns Price string\n *\n * @example\n * ```typescript\n * tickToPrice(0n) // \"1\"\n * tickToPrice(1000n) // \"1.105...\" (approximately)\n * tickToPrice(-1000n) // \"0.904...\" (approximately)\n * tickToPrice(200000n) // Very large number\n * ```\n */\nexport function tickToPrice(tick: bigint): string {\n const { numerator, denominator } = getRawPriceRatio(tick)\n const price = formatRatio(numerator, denominator, RAW_PRICE_PRECISION)\n return trimTrailingZeros(price)\n}\n\n/**\n * Convert a tick to a human-readable price with decimal scaling.\n * Uses the formula: price = 1.0001^tick * 10^(decimals0-decimals1)\n *\n * This adjusts for the different decimals of the two tokens in the pair.\n *\n * @param tick - The tick value\n * @param decimals0 - Decimals of token0\n * @param decimals1 - Decimals of token1\n * @param precision - Number of decimal places to display\n * @returns Formatted price string\n *\n * @example\n * ```typescript\n * // WETH/USDC pool (18 decimals / 6 decimals)\n * // At tick ~200000, price is roughly $2000 per ETH\n * tickToPriceDecimalScaled(200000n, 18n, 6n, 2n) // \"2000.00\" (approximately)\n *\n * // For token1/token0 price, swap the decimals\n * tickToPriceDecimalScaled(200000n, 6n, 18n, 6n) // \"0.000500\" (approximately)\n * ```\n */\nexport function tickToPriceDecimalScaled(\n tick: bigint,\n decimals0: bigint,\n decimals1: bigint,\n precision: bigint,\n): string {\n const rawRatio = getRawPriceRatio(tick)\n const { numerator, denominator } = adjustRatioForDecimals(\n rawRatio.numerator,\n rawRatio.denominator,\n decimals0,\n decimals1,\n )\n\n return formatRatio(numerator, denominator, precision)\n}\n\n/**\n * Convert a sqrtPriceX96 to a human-readable price with decimal scaling.\n *\n * Uses the formula: price = (sqrtPriceX96^2 / 2^192) * 10^(decimals0-decimals1)\n *\n * @param sqrtPriceX96 - The sqrt price in Q64.96 format\n * @param decimals0 - Decimals of token0\n * @param decimals1 - Decimals of token1\n * @param precision - Number of decimal places to display\n * @returns Formatted price string\n *\n * @example\n * ```typescript\n * sqrtPriceX96ToPriceDecimalScaled(2n ** 96n, 18n, 18n, 2n) // \"1.00\"\n * ```\n */\nexport function sqrtPriceX96ToPriceDecimalScaled(\n sqrtPriceX96: bigint,\n decimals0: bigint,\n decimals1: bigint,\n precision: bigint,\n): string {\n const rawRatio = getPriceRatioFromSqrtPriceX96(sqrtPriceX96)\n const { numerator, denominator } = adjustRatioForDecimals(\n rawRatio.numerator,\n rawRatio.denominator,\n decimals0,\n decimals1,\n )\n\n return formatRatio(numerator, denominator, precision)\n}\n\n/**\n * Convert a price to a tick value.\n *\n * @param price - The price string\n * @param decimals0 - Decimals of token0\n * @param decimals1 - Decimals of token1\n * @returns The tick value (rounded to nearest integer)\n *\n * @example\n * ```typescript\n * // WETH/USDC: What tick for $2000 per ETH?\n * priceToTick(\"2000\", 18n, 6n) // ~200000n\n *\n * // Inverse: What tick for 0.0005 ETH per USDC?\n * priceToTick(\"0.0005\", 6n, 18n) // ~200000n\n * ```\n */\nexport function priceToTick(price: string, decimals0: bigint, decimals1: bigint): bigint {\n const parsed = parseDecimalToFraction(price)\n if (parsed.numerator <= 0n) {\n throw new Error('Price must be positive')\n }\n\n let targetNumerator = parsed.numerator\n let targetDenominator = parsed.denominator\n\n const diff = decimals0 - decimals1\n if (diff > 0n) {\n targetDenominator *= pow10(diff)\n } else if (diff < 0n) {\n targetNumerator *= pow10(-diff)\n }\n\n let low = MIN_TICK\n let high = MAX_TICK\n\n while (low <= high) {\n const mid = (low + high) / 2n\n const { numerator, denominator } = getRawPriceRatio(mid)\n const cmp = compareRatios(numerator, denominator, targetNumerator, targetDenominator)\n\n if (cmp === 0) {\n return mid\n }\n\n if (cmp < 0) {\n low = mid + 1n\n } else {\n high = mid - 1n\n }\n }\n\n const floorTick = high\n const ceilTick = low\n\n if (floorTick < MIN_TICK) return MIN_TICK\n if (ceilTick > MAX_TICK) return MAX_TICK\n\n const floorRatio = getRawPriceRatio(floorTick)\n const ceilRatio = getRawPriceRatio(ceilTick)\n\n const floorDiffNumerator = absBigint(\n targetNumerator * floorRatio.denominator - floorRatio.numerator * targetDenominator,\n )\n const ceilDiffNumerator = absBigint(\n targetNumerator * ceilRatio.denominator - ceilRatio.numerator * targetDenominator,\n )\n const floorDiffDenominator = targetDenominator * floorRatio.denominator\n const ceilDiffDenominator = targetDenominator * ceilRatio.denominator\n\n return floorDiffNumerator * ceilDiffDenominator <= ceilDiffNumerator * floorDiffDenominator\n ? floorTick\n : ceilTick\n}\n\n/**\n * Convert a sqrtPriceX96 value to the nearest tick.\n *\n * @param sqrtPriceX96 - The sqrt price in Q64.96 format\n * @returns The tick value (rounded to nearest integer)\n *\n * @example\n * ```typescript\n * const tick = sqrtPriceX96ToTick(2n ** 96n) // 0n\n * ```\n */\nexport function sqrtPriceX96ToTick(sqrtPriceX96: bigint): bigint {\n if (sqrtPriceX96 <= 0n) {\n throw new Error('Sqrt price must be positive')\n }\n\n if (sqrtPriceX96 < MIN_SQRT_PRICE_X96 || sqrtPriceX96 > MAX_SQRT_PRICE_X96) {\n throw new RangeError('Sqrt price out of bounds')\n }\n\n let low = MIN_TICK\n let high = MAX_TICK\n\n while (low <= high) {\n const mid = (low + high) / 2n\n const midSqrt = tickToSqrtPriceX96(mid)\n\n if (midSqrt === sqrtPriceX96) {\n return mid\n }\n\n if (midSqrt < sqrtPriceX96) {\n low = mid + 1n\n } else {\n high = mid - 1n\n }\n }\n\n const floorTick = high\n const ceilTick = low\n\n if (floorTick < MIN_TICK) return MIN_TICK\n if (ceilTick > MAX_TICK) return MAX_TICK\n\n const floorSqrt = tickToSqrtPriceX96(floorTick)\n const ceilSqrt = tickToSqrtPriceX96(ceilTick)\n\n const floorDiff = absBigint(sqrtPriceX96 - floorSqrt)\n const ceilDiff = absBigint(ceilSqrt - sqrtPriceX96)\n\n return floorDiff <= ceilDiff ? floorTick : ceilTick\n}\n\n/**\n * Format a tick value for display.\n *\n * @param tick - The tick value\n * @returns Formatted tick string\n *\n * @example\n * ```typescript\n * formatTick(200000n) // \"200000\"\n * formatTick(-50000n) // \"-50000\"\n * ```\n */\nexport function formatTick(tick: bigint): string {\n return tick.toString()\n}\n\n/**\n * Get the price at a specific tick, returning both token0/token1 and token1/token0 prices.\n *\n * @param tick - The tick value\n * @param decimals0 - Decimals of token0\n * @param decimals1 - Decimals of token1\n * @param precision - Number of decimal places to display\n * @returns Object with both price directions\n *\n * @example\n * ```typescript\n * const prices = getPricesAtTick(200000n, 18n, 6n, 2n)\n * // prices.token0PerToken1 = \"0.00\" (very small)\n * // prices.token1PerToken0 = \"2000.00\" (USDC per ETH)\n * ```\n */\nexport function getPricesAtTick(\n tick: bigint,\n decimals0: bigint,\n decimals1: bigint,\n precision: bigint,\n): { token0PerToken1: string; token1PerToken0: string } {\n const rawRatio = getRawPriceRatio(tick)\n const adjustedRatio = adjustRatioForDecimals(\n rawRatio.numerator,\n rawRatio.denominator,\n decimals0,\n decimals1,\n )\n\n return {\n token0PerToken1: formatRatio(adjustedRatio.denominator, adjustedRatio.numerator, precision),\n token1PerToken0: formatRatio(adjustedRatio.numerator, adjustedRatio.denominator, precision),\n }\n}\n\n/**\n * Format a tick range for display.\n *\n * @param tickLower - Lower tick\n * @param tickUpper - Upper tick\n * @returns Formatted tick range string\n *\n * @example\n * ```typescript\n * formatTickRange(-50000n, 200000n) // \"-50000 - 200000\"\n * ```\n */\nexport function formatTickRange(tickLower: bigint, tickUpper: bigint): string {\n return `${tickLower} - ${tickUpper}`\n}\n\n/**\n * Format a price range for display.\n *\n * @param tickLower - Lower tick\n * @param tickUpper - Upper tick\n * @param decimals0 - Decimals of token0\n * @param decimals1 - Decimals of token1\n * @param precision - Number of decimal places to display\n * @returns Formatted price range string\n *\n * @example\n * ```typescript\n * formatPriceRange(0n, 0n, 18n, 18n, 2n) // \"1.00 - 1.00\"\n * ```\n */\nexport function formatPriceRange(\n tickLower: bigint,\n tickUpper: bigint,\n decimals0: bigint,\n decimals1: bigint,\n precision: bigint,\n): string {\n const lower = tickToPriceDecimalScaled(tickLower, decimals0, decimals1, precision)\n const upper = tickToPriceDecimalScaled(tickUpper, decimals0, decimals1, precision)\n return `${lower} - ${upper}`\n}\n\n/**\n * Calculate the tick spacing for a given fee tier.\n *\n * @param feeBps - Fee in basis points (e.g., 500n for 0.05%)\n * @returns Tick spacing\n *\n * @example\n * ```typescript\n * getTickSpacing(100n) // 1n (0.01% fee tier)\n * getTickSpacing(500n) // 10n (0.05% fee tier)\n * getTickSpacing(3000n) // 60n (0.30% fee tier)\n * getTickSpacing(10000n) // 200n (1.00% fee tier)\n * ```\n */\nexport function getTickSpacing(feeBps: bigint): bigint {\n // Standard Uniswap V3 tick spacings\n switch (feeBps) {\n case 100n:\n return 1n\n case 500n:\n return 10n\n case 3000n:\n return 60n\n case 10000n:\n return 200n\n default: {\n const spacing = feeBps / 50n\n return spacing > 1n ? spacing : 1n\n }\n }\n}\n\n/**\n * Round a tick to the nearest valid tick for a given tick spacing.\n *\n * @param tick - The tick to round\n * @param tickSpacing - The tick spacing\n * @returns Rounded tick\n *\n * @example\n * ```typescript\n * roundToTickSpacing(12345n, 10n) // 12340n\n * roundToTickSpacing(12345n, 60n) // 12360n\n * roundToTickSpacing(-12345n, 10n) // -12350n\n * ```\n */\nexport function roundToTickSpacing(tick: bigint, tickSpacing: bigint): bigint {\n const remainder = tick % tickSpacing\n if (remainder === 0n) {\n return tick\n }\n // Round to nearest\n if (tick >= 0n) {\n return remainder >= tickSpacing / 2n ? tick + (tickSpacing - remainder) : tick - remainder\n }\n\n const absRemainder = -remainder\n return absRemainder >= tickSpacing / 2n\n ? tick - (tickSpacing - absRemainder)\n : tick + absRemainder\n}\n\n/**\n * Result of {@link tickLimits}.\n */\nexport interface TickLimitsResult {\n /** Lower tick limit (clamped to MIN_TICK). */\n low: bigint\n /** Upper tick limit (clamped to MAX_TICK). */\n high: bigint\n}\n\n/**\n * Compute slippage-bounded tick limits around the current tick.\n *\n * 1 tick ≈ 1 basis point (0.01 %) of price change, so a `toleranceBps`\n * of 500 allows roughly 5 % price movement. The result is clamped to\n * the protocol's `[MIN_TICK, MAX_TICK]` range.\n *\n * Useful for setting `tickLimitLow` / `tickLimitHigh` on `openPosition`\n * and `closePosition` to protect against MEV sandwiches and volatile\n * tick moves.\n *\n * @param currentTick - The current pool tick (must be within [MIN_TICK, MAX_TICK]).\n * @param toleranceBps - Slippage tolerance in basis points (≈ ticks). Must be non-negative.\n * @returns Clamped `{ low, high }` tick limits.\n * @throws {RangeError} If `toleranceBps` is negative or `currentTick` is out of bounds.\n *\n * @example\n * ```typescript\n * const { low, high } = tickLimits(200_000n, 500n)\n * // low = 199_500n\n * // high = 200_500n\n *\n * await openPosition({ ..., tickLimitLow: low, tickLimitHigh: high })\n * ```\n */\nexport function tickLimits(currentTick: bigint, toleranceBps: bigint): TickLimitsResult {\n if (toleranceBps < 0n) {\n throw new RangeError(`toleranceBps must be non-negative, got ${toleranceBps}`)\n }\n if (currentTick < MIN_TICK || currentTick > MAX_TICK) {\n throw new RangeError(`currentTick ${currentTick} is out of bounds [${MIN_TICK}, ${MAX_TICK}]`)\n }\n\n const rawLow = currentTick - toleranceBps\n const rawHigh = currentTick + toleranceBps\n const low = rawLow < MIN_TICK ? MIN_TICK : rawLow\n const high = rawHigh > MAX_TICK ? MAX_TICK : rawHigh\n\n if (low > high) {\n throw new RangeError(\n `Computed tick limits are inverted: low ${low} > high ${high} (currentTick=${currentTick}, toleranceBps=${toleranceBps})`,\n )\n }\n\n return { low, high }\n}\n","/**\n * Write utilities for the Panoptic v2 SDK.\n * @module v2/writes/utils\n */\n\nimport type { Abi, Address, Hash, Log, PublicClient, WalletClient } from 'viem'\nimport { decodeEventLog, encodeFunctionData } from 'viem'\n\nimport { collateralTrackerV2Abi, panopticPoolV2Abi } from '../../../generated'\nimport type { PanopticEvent, TxOverrides, TxReceipt, TxResult } from '../types'\n\n/**\n * Decode PositionBalance packed data.\n *\n * Layout (from LSB to MSB):\n * - positionSize: bits 0-127 (uint128)\n * - poolUtilization0: bits 128-143 (uint16)\n * - poolUtilization1: bits 144-159 (uint16)\n * - tickAtMint: bits 160-183 (int24)\n * - timestampAtMint: bits 184-215 (uint32)\n * - blockAtMint: bits 216-254 (uint39)\n * - swapAtMint: bit 255 (bool)\n */\nexport function decodePositionBalance(balanceData: bigint): {\n positionSize: bigint\n poolUtilization0: bigint\n poolUtilization1: bigint\n tickAtMint: bigint\n timestampAtMint: bigint\n blockAtMint: bigint\n swapAtMint: boolean\n} {\n const positionSize = balanceData & ((1n << 128n) - 1n)\n const poolUtilization0 = (balanceData >> 128n) & 0xffffn\n const poolUtilization1 = (balanceData >> 144n) & 0xffffn\n\n // tickAtMint is int24 at bits 160-183\n let tickAtMint = (balanceData >> 160n) & 0xffffffn\n // Sign extend if negative (int24)\n if (tickAtMint > 0x7fffffn) {\n tickAtMint = tickAtMint - 0x1000000n\n }\n\n // timestampAtMint is uint32 at bits 184-215\n const timestampAtMint = (balanceData >> 184n) & 0xffffffffn\n\n // blockAtMint is uint39 at bits 216-254\n const blockAtMint = (balanceData >> 216n) & ((1n << 39n) - 1n)\n\n // swapAtMint is bool at bit 255\n const swapAtMint = balanceData >> 255n === 1n\n\n return {\n positionSize,\n poolUtilization0,\n poolUtilization1,\n tickAtMint,\n timestampAtMint,\n blockAtMint,\n swapAtMint,\n }\n}\n\n/**\n * Decode LeftRightSigned packed value.\n */\nexport function decodeLeftRightSigned(value: bigint): { right: bigint; left: bigint } {\n // Right is bits 0-127 (token0), Left is bits 128-255 (token1)\n // Both are signed int128\n let right = value & ((1n << 128n) - 1n)\n let left = value >> 128n\n\n // Sign extend right if needed\n if (right >= 1n << 127n) {\n right = right - (1n << 128n)\n }\n // Sign extend left if needed\n if (left >= 1n << 127n) {\n left = left - (1n << 128n)\n }\n\n return { right, left }\n}\n\n/**\n * Decode LeftRightUnsigned packed value.\n */\nexport function decodeLeftRightUnsigned(value: bigint): { right: bigint; left: bigint } {\n // Right is bits 0-127 (token0), Left is bits 128-255 (token1)\n // Both are unsigned uint128\n const right = value & ((1n << 128n) - 1n)\n const left = value >> 128n\n\n return { right, left }\n}\n\n/**\n * Parse Panoptic events from transaction logs.\n *\n * @param logs - The transaction logs\n * @returns Parsed Panoptic events\n */\nexport function parsePanopticEvents(logs: Log[]): PanopticEvent[] {\n const events: PanopticEvent[] = []\n\n // Try to decode each log with known ABIs\n for (const log of logs) {\n const baseEvent = {\n blockNumber: log.blockNumber ?? 0n,\n blockHash: (log.blockHash ??\n '0x0000000000000000000000000000000000000000000000000000000000000000') as Hash,\n transactionHash: log.transactionHash ?? ('0x' as Hash),\n logIndex: BigInt(log.logIndex ?? 0),\n }\n\n try {\n // Try PanopticPool events\n const poolEvent = decodeEventLog({\n abi: panopticPoolV2Abi,\n data: log.data,\n topics: log.topics,\n })\n\n if (poolEvent.eventName === 'OptionMinted') {\n const args = poolEvent.args as {\n recipient: `0x${string}`\n tokenId: bigint\n balanceData: bigint\n }\n const balance = decodePositionBalance(args.balanceData)\n events.push({\n type: 'OptionMinted',\n ...baseEvent,\n recipient: args.recipient,\n tokenId: args.tokenId,\n positionSize: balance.positionSize,\n poolUtilization0: balance.poolUtilization0,\n poolUtilization1: balance.poolUtilization1,\n tickAtMint: balance.tickAtMint,\n timestampAtMint: balance.timestampAtMint,\n blockAtMint: balance.blockAtMint,\n swapAtMint: balance.swapAtMint,\n })\n } else if (poolEvent.eventName === 'OptionBurnt') {\n const args = poolEvent.args as {\n recipient: `0x${string}`\n tokenId: bigint\n positionSize: bigint\n premiaByLeg: readonly bigint[]\n }\n events.push({\n type: 'OptionBurnt',\n ...baseEvent,\n recipient: args.recipient,\n tokenId: args.tokenId,\n positionSize: args.positionSize,\n premiaByLeg: [\n args.premiaByLeg[0] ?? 0n,\n args.premiaByLeg[1] ?? 0n,\n args.premiaByLeg[2] ?? 0n,\n args.premiaByLeg[3] ?? 0n,\n ] as const,\n })\n } else if (poolEvent.eventName === 'AccountLiquidated') {\n const args = poolEvent.args as {\n liquidator: `0x${string}`\n liquidatee: `0x${string}`\n bonusAmounts: bigint\n }\n const { right, left } = decodeLeftRightSigned(args.bonusAmounts)\n events.push({\n type: 'AccountLiquidated',\n ...baseEvent,\n liquidator: args.liquidator,\n liquidatee: args.liquidatee,\n bonusAmount0: right,\n bonusAmount1: left,\n })\n } else if (poolEvent.eventName === 'ForcedExercised') {\n const args = poolEvent.args as {\n exercisor: `0x${string}`\n user: `0x${string}`\n tokenId: bigint\n exerciseFee: bigint\n }\n const { right, left } = decodeLeftRightSigned(args.exerciseFee)\n events.push({\n type: 'ForcedExercised',\n ...baseEvent,\n exercisor: args.exercisor,\n user: args.user,\n tokenId: args.tokenId,\n exerciseFee0: right,\n exerciseFee1: left,\n })\n } else if (poolEvent.eventName === 'PremiumSettled') {\n const args = poolEvent.args as {\n user: `0x${string}`\n tokenId: bigint\n legIndex: bigint\n settledAmounts: bigint\n }\n const { right, left } = decodeLeftRightSigned(args.settledAmounts)\n events.push({\n type: 'PremiumSettled',\n ...baseEvent,\n user: args.user,\n tokenId: args.tokenId,\n legIndex: args.legIndex,\n settledAmount0: right,\n settledAmount1: left,\n })\n }\n } catch {\n // Not a PanopticPool event, try CollateralTracker\n try {\n const collateralEvent = decodeEventLog({\n abi: collateralTrackerV2Abi,\n data: log.data,\n topics: log.topics,\n })\n\n if (collateralEvent.eventName === 'Deposit') {\n const args = collateralEvent.args as {\n sender: `0x${string}`\n owner: `0x${string}`\n assets: bigint\n shares: bigint\n }\n events.push({\n type: 'Deposit',\n ...baseEvent,\n sender: args.sender,\n owner: args.owner,\n assets: args.assets,\n shares: args.shares,\n })\n } else if (collateralEvent.eventName === 'Withdraw') {\n const args = collateralEvent.args as {\n sender: `0x${string}`\n receiver: `0x${string}`\n owner: `0x${string}`\n assets: bigint\n shares: bigint\n }\n events.push({\n type: 'Withdraw',\n ...baseEvent,\n sender: args.sender,\n receiver: args.receiver,\n owner: args.owner,\n assets: args.assets,\n shares: args.shares,\n })\n }\n } catch {\n // Unknown event, skip\n }\n }\n }\n\n return events\n}\n\n/**\n * Create a TxResult from a transaction hash.\n *\n * @param client - The public client\n * @param hash - The transaction hash\n * @returns TxResult with wait function\n */\nexport function createTxResult(client: PublicClient, hash: Hash): TxResult {\n return {\n hash,\n wait: async (confirmations?: bigint): Promise<TxReceipt> => {\n const receipt = await client.waitForTransactionReceipt({\n hash,\n confirmations: confirmations !== undefined ? Number(confirmations) : undefined,\n })\n\n const events = parsePanopticEvents(receipt.logs)\n\n return {\n hash: receipt.transactionHash,\n blockNumber: receipt.blockNumber,\n blockHash: receipt.blockHash,\n gasUsed: receipt.gasUsed,\n status: receipt.status === 'success' ? 'success' : 'reverted',\n events,\n }\n },\n }\n}\n\n/**\n * Execute a write operation and return TxResult.\n *\n * @param client - The public client\n * @param hashPromise - Promise that resolves to transaction hash\n * @returns TxResult\n */\nexport async function executeWrite(\n client: PublicClient,\n hashPromise: Promise<Hash>,\n): Promise<TxResult> {\n const hash = await hashPromise\n return createTxResult(client, hash)\n}\n\n/**\n * Execute a write operation and wait for receipt.\n *\n * @param client - The public client\n * @param hashPromise - Promise that resolves to transaction hash\n * @param confirmations - Number of confirmations to wait for\n * @returns TxReceipt\n */\nexport async function executeWriteAndWait(\n client: PublicClient,\n hashPromise: Promise<Hash>,\n confirmations?: bigint,\n): Promise<TxReceipt> {\n const result = await executeWrite(client, hashPromise)\n return result.wait(confirmations)\n}\n\n/**\n * Parameters for the submitWrite helper.\n */\nexport interface SubmitWriteParams {\n /** Public client */\n client: PublicClient\n /** Wallet client */\n walletClient: WalletClient\n /** Account address */\n account: Address\n /** Contract address */\n address: Address\n /** Contract ABI */\n abi: Abi\n /** Function name to call */\n functionName: string\n /** Function arguments */\n args: readonly unknown[]\n /** ETH value to send with the transaction (for native ETH deposits) */\n value?: bigint\n /** Optional gas and transaction overrides */\n txOverrides?: TxOverrides\n}\n\n/**\n * Submit a write operation, supporting both direct wallet submission\n * and custom broadcaster paths with gas overrides.\n *\n * Normal path (no broadcaster): calls walletClient.writeContract() with gas overrides.\n * Broadcaster path: prepareTransactionRequest → apply overrides → signTransaction → broadcast.\n *\n * @param params - Submit write parameters\n * @returns TxResult\n */\nexport async function submitWrite(params: SubmitWriteParams): Promise<TxResult> {\n const { client, walletClient, account, address, abi, functionName, args, value, txOverrides } =\n params\n\n const broadcaster = txOverrides?.broadcaster\n\n if (broadcaster) {\n // Encode contract calldata before request preparation so gas/tx params\n // are derived from the exact call being signed and broadcast.\n const data = encodeFunctionData({ abi, functionName, args })\n\n // Broadcaster path: prepare → sign → broadcast\n const broadcastAccount = walletClient.account ?? account\n const request = await walletClient.prepareTransactionRequest({\n account: broadcastAccount,\n to: address,\n chain: walletClient.chain,\n data,\n ...(value !== undefined && { value }),\n ...(txOverrides?.maxFeePerGas !== undefined && { maxFeePerGas: txOverrides.maxFeePerGas }),\n ...(txOverrides?.maxPriorityFeePerGas !== undefined && {\n maxPriorityFeePerGas: txOverrides.maxPriorityFeePerGas,\n }),\n ...(txOverrides?.gas !== undefined && { gas: txOverrides.gas }),\n ...(txOverrides?.nonce !== undefined && { nonce: Number(txOverrides.nonce) }),\n })\n\n const signedTx = await walletClient.signTransaction({\n ...request,\n account: broadcastAccount,\n } as unknown as Parameters<WalletClient['signTransaction']>[0])\n\n const hash = await broadcaster.broadcast(signedTx)\n return createTxResult(client, hash)\n }\n\n // Normal path: direct writeContract with gas overrides\n const gasOverrides: Record<string, unknown> = {}\n if (txOverrides?.maxFeePerGas !== undefined) {\n gasOverrides.maxFeePerGas = txOverrides.maxFeePerGas\n }\n if (txOverrides?.maxPriorityFeePerGas !== undefined) {\n gasOverrides.maxPriorityFeePerGas = txOverrides.maxPriorityFeePerGas\n }\n if (txOverrides?.nonce !== undefined) {\n gasOverrides.nonce = Number(txOverrides.nonce)\n }\n\n // Use the walletClient's local account (if available) for local signing.\n // Passing a string address triggers eth_sendTransaction (remote signing),\n // which fails with hosted RPC providers like Alchemy/Infura.\n const resolvedAccount = walletClient.account ?? account\n\n // If no explicit gas override, estimate with a 20% buffer.\n // Panoptic dispatch calls are gas-heavy and viem's default estimate can be tight.\n if (txOverrides?.gas !== undefined) {\n gasOverrides.gas = txOverrides.gas\n } else {\n const estimated = await client.estimateContractGas({\n address,\n abi,\n functionName,\n args,\n account: resolvedAccount,\n ...(value !== undefined && { value }),\n } as Parameters<typeof client.estimateContractGas>[0])\n gasOverrides.gas = (estimated * 120n) / 100n\n }\n\n const hash = await walletClient.writeContract({\n address,\n abi,\n functionName,\n args,\n account: resolvedAccount,\n chain: walletClient.chain,\n ...(value !== undefined && { value }),\n ...gasOverrides,\n })\n\n return createTxResult(client, hash)\n}\n\n/**\n * Parameters required for all write operations.\n */\nexport interface BaseWriteParams {\n /** Public client for reading state */\n client: PublicClient\n}\n","/**\n * Base error class for the Panoptic v2 SDK.\n * @module v2/errors/base\n */\n\n/**\n * Base error class for all Panoptic SDK errors.\n * All errors thrown by the SDK extend this class.\n *\n * @example\n * ```typescript\n * try {\n * await openPosition(config, params)\n * } catch (error) {\n * if (error instanceof PanopticError) {\n * console.log('Panoptic error:', error.name, error.message)\n * console.log('Original cause:', error.cause)\n * }\n * }\n * ```\n */\nexport class PanopticError extends Error {\n override readonly name: string = 'PanopticError'\n\n /** The Solidity error name (e.g. 'PriceBoundFail', 'InputListFail'). Set by the parser. */\n errorName?: string\n\n /**\n * Creates a new PanopticError.\n *\n * @param message - Human-readable error message\n * @param cause - Optional underlying error that caused this error\n */\n constructor(\n message: string,\n public readonly cause?: Error,\n ) {\n super(message)\n\n // Maintains proper stack trace for where error was thrown (V8 only)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n\n // Ensure prototype chain is correctly set up\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n","/**\n * Contract errors from Errors.sol mapped to TypeScript classes.\n * @module v2/errors/contract\n */\n\nimport type { Address } from 'viem'\n\nimport { PanopticError } from './base'\n\n// ─────────────────────────────────────────────────────────────\n// Solvency & Margin Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * The account is not solvent enough to perform the desired action.\n * @see Errors.sol:9\n */\nexport class AccountInsolventError extends PanopticError {\n override readonly name = 'AccountInsolventError'\n\n constructor(\n public readonly solvent: bigint,\n public readonly numberOfTicks: bigint,\n cause?: Error,\n ) {\n super(`Account insolvent: solvent=${solvent}, numberOfTicks=${numberOfTicks}`, cause)\n }\n}\n\n/**\n * Position is still solvent and cannot be liquidated.\n * @see Errors.sol:84\n */\nexport class NotMarginCalledError extends PanopticError {\n override readonly name = 'NotMarginCalledError'\n\n constructor(cause?: Error) {\n super('Position is still solvent and cannot be liquidated', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Token & Collateral Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * The user does not own enough assets to open/close a position.\n * @see Errors.sol:78\n */\nexport class NotEnoughTokensError extends PanopticError {\n override readonly name = 'NotEnoughTokensError'\n\n constructor(\n public readonly tokenAddress: Address,\n public readonly assetsRequested: bigint,\n public readonly assetBalance: bigint,\n cause?: Error,\n ) {\n super(\n `Not enough tokens: requested=${assetsRequested}, balance=${assetBalance}, token=${tokenAddress}`,\n cause,\n )\n }\n}\n\n/**\n * There is not enough available liquidity in the chunk for a long leg.\n * @see Errors.sol:75\n */\nexport class NotEnoughLiquidityInChunkError extends PanopticError {\n override readonly name = 'NotEnoughLiquidityInChunkError'\n\n constructor(cause?: Error) {\n super('Not enough liquidity in chunk for long leg creation or short leg closure', cause)\n }\n}\n\n/**\n * There is not enough available liquidity to fulfill a credit.\n * @see Errors.sol:47\n */\nexport class InsufficientCreditLiquidityError extends PanopticError {\n override readonly name = 'InsufficientCreditLiquidityError'\n\n constructor(cause?: Error) {\n super('Insufficient credit liquidity available in the PanopticPool', cause)\n }\n}\n\n/**\n * The amount deposited is larger than the maximum permitted.\n * @see Errors.sol:25\n */\nexport class DepositTooLargeError extends PanopticError {\n override readonly name = 'DepositTooLargeError'\n\n constructor(cause?: Error) {\n super('Deposit amount exceeds maximum permitted', cause)\n }\n}\n\n/**\n * Attempted to withdraw/redeem less than a single asset.\n * @see Errors.sol:16\n */\nexport class BelowMinimumRedemptionError extends PanopticError {\n override readonly name = 'BelowMinimumRedemptionError'\n\n constructor(cause?: Error) {\n super('Redemption amount below minimum threshold', cause)\n }\n}\n\n/**\n * Attempted to withdraw/redeem more than available.\n * @see Errors.sol:35\n */\nexport class ExceedsMaximumRedemptionError extends PanopticError {\n override readonly name = 'ExceedsMaximumRedemptionError'\n\n constructor(cause?: Error) {\n super('Redemption exceeds maximum available (liquidity, shares, or open positions)', cause)\n }\n}\n\n/**\n * Mints/burns of a position returns no collateral requirement.\n * @see Errors.sol:141\n */\nexport class ZeroCollateralRequirementError extends PanopticError {\n override readonly name = 'ZeroCollateralRequirementError'\n\n constructor(cause?: Error) {\n super('Position mint/burn returned zero collateral requirement', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Position & TokenId Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * The TokenId provided is malformed or invalid.\n * @see Errors.sol:54\n */\nexport class InvalidTokenIdParameterError extends PanopticError {\n override readonly name = 'InvalidTokenIdParameterError'\n\n /**\n * Parameter type meanings:\n * 0=poolId, 1=ratio, 2=tokenType, 3=riskPartner, 4=strike, 5=width, 6=duplicateChunk\n */\n constructor(\n public readonly parameterType: bigint,\n cause?: Error,\n ) {\n const paramNames = [\n 'poolId',\n 'ratio',\n 'tokenType',\n 'riskPartner',\n 'strike',\n 'width',\n 'duplicateChunk',\n ]\n const paramName = paramNames[Number(parameterType)] ?? `unknown(${parameterType})`\n super(`Invalid TokenId parameter: ${paramName}`, cause)\n }\n}\n\n/**\n * Position is not owned by the user and has positionSize=0.\n * @see Errors.sol:96\n */\nexport class PositionNotOwnedError extends PanopticError {\n override readonly name = 'PositionNotOwnedError'\n\n constructor(cause?: Error) {\n super('Position is not owned by the user', cause)\n }\n}\n\n/**\n * The maximum token deltas for a position exceed limits.\n * @see Errors.sol:99\n */\nexport class PositionTooLargeError extends PanopticError {\n override readonly name = 'PositionTooLargeError'\n\n constructor(cause?: Error) {\n super('Position size exceeds maximum allowed token deltas', cause)\n }\n}\n\n/**\n * User has open positions, so they cannot transfer collateral shares.\n * @see Errors.sol:93\n */\nexport class PositionCountNotZeroError extends PanopticError {\n override readonly name = 'PositionCountNotZeroError'\n\n constructor(cause?: Error) {\n super('Cannot transfer collateral shares while positions are open', cause)\n }\n}\n\n/**\n * The list of provided TokenIds has a duplicate entry.\n * @see Errors.sol:28\n */\nexport class DuplicateTokenIdError extends PanopticError {\n override readonly name = 'DuplicateTokenIdError'\n\n constructor(cause?: Error) {\n super('Duplicate TokenId in provided list', cause)\n }\n}\n\n/**\n * The supplied tokenId has no valid legs.\n * @see Errors.sol:144\n */\nexport class TokenIdHasZeroLegsError extends PanopticError {\n override readonly name = 'TokenIdHasZeroLegsError'\n\n constructor(cause?: Error) {\n super('TokenId has no valid legs', cause)\n }\n}\n\n/**\n * Position would exceed maximum legs open for account.\n * @see Errors.sol:112\n */\nexport class TooManyLegsOpenError extends PanopticError {\n override readonly name = 'TooManyLegsOpenError'\n\n constructor(cause?: Error) {\n super('Position would exceed maximum allowed legs open', cause)\n }\n}\n\n/**\n * The provided list of option positions is incorrect or invalid.\n * @see Errors.sol:38\n */\nexport class InputListFailError extends PanopticError {\n override readonly name = 'InputListFailError'\n\n constructor(cause?: Error) {\n super('Invalid position list provided', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Tick & Price Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Tick is not between MIN_TICK and MAX_TICK.\n * @see Errors.sol:41\n */\nexport class InvalidTickError extends PanopticError {\n override readonly name = 'InvalidTickError'\n\n constructor(cause?: Error) {\n super('Tick is outside valid range (MIN_TICK to MAX_TICK)', cause)\n }\n}\n\n/**\n * The tick range is invalid (not initializable or exceeds bounds).\n * @see Errors.sol:120\n */\nexport class InvalidTickBoundError extends PanopticError {\n override readonly name = 'InvalidTickBoundError'\n\n constructor(cause?: Error) {\n super(\n 'Tick range is invalid (not initializable multiples of tickSpacing or exceeds bounds)',\n cause,\n )\n }\n}\n\n/**\n * The current tick has fallen outside the slippage range.\n * @see Errors.sol:102\n */\nexport class PriceBoundFailError extends PanopticError {\n override readonly name = 'PriceBoundFailError'\n\n constructor(\n public readonly currentTick: bigint,\n cause?: Error,\n ) {\n super(`Price moved outside slippage bounds (currentTick=${currentTick})`, cause)\n }\n}\n\n/**\n * The price impact of the trade is too large.\n * @see Errors.sol:105\n */\nexport class PriceImpactTooLargeError extends PanopticError {\n override readonly name = 'PriceImpactTooLargeError'\n\n constructor(cause?: Error) {\n super('Price impact of trade exceeds maximum allowed', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Liquidity Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Mints/burns of zero-liquidity chunks are not supported.\n * @see Errors.sol:19\n */\nexport class ChunkHasZeroLiquidityError extends PanopticError {\n override readonly name = 'ChunkHasZeroLiquidityError'\n\n constructor(cause?: Error) {\n super('Cannot mint/burn chunk with zero liquidity', cause)\n }\n}\n\n/**\n * Liquidity in a chunk is above 2^128.\n * @see Errors.sol:44\n */\nexport class LiquidityTooHighError extends PanopticError {\n override readonly name = 'LiquidityTooHighError'\n\n constructor(cause?: Error) {\n super('Liquidity exceeds maximum (2^128)', cause)\n }\n}\n\n/**\n * Net liquidity is zero due to small positions.\n * @see Errors.sol:63\n */\nexport class NetLiquidityZeroError extends PanopticError {\n override readonly name = 'NetLiquidityZeroError'\n\n constructor(cause?: Error) {\n super('Net liquidity is zero, cannot compute liquidity spread', cause)\n }\n}\n\n/**\n * Effective liquidity above threshold during long mint or short burn.\n * @see Errors.sol:32\n */\nexport class EffectiveLiquidityAboveThresholdError extends PanopticError {\n override readonly name = 'EffectiveLiquidityAboveThresholdError'\n\n constructor(cause?: Error) {\n super('Effective liquidity above spread threshold', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Oracle & Safe Mode Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * An oracle price is too far from another or the current tick.\n * @see Errors.sol:109\n */\nexport class StaleOracleError extends PanopticError {\n override readonly name = 'StaleOracleError'\n\n constructor(cause?: Error) {\n super('Oracle price deviation too high (potential manipulation safeguard)', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Exercise Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * None of the legs in a position are force-exercisable.\n * @see Errors.sol:66\n */\nexport class NoLegsExercisableError extends PanopticError {\n override readonly name = 'NoLegsExercisableError'\n\n constructor(cause?: Error) {\n super('No legs are force-exercisable (all are short or ATM long)', cause)\n }\n}\n\n/**\n * The leg is not long, so premium cannot be settled.\n * @see Errors.sol:69\n */\nexport class NotALongLegError extends PanopticError {\n override readonly name = 'NotALongLegError'\n\n constructor(cause?: Error) {\n super('Cannot settle premium for non-long leg', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Pool & Initialization Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * The Uniswap Pool has not been created.\n * @see Errors.sol:90\n */\nexport class PoolNotInitializedError extends PanopticError {\n override readonly name = 'PoolNotInitializedError'\n\n constructor(cause?: Error) {\n super('Uniswap pool not initialized', cause)\n }\n}\n\n/**\n * Smart contract has already been initialized.\n * @see Errors.sol:22\n */\nexport class AlreadyInitializedError extends PanopticError {\n override readonly name = 'AlreadyInitializedError'\n\n constructor(cause?: Error) {\n super('Contract already initialized', cause)\n }\n}\n\n/**\n * The supplied poolId does not match the poolId for that Uniswap Pool.\n * @see Errors.sol:132\n */\nexport class WrongPoolIdError extends PanopticError {\n override readonly name = 'WrongPoolIdError'\n\n constructor(cause?: Error) {\n super('Pool ID mismatch', cause)\n }\n}\n\n/**\n * The poolId's don't match (SFPM).\n * @see Errors.sol:135\n */\nexport class WrongUniswapPoolError extends PanopticError {\n override readonly name = 'WrongUniswapPoolError'\n\n constructor(cause?: Error) {\n super('Uniswap pool mismatch', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Authorization Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * The caller is not the Panoptic Pool.\n * @see Errors.sol:87\n */\nexport class NotPanopticPoolError extends PanopticError {\n override readonly name = 'NotPanopticPoolError'\n\n constructor(cause?: Error) {\n super('Caller is not the Panoptic Pool', cause)\n }\n}\n\n/**\n * Can only be called by the guardian.\n * @see Errors.sol:81\n */\nexport class NotGuardianError extends PanopticError {\n override readonly name = 'NotGuardianError'\n\n constructor(cause?: Error) {\n super('Caller is not the guardian', cause)\n }\n}\n\n/**\n * Can only be called by the Builder.\n * @see Errors.sol:72\n */\nexport class NotBuilderError extends PanopticError {\n override readonly name = 'NotBuilderError'\n\n constructor(cause?: Error) {\n super('Caller is not the builder', cause)\n }\n}\n\n/**\n * Invalid builder code.\n * @see Errors.sol:50\n */\nexport class InvalidBuilderCodeError extends PanopticError {\n override readonly name = 'InvalidBuilderCodeError'\n\n constructor(cause?: Error) {\n super('Invalid builder code', cause)\n }\n}\n\n/**\n * Mint or swap callback from invalid address.\n * @see Errors.sol:57\n */\nexport class InvalidUniswapCallbackError extends PanopticError {\n override readonly name = 'InvalidUniswapCallbackError'\n\n constructor(cause?: Error) {\n super('Invalid Uniswap callback (address mismatch)', cause)\n }\n}\n\n/**\n * Unlock callback from non-canonical pool manager.\n * @see Errors.sol:123\n */\nexport class UnauthorizedUniswapCallbackError extends PanopticError {\n override readonly name = 'UnauthorizedUniswapCallbackError'\n\n constructor(cause?: Error) {\n super('Unauthorized Uniswap V4 callback', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Transfer & Casting Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * ERC20 or SFPM (ERC1155) token transfer did not complete successfully.\n * @see Errors.sol:115\n */\nexport class TransferFailedError extends PanopticError {\n override readonly name = 'TransferFailedError'\n\n constructor(\n public readonly token: Address,\n public readonly from: Address,\n public readonly amount: bigint,\n public readonly balance: bigint,\n cause?: Error,\n ) {\n super(\n `Transfer failed: token=${token}, from=${from}, amount=${amount}, balance=${balance}`,\n cause,\n )\n }\n}\n\n/**\n * Casting error (e.g., uint128(uint256(a)) fails).\n * @see Errors.sol:13\n */\nexport class CastingError extends PanopticError {\n override readonly name = 'CastingError'\n\n constructor(cause?: Error) {\n super('Numeric casting overflow', cause)\n }\n}\n\n/**\n * Underflow or overflow in library operation.\n * @see Errors.sol:126\n */\nexport class UnderOverFlowError extends PanopticError {\n override readonly name = 'UnderOverFlowError'\n\n constructor(cause?: Error) {\n super('Arithmetic underflow or overflow', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Reentrancy Error\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Reentrancy check triggered.\n * @see Errors.sol:129\n */\nexport class ReentrancyError extends PanopticError {\n override readonly name = 'ReentrancyError'\n\n constructor(cause?: Error) {\n super('Reentrancy detected', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Factory Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Pool deployment via CREATE2 failed.\n */\nexport class CreateFailError extends PanopticError {\n override readonly name = 'CreateFailError'\n\n constructor(cause?: Error) {\n super('Pool deployment failed (CREATE2)', cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Other Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Zero address was supplied as a parameter.\n * @see Errors.sol:138\n */\nexport class ZeroAddressError extends PanopticError {\n override readonly name = 'ZeroAddressError'\n\n constructor(cause?: Error) {\n super('Zero address supplied', cause)\n }\n}\n\n/**\n * Length mismatch between positionIdList and positionBalanceArray.\n * @see Errors.sol:60\n */\nexport class LengthMismatchError extends PanopticError {\n override readonly name = 'LengthMismatchError'\n\n constructor(cause?: Error) {\n super('Array length mismatch', cause)\n }\n}\n","/**\n * SDK-specific errors not derived from contract Errors.sol.\n * @module v2/errors/sdk\n */\n\nimport type { Address } from 'viem'\n\nimport type { BatchDiagnostic } from '../batch/types'\nimport type { SafeMode } from '../types/oracle'\nimport type { PoolHealthStatus } from '../types/pool'\nimport { PanopticError } from './base'\n\n// ─────────────────────────────────────────────────────────────\n// Configuration & Network Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Wallet is connected to a different network than the config expects.\n * Thrown on write operations when wallet chain !== config chain.\n */\nexport class NetworkMismatchError extends PanopticError {\n override readonly name = 'NetworkMismatchError'\n\n constructor(\n public readonly walletChainId: bigint,\n public readonly expectedChainId: bigint,\n cause?: Error,\n ) {\n super(\n `Network mismatch: wallet on chain ${walletChainId}, expected chain ${expectedChainId}`,\n cause,\n )\n }\n}\n\n/**\n * Cross-pool operation attempted (query for different pool than configured).\n */\nexport class CrossPoolError extends PanopticError {\n override readonly name = 'CrossPoolError'\n\n constructor(\n public readonly requestedPool: Address,\n public readonly configuredPool: Address,\n cause?: Error,\n ) {\n super(`Cross-pool error: requested ${requestedPool}, configured ${configuredPool}`, cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Sync & Position Tracking Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Position sync timed out.\n */\nexport class SyncTimeoutError extends PanopticError {\n override readonly name = 'SyncTimeoutError'\n\n constructor(\n public readonly elapsedMs: bigint,\n public readonly blocksProcessed: bigint,\n public readonly blocksRemaining: bigint,\n cause?: Error,\n ) {\n super(\n `Sync timeout after ${elapsedMs}ms: processed ${blocksProcessed} blocks, ${blocksRemaining} remaining`,\n cause,\n )\n }\n}\n\n/**\n * Snapshot recovery from dispatch() calldata failed.\n */\nexport class PositionSnapshotNotFoundError extends PanopticError {\n override readonly name = 'PositionSnapshotNotFoundError'\n\n constructor(cause?: Error) {\n super('Position snapshot not found in dispatch() calldata history', cause)\n }\n}\n\n/**\n * Provider is behind the expected block number.\n * Thrown when minBlockNumber option is specified and provider is lagging.\n */\nexport class ProviderLagError extends PanopticError {\n override readonly name = 'ProviderLagError'\n\n constructor(\n public readonly providerBlock: bigint,\n public readonly expectedBlock: bigint,\n cause?: Error,\n ) {\n super(`Provider behind: at block ${providerBlock}, expected at least ${expectedBlock}`, cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Multicall Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Multicall3 returned fewer results than the number of calls submitted.\n */\nexport class MulticallResultMissingError extends PanopticError {\n override readonly name = 'MulticallResultMissingError'\n\n constructor(\n public readonly label: string,\n public readonly index: number,\n cause?: Error,\n ) {\n super(`Missing Multicall3 result for ${label} (index ${index})`, cause)\n }\n}\n\n/**\n * Multicall3 sub-call reverted (success=false in the result tuple).\n */\nexport class MulticallResultFailedError extends PanopticError {\n override readonly name = 'MulticallResultFailedError'\n\n constructor(\n public readonly label: string,\n public readonly index: number,\n cause?: Error,\n ) {\n super(`Multicall3 result failed for ${label} (index ${index})`, cause)\n }\n}\n\n/**\n * eth_call to Multicall3 returned no data (provider-level failure).\n */\nexport class MulticallNoDataError extends PanopticError {\n override readonly name = 'MulticallNoDataError'\n\n constructor(\n public readonly functionName: string,\n cause?: Error,\n ) {\n super(`Multicall3.${functionName} returned no data`, cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Chunk Tracking Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Exceeded the maximum number of tracked chunks (1000 per pool).\n */\nexport class ChunkLimitError extends PanopticError {\n override readonly name = 'ChunkLimitError'\n\n constructor(\n public readonly currentCount: bigint,\n public readonly attemptedAdd: bigint,\n cause?: Error,\n ) {\n super(\n `Chunk limit exceeded: ${currentCount} tracked, attempted to add ${attemptedAdd} (max 1000)`,\n cause,\n )\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Pool Health Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Pool is in safe mode and trading is restricted.\n */\nexport class SafeModeError extends PanopticError {\n override readonly name = 'SafeModeError'\n\n constructor(\n public readonly level: SafeMode,\n public readonly reason: string,\n cause?: Error,\n ) {\n super(`Pool in safe mode (${level}): ${reason}`, cause)\n }\n}\n\n/**\n * Data is stale (too old based on block timestamp).\n */\nexport class StaleDataError extends PanopticError {\n override readonly name = 'StaleDataError'\n\n constructor(\n public readonly blockTimestamp: bigint,\n public readonly currentTimestamp: bigint,\n public readonly stalenessSeconds: bigint,\n cause?: Error,\n ) {\n super(\n `Data stale: block timestamp ${blockTimestamp}, current ${currentTimestamp}, stale by ${stalenessSeconds}s`,\n cause,\n )\n }\n}\n\n/**\n * Pool is in an unhealthy state (low liquidity or paused).\n */\nexport class UnhealthyPoolError extends PanopticError {\n override readonly name = 'UnhealthyPoolError'\n\n constructor(\n public readonly healthStatus: PoolHealthStatus,\n cause?: Error,\n ) {\n super(`Pool unhealthy: ${healthStatus}`, cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Oracle Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * Cannot poke oracle because less than 64 seconds since last update.\n */\nexport class OracleRateLimitedError extends PanopticError {\n override readonly name = 'OracleRateLimitedError'\n\n constructor(\n public readonly lastUpdate: bigint,\n public readonly currentTime: bigint,\n cause?: Error,\n ) {\n const elapsed = currentTime - lastUpdate\n super(`Oracle rate limited: last update ${elapsed}s ago, must wait 64s between updates`, cause)\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Helper Contract Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * PanopticHelper contract is not deployed.\n * Functions requiring the helper will throw this error.\n */\nexport class PanopticHelperNotDeployedError extends PanopticError {\n override readonly name = 'PanopticHelperNotDeployedError'\n\n constructor(cause?: Error) {\n super(\n 'PanopticHelper contract not deployed. This function requires the helper contract.',\n cause,\n )\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// RPC Errors\n// ─────────────────────────────────────────────────────────────\n\n/**\n * RPC request failed after all retries.\n */\nexport class RpcError extends PanopticError {\n override readonly name = 'RpcError'\n\n constructor(\n public readonly method: string,\n public readonly retriesAttempted: bigint,\n cause?: Error,\n ) {\n super(`RPC ${method} failed after ${retriesAttempted} retries`, cause)\n }\n}\n\n/**\n * RPC returned an error response.\n */\nexport class RpcResponseError extends PanopticError {\n override readonly name = 'RpcResponseError'\n\n constructor(\n public readonly code: bigint,\n public readonly rpcMessage: string,\n cause?: Error,\n ) {\n super(`RPC error ${code}: ${rpcMessage}`, cause)\n }\n}\n\n/**\n * Thrown when required data is not found in storage.\n * This usually means syncPositions() needs to be called first.\n */\nexport class StorageDataNotFoundError extends PanopticError {\n override readonly name = 'StorageDataNotFoundError'\n\n constructor(\n public readonly dataType: 'poolMeta' | 'positions' | 'positionMeta',\n public readonly key: string,\n ) {\n super(\n `${dataType} not found in storage (key: ${key}). ` +\n 'Call syncPositions() first to populate storage.',\n )\n }\n}\n\n/**\n * Position ID list was not provided and could not be resolved from storage.\n *\n * Either pass `existingPositionIds` / `positionIdList` explicitly, or provide\n * `storage` + `chainId` so the SDK can read tracked positions automatically.\n */\nexport class MissingPositionIdsError extends PanopticError {\n override readonly name = 'MissingPositionIdsError'\n\n constructor() {\n super(\n 'Either existingPositionIds/positionIdList must be provided, or storage + chainId for auto-resolution.',\n )\n }\n}\n\n/**\n * History range parameters are invalid (e.g. startBlock > endBlock, points < 0).\n */\nexport class InvalidHistoryRangeError extends PanopticError {\n override readonly name = 'InvalidHistoryRangeError'\n}\n\n/**\n * Tick limits are invalid for the given operation.\n *\n * tickLimitLow must be <= tickLimitHigh regardless of swapAtMint.\n * The SDK handles reordering internally based on the swapAtMint flag.\n */\n/**\n * Generic validation error for public SDK functions.\n * Thrown when input parameters fail validation checks.\n */\nexport class PanopticValidationError extends PanopticError {\n override readonly name = 'PanopticValidationError'\n}\n\nexport class InvalidTickLimitsError extends PanopticError {\n override readonly name = 'InvalidTickLimitsError'\n\n constructor(\n public readonly tickLimitLow: bigint,\n public readonly tickLimitHigh: bigint,\n ) {\n super(\n `Invalid tick limits: tickLimitLow (${tickLimitLow}) must be <= tickLimitHigh (${tickLimitHigh}). ` +\n 'The SDK reorders limits based on swapAtMint — always pass them in ascending order.',\n )\n }\n}\n\n/**\n * No loan positions found for the given token.\n */\nexport class NoLoanPositionsError extends PanopticError {\n override readonly name = 'NoLoanPositionsError'\n\n constructor(public readonly token: Address) {\n super(`No loan positions found for token ${token}`)\n }\n}\n\n/**\n * All loan tokenId slots are in use — no unique tokenId could be generated.\n */\nexport class LoanSlotExhaustedError extends PanopticError {\n override readonly name = 'LoanSlotExhaustedError'\n\n constructor() {\n super('Could not build unique loan tokenId — all slots in use')\n }\n}\n\n/**\n * Maximum retry attempts exceeded for the given operation.\n */\nexport class MaxRetriesExceededError extends PanopticError {\n override readonly name = 'MaxRetriesExceededError'\n\n constructor(public readonly operation: string) {\n super(`${operation}: max retries exceeded`)\n }\n}\n\n/**\n * Batch dispatch validation failed.\n *\n * Thrown by `executeBatchDispatch` when the batch contains invalid items\n * (mint of an existing tokenId, burn of a position not held, duplicate tokenIds,\n * cross-pool ops, etc.). The `diagnostics` array carries one entry per failure.\n */\nexport class BatchValidationError extends PanopticError {\n override readonly name = 'BatchValidationError'\n\n constructor(public readonly diagnostics: BatchDiagnostic[]) {\n super(\n `Batch dispatch validation failed (${diagnostics.length} issue${diagnostics.length === 1 ? '' : 's'}): ` +\n diagnostics.map((d) => `[${d.code}] ${d.message}`).join('; '),\n )\n }\n}\n\n/**\n * Thrown when a swap token address doesn't match either token in the pool.\n */\nexport class SwapTokenMismatchError extends PanopticError {\n override readonly name = 'SwapTokenMismatchError'\n\n constructor(\n public readonly tokenAddress: Address,\n public readonly token0: Address,\n public readonly token1: Address,\n ) {\n super(\n `Token ${tokenAddress} does not match either pool token: token0=${token0}, token1=${token1}`,\n )\n }\n}\n","/**\n * Custom error ABI definitions for Panoptic v2 contracts.\n *\n * Contains all custom errors from Errors.sol with their signatures.\n * Used for decoding contract revert data.\n *\n * Selectors sourced from `forge selectors list` output.\n *\n * @module v2/errors/errorsAbi\n */\n\n/**\n * All custom errors from Panoptic Errors.sol\n *\n * Selector computation: keccak256(errorSignature)[:4]\n */\nexport const panopticErrorsAbi = [\n // AccountInsolvent(uint256 solvent, uint256 numberOfTicks) - 0xcdef092d\n {\n type: 'error',\n name: 'AccountInsolvent',\n inputs: [\n { name: 'solvent', type: 'uint256' },\n { name: 'numberOfTicks', type: 'uint256' },\n ],\n },\n\n // AlreadyInitialized() - 0x0dc149f0\n {\n type: 'error',\n name: 'AlreadyInitialized',\n inputs: [],\n },\n\n // BelowMinimumRedemption() - 0x13185bd7\n {\n type: 'error',\n name: 'BelowMinimumRedemption',\n inputs: [],\n },\n\n // CastingError() - 0xb6680045\n {\n type: 'error',\n name: 'CastingError',\n inputs: [],\n },\n\n // ChunkHasZeroLiquidity() - 0x126ae3af\n {\n type: 'error',\n name: 'ChunkHasZeroLiquidity',\n inputs: [],\n },\n\n // CreateFail() - 0xebfef188\n {\n type: 'error',\n name: 'CreateFail',\n inputs: [],\n },\n\n // DepositTooLarge() - 0xc56d46d3\n {\n type: 'error',\n name: 'DepositTooLarge',\n inputs: [],\n },\n\n // DuplicateTokenId() - 0x2bd1a05a\n {\n type: 'error',\n name: 'DuplicateTokenId',\n inputs: [],\n },\n\n // EffectiveLiquidityAboveThreshold() - 0x3a8795c2\n {\n type: 'error',\n name: 'EffectiveLiquidityAboveThreshold',\n inputs: [],\n },\n\n // ExceedsMaximumRedemption() - 0x20adf2ea\n {\n type: 'error',\n name: 'ExceedsMaximumRedemption',\n inputs: [],\n },\n\n // InputListFail() - 0x99e877ce\n {\n type: 'error',\n name: 'InputListFail',\n inputs: [],\n },\n\n // InsufficientCreditLiquidity() - 0x7a70c281\n {\n type: 'error',\n name: 'InsufficientCreditLiquidity',\n inputs: [],\n },\n\n // InvalidBuilderCode() - 0x15b3fb46\n {\n type: 'error',\n name: 'InvalidBuilderCode',\n inputs: [],\n },\n\n // InvalidTick() - 0xce8ef7fc\n {\n type: 'error',\n name: 'InvalidTick',\n inputs: [],\n },\n\n // InvalidTickBound() - 0x1577d966\n {\n type: 'error',\n name: 'InvalidTickBound',\n inputs: [],\n },\n\n // InvalidTokenIdParameter(uint256 parameterType) - 0x93db0263\n {\n type: 'error',\n name: 'InvalidTokenIdParameter',\n inputs: [{ name: 'parameterType', type: 'uint256' }],\n },\n\n // InvalidUniswapCallback() - 0x3a94c705\n {\n type: 'error',\n name: 'InvalidUniswapCallback',\n inputs: [],\n },\n\n // LengthMismatch() - 0xff633a38\n {\n type: 'error',\n name: 'LengthMismatch',\n inputs: [],\n },\n\n // LiquidityTooHigh() - 0xa500e7ea\n {\n type: 'error',\n name: 'LiquidityTooHigh',\n inputs: [],\n },\n\n // NetLiquidityZero() - 0x73582ea0\n {\n type: 'error',\n name: 'NetLiquidityZero',\n inputs: [],\n },\n\n // NoLegsExercisable() - 0x7721f7da\n {\n type: 'error',\n name: 'NoLegsExercisable',\n inputs: [],\n },\n\n // NotALongLeg() - 0xb7d44f76\n {\n type: 'error',\n name: 'NotALongLeg',\n inputs: [],\n },\n\n // NotBuilder() - 0x0404714e\n {\n type: 'error',\n name: 'NotBuilder',\n inputs: [],\n },\n\n // NotEnoughLiquidityInChunk() - 0xc56d518e\n {\n type: 'error',\n name: 'NotEnoughLiquidityInChunk',\n inputs: [],\n },\n\n // NotEnoughTokens(address tokenAddress, uint256 assetsRequested, uint256 assetBalance) - 0x71c3730b\n {\n type: 'error',\n name: 'NotEnoughTokens',\n inputs: [\n { name: 'tokenAddress', type: 'address' },\n { name: 'assetsRequested', type: 'uint256' },\n { name: 'assetBalance', type: 'uint256' },\n ],\n },\n\n // NotGuardian() - 0xef6d0f02\n {\n type: 'error',\n name: 'NotGuardian',\n inputs: [],\n },\n\n // NotMarginCalled() - 0x2a23f1ad\n {\n type: 'error',\n name: 'NotMarginCalled',\n inputs: [],\n },\n\n // NotPanopticPool() - 0x2dd1912a\n {\n type: 'error',\n name: 'NotPanopticPool',\n inputs: [],\n },\n\n // PoolNotInitialized() - 0x486aa307\n {\n type: 'error',\n name: 'PoolNotInitialized',\n inputs: [],\n },\n\n // PositionCountNotZero() - 0x2501f81e\n {\n type: 'error',\n name: 'PositionCountNotZero',\n inputs: [],\n },\n\n // PositionNotOwned() - 0x00bd51c8\n {\n type: 'error',\n name: 'PositionNotOwned',\n inputs: [],\n },\n\n // PositionTooLarge() - 0x543a6e10\n {\n type: 'error',\n name: 'PositionTooLarge',\n inputs: [],\n },\n\n // PriceBoundFail(int24 currentTick) - 0x618ea40c\n {\n type: 'error',\n name: 'PriceBoundFail',\n inputs: [{ name: 'currentTick', type: 'int24' }],\n },\n\n // PriceImpactTooLarge() - 0xcbe5b9a6\n {\n type: 'error',\n name: 'PriceImpactTooLarge',\n inputs: [],\n },\n\n // Reentrancy() - 0xab143c06\n {\n type: 'error',\n name: 'Reentrancy',\n inputs: [],\n },\n\n // StaleOracle() - 0x88cce429\n {\n type: 'error',\n name: 'StaleOracle',\n inputs: [],\n },\n\n // TokenIdHasZeroLegs() - 0x9cd92fb2\n {\n type: 'error',\n name: 'TokenIdHasZeroLegs',\n inputs: [],\n },\n\n // TooManyLegsOpen() - 0x0ed7e777\n {\n type: 'error',\n name: 'TooManyLegsOpen',\n inputs: [],\n },\n\n // TransferFailed(address token, address from, uint256 amount, uint256 balance) - 0x81f20f86\n {\n type: 'error',\n name: 'TransferFailed',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'from', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'balance', type: 'uint256' },\n ],\n },\n\n // UnauthorizedUniswapCallback() - 0x3e30718a\n {\n type: 'error',\n name: 'UnauthorizedUniswapCallback',\n inputs: [],\n },\n\n // UnderOverFlow() - 0xd2190174\n {\n type: 'error',\n name: 'UnderOverFlow',\n inputs: [],\n },\n\n // WrongPoolId() - 0xcfa4bfa2\n {\n type: 'error',\n name: 'WrongPoolId',\n inputs: [],\n },\n\n // WrongUniswapPool() - 0x768778de\n {\n type: 'error',\n name: 'WrongUniswapPool',\n inputs: [],\n },\n\n // ZeroAddress() - 0xd92e233d\n {\n type: 'error',\n name: 'ZeroAddress',\n inputs: [],\n },\n\n // ZeroCollateralRequirement() - 0x5b8edb4a\n {\n type: 'error',\n name: 'ZeroCollateralRequirement',\n inputs: [],\n },\n] as const\n","/**\n * Error parsing utilities for the Panoptic v2 SDK.\n *\n * Converts raw contract errors into typed SDK error classes.\n *\n * @module v2/errors/parser\n */\n\nimport { type Abi, BaseError, decodeErrorResult, toFunctionSelector } from 'viem'\n\nimport { collateralTrackerV2Abi, panopticPoolV2Abi, riskEngineAbi } from '../../../generated'\nimport { PanopticError } from './base'\nimport {\n // Solvency & Margin\n AccountInsolventError,\n AlreadyInitializedError,\n BelowMinimumRedemptionError,\n CastingError,\n // Liquidity\n ChunkHasZeroLiquidityError,\n CreateFailError,\n DepositTooLargeError,\n DuplicateTokenIdError,\n EffectiveLiquidityAboveThresholdError,\n ExceedsMaximumRedemptionError,\n InputListFailError,\n InsufficientCreditLiquidityError,\n InvalidBuilderCodeError,\n InvalidTickBoundError,\n // Tick & Price\n InvalidTickError,\n // Position & TokenId\n InvalidTokenIdParameterError,\n InvalidUniswapCallbackError,\n LengthMismatchError,\n LiquidityTooHighError,\n NetLiquidityZeroError,\n // Exercise\n NoLegsExercisableError,\n NotALongLegError,\n NotBuilderError,\n NotEnoughLiquidityInChunkError,\n // Token & Collateral\n NotEnoughTokensError,\n NotGuardianError,\n NotMarginCalledError,\n // Authorization\n NotPanopticPoolError,\n // Pool & Initialization\n PoolNotInitializedError,\n PositionCountNotZeroError,\n PositionNotOwnedError,\n PositionTooLargeError,\n PriceBoundFailError,\n PriceImpactTooLargeError,\n // Reentrancy\n ReentrancyError,\n // Oracle & Safe Mode\n StaleOracleError,\n TokenIdHasZeroLegsError,\n TooManyLegsOpenError,\n // Transfer & Casting\n TransferFailedError,\n UnauthorizedUniswapCallbackError,\n UnderOverFlowError,\n WrongPoolIdError,\n WrongUniswapPoolError,\n // Other\n ZeroAddressError,\n ZeroCollateralRequirementError,\n} from './contract'\nimport { panopticErrorsAbi } from './errorsAbi'\n\n/**\n * Result of parsing a Panoptic error.\n */\nexport interface ParsedError {\n /** The parsed error instance */\n error: PanopticError\n /** The original error name from the contract */\n errorName: string\n /** The decoded error arguments */\n args: readonly unknown[]\n}\n\n/**\n * Combined ABI for error decoding.\n * Includes the dedicated errors ABI for complete coverage.\n */\nconst combinedAbi = [\n ...panopticPoolV2Abi,\n ...collateralTrackerV2Abi,\n ...riskEngineAbi,\n ...panopticErrorsAbi,\n] as Abi\n\n/**\n * Map of error names to error constructors.\n */\nconst errorConstructors: Record<\n string,\n (args: readonly unknown[], cause?: Error) => PanopticError\n> = {\n // Solvency & Margin\n AccountInsolvent: (args, cause) =>\n new AccountInsolventError(args[0] as bigint, args[1] as bigint, cause),\n NotMarginCalled: (_args, cause) => new NotMarginCalledError(cause),\n\n // Factory\n CreateFail: (_args, cause) => new CreateFailError(cause),\n\n // Token & Collateral\n NotEnoughTokens: (args, cause) =>\n new NotEnoughTokensError(args[0] as `0x${string}`, args[1] as bigint, args[2] as bigint, cause),\n NotEnoughLiquidityInChunk: (_args, cause) => new NotEnoughLiquidityInChunkError(cause),\n InsufficientCreditLiquidity: (_args, cause) => new InsufficientCreditLiquidityError(cause),\n DepositTooLarge: (_args, cause) => new DepositTooLargeError(cause),\n BelowMinimumRedemption: (_args, cause) => new BelowMinimumRedemptionError(cause),\n ExceedsMaximumRedemption: (_args, cause) => new ExceedsMaximumRedemptionError(cause),\n ZeroCollateralRequirement: (_args, cause) => new ZeroCollateralRequirementError(cause),\n\n // Position & TokenId\n InvalidTokenIdParameter: (args, cause) =>\n new InvalidTokenIdParameterError(args[0] as bigint, cause),\n PositionNotOwned: (_args, cause) => new PositionNotOwnedError(cause),\n PositionTooLarge: (_args, cause) => new PositionTooLargeError(cause),\n PositionCountNotZero: (_args, cause) => new PositionCountNotZeroError(cause),\n DuplicateTokenId: (_args, cause) => new DuplicateTokenIdError(cause),\n TokenIdHasZeroLegs: (_args, cause) => new TokenIdHasZeroLegsError(cause),\n TooManyLegsOpen: (_args, cause) => new TooManyLegsOpenError(cause),\n InputListFail: (_args, cause) => new InputListFailError(cause),\n\n // Tick & Price\n InvalidTick: (_args, cause) => new InvalidTickError(cause),\n InvalidTickBound: (_args, cause) => new InvalidTickBoundError(cause),\n PriceBoundFail: (args, cause) => new PriceBoundFailError(args[0] as bigint, cause),\n PriceImpactTooLarge: (_args, cause) => new PriceImpactTooLargeError(cause),\n\n // Liquidity\n ChunkHasZeroLiquidity: (_args, cause) => new ChunkHasZeroLiquidityError(cause),\n LiquidityTooHigh: (_args, cause) => new LiquidityTooHighError(cause),\n NetLiquidityZero: (_args, cause) => new NetLiquidityZeroError(cause),\n EffectiveLiquidityAboveThreshold: (_args, cause) =>\n new EffectiveLiquidityAboveThresholdError(cause),\n\n // Oracle & Safe Mode\n StaleOracle: (_args, cause) => new StaleOracleError(cause),\n\n // Exercise\n NoLegsExercisable: (_args, cause) => new NoLegsExercisableError(cause),\n NotALongLeg: (_args, cause) => new NotALongLegError(cause),\n\n // Pool & Initialization\n PoolNotInitialized: (_args, cause) => new PoolNotInitializedError(cause),\n AlreadyInitialized: (_args, cause) => new AlreadyInitializedError(cause),\n WrongPoolId: (_args, cause) => new WrongPoolIdError(cause),\n WrongUniswapPool: (_args, cause) => new WrongUniswapPoolError(cause),\n\n // Authorization\n NotPanopticPool: (_args, cause) => new NotPanopticPoolError(cause),\n NotGuardian: (_args, cause) => new NotGuardianError(cause),\n NotBuilder: (_args, cause) => new NotBuilderError(cause),\n InvalidBuilderCode: (_args, cause) => new InvalidBuilderCodeError(cause),\n InvalidUniswapCallback: (_args, cause) => new InvalidUniswapCallbackError(cause),\n UnauthorizedUniswapCallback: (_args, cause) => new UnauthorizedUniswapCallbackError(cause),\n\n // Transfer & Casting\n TransferFailed: (args, cause) =>\n new TransferFailedError(\n args[0] as `0x${string}`,\n args[1] as `0x${string}`,\n args[2] as bigint,\n args[3] as bigint,\n cause,\n ),\n CastingError: (_args, cause) => new CastingError(cause),\n UnderOverFlow: (_args, cause) => new UnderOverFlowError(cause),\n\n // Reentrancy\n Reentrancy: (_args, cause) => new ReentrancyError(cause),\n\n // Other\n ZeroAddress: (_args, cause) => new ZeroAddressError(cause),\n LengthMismatch: (_args, cause) => new LengthMismatchError(cause),\n}\n\n/**\n * Parse a raw contract error into a typed SDK error.\n *\n * This function attempts to decode the error data from a failed contract call\n * and return a typed error instance with extracted parameters.\n *\n * @param error - The raw error from a failed contract call\n * @returns Parsed error with typed error instance, or null if parsing fails\n *\n * @example\n * ```typescript\n * try {\n * await contract.openPosition(...)\n * } catch (rawError) {\n * const parsed = parsePanopticError(rawError)\n * if (parsed) {\n * console.log('Error:', parsed.errorName)\n * if (parsed.error instanceof AccountInsolventError) {\n * console.log('Solvent value:', parsed.error.solvent)\n * }\n * }\n * }\n * ```\n */\nexport function parsePanopticError(error: unknown): ParsedError | null {\n // Strategy 1: Check if viem already decoded the error (ContractFunctionRevertedError.data)\n const viemDecoded = extractViemDecodedError(error)\n if (viemDecoded) {\n return buildParsedError(viemDecoded.errorName, viemDecoded.args, error)\n }\n\n // Strategy 2: Extract raw hex data and decode ourselves\n const errorData = extractErrorData(error)\n if (!errorData) return null\n\n try {\n const decoded = decodeErrorResult({\n abi: combinedAbi,\n data: errorData,\n })\n\n return buildParsedError(decoded.errorName, decoded.args ?? [], error)\n } catch {\n // decodeErrorResult failed — possibly we only have the 4-byte selector\n // (e.g. from a multicall error message). Try matching the selector manually.\n if (errorData.length >= 10) {\n const selector = errorData.slice(0, 10) as `0x${string}`\n const match = matchSelectorToErrorName(selector)\n if (match) {\n return buildParsedError(match, [], error)\n }\n }\n return null\n }\n}\n\n/**\n * Walk the cause chain looking for a viem ContractFunctionRevertedError\n * that already has decoded `.data` (an object with `errorName` and `args`).\n * This happens when the ABI passed to simulateContract includes the error definitions.\n */\nfunction extractViemDecodedError(\n error: unknown,\n): { errorName: string; args: readonly unknown[] } | null {\n if (!error || typeof error !== 'object') return null\n\n // Use BaseError.walk if available\n if (error instanceof BaseError) {\n let found: { errorName: string; args: readonly unknown[] } | null = null\n error.walk((e) => {\n if (found) return false\n const node = e as Record<string, unknown>\n if (\n node.data &&\n typeof node.data === 'object' &&\n 'errorName' in (node.data as object) &&\n typeof (node.data as Record<string, unknown>).errorName === 'string'\n ) {\n const data = node.data as { errorName: string; args?: readonly unknown[] }\n found = { errorName: data.errorName, args: data.args ?? [] }\n return true\n }\n return false\n })\n return found\n }\n\n // Manual walk for non-viem errors\n let current: Record<string, unknown> | null = error as Record<string, unknown>\n for (let i = 0; i < 10 && current; i++) {\n if (\n current.data &&\n typeof current.data === 'object' &&\n 'errorName' in (current.data as object) &&\n typeof (current.data as Record<string, unknown>).errorName === 'string'\n ) {\n const data = current.data as { errorName: string; args?: readonly unknown[] }\n return { errorName: data.errorName, args: data.args ?? [] }\n }\n current =\n current.cause && typeof current.cause === 'object'\n ? (current.cause as Record<string, unknown>)\n : null\n }\n\n return null\n}\n\n/**\n * Build a ParsedError from a decoded error name and args.\n */\nfunction buildParsedError(\n errorName: string,\n args: readonly unknown[],\n originalError: unknown,\n): ParsedError {\n const constructor = errorConstructors[errorName]\n const cause = originalError instanceof Error ? originalError : undefined\n\n if (!constructor) {\n const unknownError = new PanopticError(`Unknown contract error: ${errorName}`)\n unknownError.errorName = errorName\n return { error: unknownError, errorName, args }\n }\n\n const typedError = constructor(args, cause)\n typedError.errorName = errorName\n return { error: typedError, errorName, args }\n}\n\n/**\n * Match a 4-byte selector against the panoptic errors ABI.\n * Used as fallback when we only have the selector (no encoded args).\n */\nfunction matchSelectorToErrorName(selector: `0x${string}`): string | null {\n for (const item of panopticErrorsAbi) {\n if (item.type !== 'error') continue\n const computed = toFunctionSelector(\n `${item.name}(${item.inputs.map((i: { type: string }) => i.type).join(',')})`,\n )\n if (computed === selector) {\n return item.name\n }\n }\n return null\n}\n\n/**\n * Extract error data from various error formats.\n *\n * Strategy:\n * 1. Use viem's BaseError.walk() to traverse the full cause chain and find\n * hex data on any node (handles arbitrary nesting depth for multicall etc.)\n * 2. Fall back to manual cause-chain walk for non-viem errors\n * 3. Last resort: extract selector from error message (loses args)\n */\nfunction extractErrorData(error: unknown): `0x${string}` | null {\n if (!error) return null\n\n // Direct hex data\n if (typeof error === 'string' && error.startsWith('0x')) {\n return error as `0x${string}`\n }\n\n if (typeof error !== 'object') return null\n\n // Strategy 1: Use viem's BaseError.walk() — traverses the full cause chain\n if (error instanceof BaseError) {\n let foundData: `0x${string}` | null = null\n\n error.walk((e) => {\n if (foundData) return false\n const node = e as Record<string, unknown>\n\n // Check .data as hex string (full revert bytes on RPC errors)\n if (node.data && typeof node.data === 'string' && node.data.startsWith('0x')) {\n foundData = node.data as `0x${string}`\n return true\n }\n\n // Check .data.data (some RPC providers nest: { data: { data: '0x...' } })\n if (node.data && typeof node.data === 'object') {\n const nested = node.data as Record<string, unknown>\n if (nested.data && typeof nested.data === 'string' && nested.data.startsWith('0x')) {\n foundData = nested.data as `0x${string}`\n return true\n }\n }\n\n return false\n })\n\n if (foundData) return foundData\n\n // Also check .signature on walked nodes (viem stores raw selector here\n // when it can't decode against the provided ABI)\n error.walk((e) => {\n if (foundData) return false\n const node = e as Record<string, unknown>\n if (node.signature && typeof node.signature === 'string' && node.signature.startsWith('0x')) {\n foundData = node.signature as `0x${string}`\n return true\n }\n return false\n })\n\n if (foundData) return foundData\n }\n\n // Strategy 2: Manual cause-chain walk for non-viem errors\n let current: Record<string, unknown> | null = error as Record<string, unknown>\n const maxDepth = 10\n for (let i = 0; i < maxDepth && current; i++) {\n if (current.data && typeof current.data === 'string' && current.data.startsWith('0x')) {\n return current.data as `0x${string}`\n }\n\n if (current.data && typeof current.data === 'object') {\n const nested = current.data as Record<string, unknown>\n if (nested.data && typeof nested.data === 'string' && nested.data.startsWith('0x')) {\n return nested.data as `0x${string}`\n }\n }\n\n if (current.error && typeof current.error === 'object') {\n const rpcError = current.error as Record<string, unknown>\n if (rpcError.data && typeof rpcError.data === 'string' && rpcError.data.startsWith('0x')) {\n return rpcError.data as `0x${string}`\n }\n }\n\n current =\n current.cause && typeof current.cause === 'object'\n ? (current.cause as Record<string, unknown>)\n : null\n }\n\n // Strategy 3: Extract from error message (last resort — may only have 4-byte selector)\n const obj = error as Record<string, unknown>\n if (obj.message && typeof obj.message === 'string') {\n const signatureMatch = obj.message.match(/signature:\\s*(0x[a-fA-F0-9]{8,})/i)\n if (signatureMatch) {\n return signatureMatch[1] as `0x${string}`\n }\n }\n\n return null\n}\n\n/**\n * Check if an error is a specific Panoptic error type.\n *\n * @param error - The error to check\n * @param errorClass - The error class to check against\n * @returns True if the error is an instance of the specified class\n *\n * @example\n * ```typescript\n * const parsed = parsePanopticError(error)\n * if (parsed && isPanopticErrorType(parsed.error, AccountInsolventError)) {\n * console.log('Account is insolvent!')\n * }\n * ```\n */\nexport function isPanopticErrorType<T extends PanopticError>(\n error: PanopticError,\n errorClass: new (...args: unknown[]) => T,\n): error is T {\n return error instanceof errorClass\n}\n","/**\n * Minimal Uniswap V4 StateView ABI for fee growth reads.\n * Only includes functions needed by streamia history.\n */\nexport const stateViewAbi = [\n {\n inputs: [{ internalType: 'PoolId', name: 'poolId', type: 'bytes32' }],\n name: 'getSlot0',\n outputs: [\n { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n { internalType: 'uint24', name: 'protocolFee', type: 'uint24' },\n { internalType: 'uint24', name: 'lpFee', type: 'uint24' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'PoolId', name: 'poolId', type: 'bytes32' }],\n name: 'getFeeGrowthGlobals',\n outputs: [\n { internalType: 'uint256', name: 'feeGrowthGlobal0', type: 'uint256' },\n { internalType: 'uint256', name: 'feeGrowthGlobal1', type: 'uint256' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'PoolId', name: 'poolId', type: 'bytes32' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n ],\n name: 'getTickInfo',\n outputs: [\n { internalType: 'uint128', name: 'liquidityGross', type: 'uint128' },\n { internalType: 'int128', name: 'liquidityNet', type: 'int128' },\n { internalType: 'uint256', name: 'feeGrowthOutside0X128', type: 'uint256' },\n { internalType: 'uint256', name: 'feeGrowthOutside1X128', type: 'uint256' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'PoolId', name: 'poolId', type: 'bytes32' }],\n name: 'getLiquidity',\n outputs: [{ internalType: 'uint128', name: 'liquidity', type: 'uint128' }],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n","/**\n * Minimal Uniswap V3 Pool ABI for fee growth reads.\n * Only includes functions needed by streamia history.\n */\nexport const uniswapV3PoolAbi = [\n {\n inputs: [],\n name: 'slot0',\n outputs: [\n { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n { internalType: 'int24', name: 'tick', type: 'int24' },\n { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },\n { internalType: 'bool', name: 'unlocked', type: 'bool' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'feeGrowthGlobal0X128',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'feeGrowthGlobal1X128',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'int24', name: '', type: 'int24' }],\n name: 'ticks',\n outputs: [\n { internalType: 'uint128', name: 'liquidityGross', type: 'uint128' },\n { internalType: 'int128', name: 'liquidityNet', type: 'int128' },\n { internalType: 'uint256', name: 'feeGrowthOutside0X128', type: 'uint256' },\n { internalType: 'uint256', name: 'feeGrowthOutside1X128', type: 'uint256' },\n { internalType: 'int56', name: 'tickCumulativeOutside', type: 'int56' },\n { internalType: 'uint160', name: 'secondsPerLiquidityOutsideX128', type: 'uint160' },\n { internalType: 'uint32', name: 'secondsOutside', type: 'uint32' },\n { internalType: 'bool', name: 'initialized', type: 'bool' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'liquidity',\n outputs: [{ internalType: 'uint128', name: '', type: 'uint128' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'fee',\n outputs: [{ internalType: 'uint24', name: '', type: 'uint24' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'token0',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'token1',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tickSpacing',\n outputs: [{ internalType: 'int24', name: '', type: 'int24' }],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n","/**\n * Pool read functions for the Panoptic v2 SDK.\n *\n * ## Same-Block Guarantee\n *\n * All dynamic data is fetched in a SINGLE multicall to ensure block consistency.\n * Per PLAN.md §6, immutable \"static prefetch\" data (addresses, decimals, symbols)\n * can be fetched separately and cached - it's not subject to same-block consistency.\n *\n * Functions accept an optional `poolMetadata` parameter containing pre-fetched\n * immutable addresses. If not provided, it will be fetched first (static prefetch).\n * Then ONE multicall fetches all dynamic data at the target block.\n *\n * @module v2/reads/pool\n */\n\nimport type { Address, PublicClient } from 'viem'\nimport { decodeAbiParameters, keccak256, zeroAddress } from 'viem'\n\nimport { collateralTrackerV2Abi, panopticPoolV2Abi, riskEngineAbi } from '../../../generated'\nimport { stateViewAbi } from '../abis/stateView'\nimport { uniswapV3PoolAbi } from '../abis/uniswapV3Pool'\nimport { getBlockMeta } from '../clients/blockMeta'\nimport { tickToSqrtPriceX96 } from '../formatters/tick'\nimport type {\n BlockMeta,\n CollateralTracker,\n OracleState,\n Pool,\n PoolKey,\n RiskEngine,\n RiskParameters,\n Utilization,\n} from '../types'\n\n// ERC20 minimal ABI for token metadata\nconst erc20Abi = [\n {\n type: 'function',\n name: 'symbol',\n inputs: [],\n outputs: [{ type: 'string' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'decimals',\n inputs: [],\n outputs: [{ type: 'uint8' }],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'name',\n inputs: [],\n outputs: [{ type: 'string' }],\n stateMutability: 'view',\n },\n] as const\n\n/**\n * Immutable pool metadata that can be cached.\n * These values never change for a given pool, so they're exempt from\n * same-block consistency requirements (per PLAN.md \"Static Prefetches\" exception).\n */\nexport interface PoolMetadata {\n /** Pool key bytes */\n poolKeyBytes: `0x${string}`\n /** Pool ID */\n poolId: bigint\n /** Collateral tracker 0 address */\n collateralToken0Address: Address\n /** Collateral tracker 1 address */\n collateralToken1Address: Address\n /** Risk engine address */\n riskEngineAddress: Address\n /** Token 0 underlying asset address */\n token0Asset: Address\n /** Token 1 underlying asset address */\n token1Asset: Address\n /** Token 0 symbol */\n token0Symbol: string\n /** Token 1 symbol */\n token1Symbol: string\n /** Token 0 decimals */\n token0Decimals: bigint\n /** Token 1 decimals */\n token1Decimals: bigint\n /** Token 0 name */\n token0Name: string\n /** Token 1 name */\n token1Name: string\n /** Underlying pool ID (V3: pool address, V4: keccak256(poolKeyBytes)) */\n underlyingPoolId: string\n /** Whether this is a V4 pool (poolManager is non-zero) */\n isV4: boolean\n /** Tick spacing */\n tickSpacing: bigint\n /** Fee tier (V4: from poolKey, V3: from Uniswap pool fee()) */\n fee: bigint\n /** SemiFungiblePositionManager address */\n sfpmAddress: Address\n}\n\n/**\n * Parameters for getPoolMetadata.\n */\nexport interface GetPoolMetadataParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n}\n\n/**\n * Fetch immutable pool metadata (addresses, symbols, decimals).\n * This data never changes for a given pool and can be cached indefinitely.\n *\n * This is the \"static prefetch\" per PLAN.md §6 - exempt from same-block consistency.\n *\n * @param params - The parameters\n * @returns Immutable pool metadata\n */\nexport async function getPoolMetadata(params: GetPoolMetadataParams): Promise<PoolMetadata> {\n const { client, poolAddress } = params\n\n // First call: get basic immutable pool data\n const basicResults = await client.multicall({\n contracts: [\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'poolKey',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'poolId',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'collateralToken0',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'collateralToken1',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'riskEngine',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'poolManager',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'SFPM',\n },\n ],\n allowFailure: false,\n })\n\n const [\n poolKeyBytes,\n poolId,\n collateralToken0Address,\n collateralToken1Address,\n riskEngineAddress,\n poolManager,\n sfpmAddress,\n ] = basicResults\n\n // Second call: get underlying asset addresses from collateral trackers\n const assetResults = await client.multicall({\n contracts: [\n {\n address: collateralToken0Address,\n abi: collateralTrackerV2Abi,\n functionName: 'asset',\n },\n {\n address: collateralToken1Address,\n abi: collateralTrackerV2Abi,\n functionName: 'asset',\n },\n ],\n allowFailure: false,\n })\n\n const [token0Asset, token1Asset] = assetResults\n\n // Native ETH (address zero) has no ERC20 contract — use hardcoded metadata\n const NATIVE_ETH_ADDRESS = '0x0000000000000000000000000000000000000000'\n const isToken0Native = token0Asset.toLowerCase() === NATIVE_ETH_ADDRESS\n const isToken1Native = token1Asset.toLowerCase() === NATIVE_ETH_ADDRESS\n\n // Third call: get token metadata (symbols, decimals, names) — skip native ETH tokens\n const erc20Contracts = [\n ...(isToken0Native\n ? []\n : [\n { address: token0Asset, abi: erc20Abi, functionName: 'symbol' as const },\n { address: token0Asset, abi: erc20Abi, functionName: 'decimals' as const },\n { address: token0Asset, abi: erc20Abi, functionName: 'name' as const },\n ]),\n ...(isToken1Native\n ? []\n : [\n { address: token1Asset, abi: erc20Abi, functionName: 'symbol' as const },\n { address: token1Asset, abi: erc20Abi, functionName: 'decimals' as const },\n { address: token1Asset, abi: erc20Abi, functionName: 'name' as const },\n ]),\n ]\n\n const erc20Results =\n erc20Contracts.length > 0\n ? await client.multicall({ contracts: erc20Contracts, allowFailure: false })\n : []\n\n // Reconstruct metadata, inserting native ETH defaults where needed\n let resultIdx = 0\n const token0Symbol = isToken0Native ? 'ETH' : (erc20Results[resultIdx++] as string)\n const token0Decimals = isToken0Native ? 18 : (erc20Results[resultIdx++] as number)\n const token0Name = isToken0Native ? 'Ether' : (erc20Results[resultIdx++] as string)\n const token1Symbol = isToken1Native ? 'ETH' : (erc20Results[resultIdx++] as string)\n const token1Decimals = isToken1Native ? 18 : (erc20Results[resultIdx++] as number)\n const token1Name = isToken1Native ? 'Ether' : (erc20Results[resultIdx++] as string)\n\n // Derive underlyingPoolId, tickSpacing, and fee\n const isV4 = poolManager !== zeroAddress\n const parsedPoolKey = parsePoolKey(poolKeyBytes)\n let underlyingPoolId: string\n let fee: bigint\n\n if (isV4) {\n underlyingPoolId = keccak256(poolKeyBytes)\n fee = parsedPoolKey.fee\n } else {\n const v3PoolAddress = decodeAbiParameters([{ type: 'address' }], poolKeyBytes)[0]\n underlyingPoolId = v3PoolAddress\n fee = await getV3PoolFee(client, v3PoolAddress)\n }\n\n return {\n poolKeyBytes,\n poolId,\n collateralToken0Address,\n collateralToken1Address,\n isV4,\n riskEngineAddress,\n token0Asset,\n token1Asset,\n token0Symbol,\n token1Symbol,\n token0Decimals: BigInt(token0Decimals),\n token1Decimals: BigInt(token1Decimals),\n token0Name,\n token1Name,\n underlyingPoolId,\n tickSpacing: tickSpacingFromPoolId(poolId),\n fee,\n sfpmAddress,\n }\n}\n\n/**\n * Parameters for getPool.\n */\nexport interface GetPoolParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Chain ID */\n chainId: bigint\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched pool metadata (for caching/optimization) */\n poolMetadata?: PoolMetadata\n /** Optional StateView address for V4 pools (needed to read Uniswap pool liquidity) */\n stateViewAddress?: Address\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get full pool data including both collateral trackers and oracle state.\n *\n * ## Same-Block Guarantee\n * All dynamic data is fetched in ONE multicall at the target block.\n * Static metadata (addresses, symbols, decimals) is either provided via\n * poolMetadata or fetched separately (static prefetch exception).\n *\n * @param params - The parameters\n * @returns Pool data with block metadata\n */\nexport async function getPool(params: GetPoolParams): Promise<Pool> {\n const { client, poolAddress, chainId, blockNumber, poolMetadata } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n // Get static metadata (either from cache or fetch it)\n const metadata = poolMetadata ?? (await getPoolMetadata({ client, poolAddress }))\n\n // Build Uniswap pool liquidity read (V3 vs V4)\n const liquidityContract =\n metadata.isV4 && params.stateViewAddress\n ? {\n address: params.stateViewAddress,\n abi: stateViewAbi,\n functionName: 'getLiquidity' as const,\n args: [metadata.underlyingPoolId as `0x${string}`] as const,\n }\n : !metadata.isV4\n ? {\n address: metadata.underlyingPoolId as Address,\n abi: uniswapV3PoolAbi,\n functionName: 'liquidity' as const,\n }\n : null // V4 without stateViewAddress — skip\n\n // SINGLE multicall for ALL dynamic data - ensures same-block consistency\n const [dynamicResults, _meta] = await Promise.all([\n client.multicall({\n contracts: [\n // Pool dynamic state\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getCurrentTick',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'isSafeMode',\n },\n // Token 0 collateral tracker dynamic data\n {\n address: metadata.collateralToken0Address,\n abi: collateralTrackerV2Abi,\n functionName: 'getPoolData',\n },\n {\n address: metadata.collateralToken0Address,\n abi: collateralTrackerV2Abi,\n functionName: 'totalSupply',\n },\n {\n address: metadata.collateralToken0Address,\n abi: collateralTrackerV2Abi,\n functionName: 'interestRate',\n },\n // Token 1 collateral tracker dynamic data\n {\n address: metadata.collateralToken1Address,\n abi: collateralTrackerV2Abi,\n functionName: 'getPoolData',\n },\n {\n address: metadata.collateralToken1Address,\n abi: collateralTrackerV2Abi,\n functionName: 'totalSupply',\n },\n {\n address: metadata.collateralToken1Address,\n abi: collateralTrackerV2Abi,\n functionName: 'interestRate',\n },\n // Risk engine parameters (technically immutable but included for completeness)\n {\n address: metadata.riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'SELLER_COLLATERAL_RATIO',\n },\n {\n address: metadata.riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'MAINT_MARGIN_RATE',\n },\n {\n address: metadata.riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'NOTIONAL_FEE',\n },\n {\n address: metadata.riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'VEGOID',\n },\n {\n address: metadata.riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'MAX_SPREAD',\n },\n // Uniswap pool in-range liquidity (V3 or V4 via StateView)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(liquidityContract ? [liquidityContract as any] : []),\n ],\n blockNumber: targetBlockNumber,\n allowFailure: true,\n }),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n // Extract results — first 13 are core (must succeed), last is liquidity (may fail)\n const coreResults = dynamicResults.slice(0, 13)\n if (coreResults.some((r) => r.status !== 'success')) {\n const failed = coreResults.find((r) => r.status !== 'success')\n throw new Error(`Core pool read failed: ${JSON.stringify(failed)}`)\n }\n const [\n currentTick,\n safeModeRaw,\n token0PoolData,\n token0TotalSupply,\n token0InterestRate,\n token1PoolData,\n token1TotalSupply,\n token1InterestRate,\n sellerCollateralRatio,\n maintMarginRate,\n notionalFee,\n vegoid,\n maxSpread,\n ] = coreResults.map((r) => r.result) as [\n bigint, // currentTick\n number, // safeModeRaw\n readonly [bigint, bigint, bigint, bigint], // token0PoolData (getPoolData)\n bigint, // token0TotalSupply\n bigint, // token0InterestRate\n readonly [bigint, bigint, bigint, bigint], // token1PoolData (getPoolData)\n bigint, // token1TotalSupply\n bigint, // token1InterestRate\n bigint, // sellerCollateralRatio\n bigint, // maintMarginRate\n bigint, // notionalFee\n bigint, // vegoid\n bigint, // maxSpread\n ]\n const liquidityResult = dynamicResults[13]\n const uniswapPoolLiquidity =\n liquidityResult?.status === 'success' ? BigInt(liquidityResult.result as bigint) : 0n\n\n // Parse pool key and extract tickSpacing from poolId (works for both V3 and V4)\n const poolKey = parsePoolKey(metadata.poolKeyBytes)\n const tickSpacing = tickSpacingFromPoolId(metadata.poolId)\n\n // Annualize rates: interestRate() returns WAD/s, multiply by seconds/year\n const SECONDS_PER_YEAR = 31_536_000n\n const borrowRate0 = BigInt(token0InterestRate) * SECONDS_PER_YEAR\n const borrowRate1 = BigInt(token1InterestRate) * SECONDS_PER_YEAR\n const utilization0 = token0PoolData[3]\n const utilization1 = token1PoolData[3]\n // Supply rate = borrow rate * utilization (utilization is in bps, so /10000)\n const supplyRate0 = (borrowRate0 * utilization0) / 10000n\n const supplyRate1 = (borrowRate1 * utilization1) / 10000n\n const totalAssets0 = token0PoolData[0] + token0PoolData[1]\n const totalAssets1 = token1PoolData[0] + token1PoolData[1]\n\n // Build collateral trackers\n const collateralTracker0: CollateralTracker = {\n address: metadata.collateralToken0Address,\n token: metadata.token0Asset,\n symbol: metadata.token0Symbol,\n decimals: metadata.token0Decimals,\n totalAssets: totalAssets0,\n insideAMM: token0PoolData[1],\n creditedShares: token0PoolData[2],\n totalShares: token0TotalSupply,\n utilization: utilization0,\n borrowRate: borrowRate0,\n supplyRate: supplyRate0,\n }\n\n const collateralTracker1: CollateralTracker = {\n address: metadata.collateralToken1Address,\n token: metadata.token1Asset,\n symbol: metadata.token1Symbol,\n decimals: metadata.token1Decimals,\n totalAssets: totalAssets1,\n insideAMM: token1PoolData[1],\n creditedShares: token1PoolData[2],\n totalShares: token1TotalSupply,\n utilization: utilization1,\n borrowRate: borrowRate1,\n supplyRate: supplyRate1,\n }\n\n // Build risk engine\n const riskEngine: RiskEngine = {\n address: metadata.riskEngineAddress,\n collateralRequirement: sellerCollateralRatio,\n maintenanceMargin: maintMarginRate,\n commissionRate: BigInt(notionalFee),\n vegoid: BigInt(vegoid),\n maxSpread: BigInt(maxSpread),\n }\n\n // Determine health status based on safe mode\n const healthStatus = safeModeRaw === 0 ? 'active' : safeModeRaw === 1 ? 'low_liquidity' : 'paused'\n\n // sqrtPriceX96 from tick\n const sqrtPriceX96 = tickToSqrtPriceX96(BigInt(currentTick))\n\n return {\n address: poolAddress,\n chainId,\n poolId: metadata.poolId,\n poolKey,\n tickSpacing,\n collateralTracker0,\n collateralTracker1,\n riskEngine,\n currentTick: BigInt(currentTick),\n sqrtPriceX96,\n uniswapPoolLiquidity,\n healthStatus,\n metadata,\n _meta,\n }\n}\n\n/**\n * Parameters for getUtilization.\n */\nexport interface GetUtilizationParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched collateral tracker addresses (for caching/optimization) */\n collateralAddresses?: {\n collateralToken0: Address\n collateralToken1: Address\n }\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get current pool utilization for both tokens.\n *\n * ## Same-Block Guarantee\n * All dynamic data is fetched in ONE multicall at the target block.\n * Collateral tracker addresses are either provided or fetched separately (static prefetch).\n *\n * @param params - The parameters\n * @returns Utilization data with block metadata\n */\nexport async function getUtilization(params: GetUtilizationParams): Promise<Utilization> {\n const { client, poolAddress, blockNumber, collateralAddresses } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n // Get collateral tracker addresses (static prefetch if not provided)\n let collateralToken0: Address\n let collateralToken1: Address\n\n if (collateralAddresses) {\n collateralToken0 = collateralAddresses.collateralToken0\n collateralToken1 = collateralAddresses.collateralToken1\n } else {\n // Static prefetch - addresses are immutable\n const addressResults = await client.multicall({\n contracts: [\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'collateralToken0',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'collateralToken1',\n },\n ],\n allowFailure: false,\n })\n collateralToken0 = addressResults[0]\n collateralToken1 = addressResults[1]\n }\n\n // SINGLE multicall for ALL dynamic data - ensures same-block consistency\n const [poolDataResults, _meta] = await Promise.all([\n client.multicall({\n contracts: [\n {\n address: collateralToken0,\n abi: collateralTrackerV2Abi,\n functionName: 'getPoolData',\n },\n {\n address: collateralToken1,\n abi: collateralTrackerV2Abi,\n functionName: 'getPoolData',\n },\n ],\n blockNumber: targetBlockNumber,\n allowFailure: false,\n }),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n const [poolData0, poolData1] = poolDataResults\n\n return {\n utilization0: poolData0[3], // currentPoolUtilization\n utilization1: poolData1[3],\n _meta,\n }\n}\n\n/**\n * Parameters for getOracleState.\n */\nexport interface GetOracleStateParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get current oracle state from the pool.\n *\n * ## Same-Block Guarantee\n * Single contract call + block meta fetch at the same block.\n *\n * @param params - The parameters\n * @returns Oracle state with block metadata\n */\nexport async function getOracleState(params: GetOracleStateParams): Promise<OracleState> {\n const { client, poolAddress, blockNumber } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n // Single call for oracle data - already same-block consistent\n const [oracleTicks, _meta] = await Promise.all([\n client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getOracleTicks',\n blockNumber: targetBlockNumber,\n }),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n // oracleTicks returns: currentTick, spotTick, medianTick, latestTick, oraclePack\n const [currentTick, spotTick, medianTick, latestTick, oraclePack] = oracleTicks\n\n // Parse oracle pack to extract EMA values and other data\n // OraclePack structure is protocol-specific, extracting what we can\n const epoch = (oraclePack >> 208n) & ((1n << 32n) - 1n)\n const lastUpdateTimestamp = (oraclePack >> 176n) & ((1n << 32n) - 1n)\n // lockMode is the 2-bit guardian safe-mode override at bits 118-119 of the\n // OraclePack (see OraclePack.sol `lockMode()`). A non-zero value means the\n // Panoptic Guardian has explicitly locked the pool (close-only), as opposed\n // to safe mode being triggered algorithmically by price action.\n const lockMode = (oraclePack >> 118n) & 3n\n\n return {\n epoch,\n lastUpdateTimestamp,\n referenceTick: BigInt(currentTick),\n spotEMA: BigInt(spotTick),\n fastEMA: BigInt(latestTick), // Using latestTick as fast EMA approximation\n slowEMA: BigInt(medianTick), // Using medianTick as slow EMA approximation\n eonsEMA: 0n, // Not directly available from getOracleTicks\n lockMode,\n medianTick: BigInt(medianTick),\n _meta,\n }\n}\n\n/**\n * Parameters for getRiskParameters.\n */\nexport interface GetRiskParametersParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Builder code (default: 0) */\n builderCode?: bigint\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched risk engine address (for caching/optimization) */\n riskEngineAddress?: Address\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get risk parameters from the pool.\n *\n * ## Same-Block Guarantee\n * All dynamic data is fetched in ONE multicall at the target block.\n * Risk engine address is either provided or fetched separately (static prefetch).\n *\n * @param params - The parameters\n * @returns Risk parameters with block metadata\n */\nexport async function getRiskParameters(params: GetRiskParametersParams): Promise<RiskParameters> {\n const {\n client,\n poolAddress,\n builderCode = 0n,\n blockNumber,\n riskEngineAddress: providedAddress,\n } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n // Get risk engine address (static prefetch if not provided)\n const riskEngineAddress =\n providedAddress ??\n (await client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'riskEngine',\n }))\n\n // SINGLE multicall for ALL risk parameters - ensures same-block consistency\n const [riskEngineResults, _meta] = await Promise.all([\n client.multicall({\n contracts: [\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'SELLER_COLLATERAL_RATIO',\n },\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'BUYER_COLLATERAL_RATIO',\n },\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'MAINT_MARGIN_RATE',\n },\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'NOTIONAL_FEE',\n },\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'TARGET_POOL_UTIL',\n },\n {\n address: riskEngineAddress,\n abi: riskEngineAbi,\n functionName: 'SATURATED_POOL_UTIL',\n },\n {\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getRiskParameters',\n args: [builderCode],\n },\n ],\n blockNumber: targetBlockNumber,\n allowFailure: false,\n }),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n const [\n sellerCollateralRatio,\n buyerCollateralRatio,\n maintMarginRate,\n notionalFee,\n targetPoolUtil,\n saturatedPoolUtil,\n ,\n ] = riskEngineResults\n\n return {\n collateralRequirement: sellerCollateralRatio,\n maintenanceMargin: maintMarginRate,\n commissionRate: BigInt(notionalFee),\n targetUtilization: targetPoolUtil,\n saturatedUtilization: saturatedPoolUtil,\n itmSpreadMultiplier: buyerCollateralRatio, // Using buyer ratio as ITM multiplier\n _meta,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Builder code validation\n// ---------------------------------------------------------------------------\n\n/**\n * Validate whether a builder code maps to a deployed builder wallet.\n *\n * Calls `PanopticPool.getRiskParameters(builderCode)` — the contract reverts\n * with `InvalidBuilderCode` when the computed CREATE2 address has no bytecode.\n *\n * @returns `true` when valid, `false` when the contract reverts.\n */\nexport async function validateBuilderCode(params: {\n client: PublicClient\n poolAddress: Address\n builderCode: bigint\n}): Promise<boolean> {\n const { client, poolAddress, builderCode } = params\n if (builderCode === 0n) return true\n try {\n await client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getRiskParameters',\n args: [builderCode],\n })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Read the fee tier from a Uniswap V3 pool contract.\n */\nasync function getV3PoolFee(client: PublicClient, poolAddress: Address): Promise<bigint> {\n const fee = await client.readContract({\n address: poolAddress,\n abi: uniswapV3PoolAbi,\n functionName: 'fee',\n })\n return BigInt(fee)\n}\n\n/**\n * Extract tickSpacing from the encoded 64-bit poolId.\n * Layout: poolAddress (5 bytes) + vegoid (1 byte) + tickSpacing (2 bytes).\n * tickSpacing occupies bits 48–63.\n */\nfunction tickSpacingFromPoolId(poolId: bigint): bigint {\n return (poolId >> 48n) & 0xffffn\n}\n\n/**\n * Parse pool key from ABI-encoded bytes.\n *\n * V4 pools: PoolKey struct is ABI-encoded as 5 consecutive 32-byte slots\n * (currency0, currency1, fee, tickSpacing, hooks).\n *\n * V3 pools: poolKey() returns abi.encode(uniswapV3PoolAddress) — a single\n * 32-byte slot. The struct fields are not available, so currency0/currency1\n * are zeroed and tickSpacing/fee are set to 0 (callers should use\n * tickSpacingFromPoolId and getV3PoolFee respectively).\n */\nfunction parsePoolKey(poolKeyBytes: `0x${string}`): PoolKey {\n const hex = poolKeyBytes.slice(2)\n\n // V3: single ABI-encoded address (64 hex chars = 32 bytes)\n if (hex.length <= 64) {\n return {\n currency0: zeroAddress,\n currency1: zeroAddress,\n fee: 0n,\n tickSpacing: 0n,\n hooks: zeroAddress,\n }\n }\n\n if (hex.length < 320) {\n throw new Error(`Malformed V4 pool key: expected 320 hex chars (160 bytes), got ${hex.length}`)\n }\n\n // Each slot is 64 hex chars (32 bytes)\n // Addresses are in the last 40 hex chars (20 bytes) of their slot\n // Numeric values can be parsed from the full 64 hex chars of their slot\n const currency0 = `0x${hex.slice(24, 64)}` as Address // Slot 0: chars 0-64, address at 24-64\n const currency1 = `0x${hex.slice(88, 128)}` as Address // Slot 1: chars 64-128, address at 88-128\n const fee = BigInt(`0x${hex.slice(128, 192)}`) // Slot 2: chars 128-192 (full slot)\n const tickSpacing = BigInt(`0x${hex.slice(192, 256)}`) // Slot 3: chars 192-256 (full slot)\n const hooks = `0x${hex.slice(280, 320)}` as Address // Slot 4: chars 256-320, address at 280-320\n\n return {\n currency0,\n currency1,\n fee,\n tickSpacing,\n hooks,\n }\n}\n\n/**\n * Parameters for fetchPoolId.\n */\nexport interface FetchPoolIdParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n}\n\n/**\n * Result of fetchPoolId, including block metadata for same-block consistency.\n */\nexport interface FetchPoolIdResult {\n /** The encoded 64-bit pool ID */\n poolId: bigint\n /** Block metadata from the pinned read */\n _meta: BlockMeta\n}\n\n/**\n * Fetch the encoded 64-bit pool ID from a PanopticPool contract.\n *\n * Use this when you need the poolId without fetching the full pool state.\n * The returned poolId can be passed directly to `createTokenIdBuilder()`.\n * The read is pinned to the latest block at call time.\n *\n * @param params - The parameters\n * @returns The pool ID and block metadata\n */\nexport async function fetchPoolId(params: FetchPoolIdParams): Promise<FetchPoolIdResult> {\n const { client, poolAddress } = params\n\n const block = await client.getBlock({ blockTag: 'latest' })\n\n const poolId = await client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'poolId',\n blockNumber: block.number,\n })\n\n return {\n poolId,\n _meta: {\n blockNumber: block.number,\n blockTimestamp: block.timestamp,\n blockHash: block.hash,\n },\n }\n}\n\nexport { tickToSqrtPriceX96 }\n","/**\n * Client-side greeks for the Panoptic v2 SDK.\n *\n * All functions accept bigint inputs (ticks, sizes) and return bigint values\n * in the natural token units — no artificial WAD scaling. The tick-based price\n * (1.0001^tick) naturally encodes the decimal conversion between tokens.\n *\n * Uses pure sqrtPriceX96 arithmetic for exact on-chain fidelity with PanopticQuery.\n * All intermediate calculations keep X96/X192 precision until final scaling.\n *\n * - Value: in numeraire token smallest units (e.g., USDC wei if numeraire is USDC)\n * - Delta: in asset token smallest units (e.g., WETH wei if asset is WETH)\n * - Gamma (dollar-gamma): in numeraire token smallest units\n *\n * @module v2/greeks\n */\n\nimport { tickToSqrtPriceX96 } from '../formatters/tick'\nimport type { TokenIdLeg } from '../types'\n\n// --- Internal Helpers ---\n\n/** Fixed-point scale constants for sqrtPriceX96 arithmetic */\nconst Q96 = 1n << 96n\nconst Q192 = 1n << 192n\n\n/**\n * Convert tick to quote-denominated tick based on asset direction.\n *\n * When isAssetToken0 = true (asset is token0, numeraire is token1):\n * - Tick already encodes price as token1/token0 (numeraire per asset)\n * - Return tick unchanged\n *\n * When isAssetToken0 = false (asset is token1, numeraire is token0):\n * - Tick encodes price as token1/token0, but we need token0/token1 (numeraire per asset)\n * - Invert by negating: 1/price = 1.0001^(-tick)\n */\nfunction quoteTick(tick: bigint, isAssetToken0: boolean): bigint {\n return isAssetToken0 ? tick : -tick\n}\n\n/**\n * Divide with truncation toward zero (matches Solidity division behavior).\n *\n * JavaScript bigint division uses floor (toward negative infinity), but Solidity\n * truncates toward zero. For on-chain fidelity, we must match Solidity.\n *\n * Example:\n * - Solidity: -7 / 2 = -3 (truncate toward zero)\n * - JS bigint: -7n / 2n = -4n (floor toward -∞)\n * - This function: divTrunc(-7n, 2n) = -3n ✓\n */\nfunction divTrunc(numerator: bigint, denominator: bigint): bigint {\n if (denominator === 0n) return 0n\n\n const quotient = numerator / denominator\n const remainder = numerator % denominator\n\n // If signs differ and there's a remainder, JS floored when we need to truncate\n // Add 1 to move toward zero\n if (numerator < 0n !== denominator < 0n && remainder !== 0n) {\n return quotient + 1n\n }\n\n return quotient\n}\n\n/** Resolve isAssetToken0: optional assetIndex overrides leg.asset */\nfunction resolveAssetDirection(leg: Pick<TokenIdLeg, 'asset'>, assetIndex?: bigint): boolean {\n return assetIndex !== undefined ? assetIndex === 0n : leg.asset === 0n\n}\n\n/**\n * Calculate value for a width=0 (loan/credit) leg.\n * Width=0 means the range is a single tick (the strike), so there's no meaningful\n * \"in range\" — we use the below/above formulas which avoid division by (r-1)=0.\n */\nfunction getLegValueWidth0(\n leg: TokenIdLeg,\n m: bigint,\n qCurrentTick: bigint,\n qStrikeTick: bigint,\n qMintTick: bigint,\n isAssetToken0: boolean,\n _definedRisk: boolean,\n): bigint {\n // For loan/credit legs (width=0), value depends on the borrowed token.\n // m > 0 for loans (isLong=false), m < 0 for credits (isLong=true).\n const borrowsAsset = isCall(leg.tokenType, isAssetToken0)\n\n // When leg.asset !== leg.tokenType, positionSize is in leg.asset units and\n // the borrowed notional is encoded via leg.strike: notional_tokenType_raw =\n // positionSize_raw × 1.0001^strike (a raw-to-raw ratio, unquoted by pool direction).\n // When leg.asset === leg.tokenType, m is already the notional (old convention).\n const scaleByStrike = leg.asset !== leg.tokenType\n let notional = m\n if (scaleByStrike) {\n // The UI stores strike with a sign that depends on leg.asset:\n // priceTokenTypePerAsset = 1.0001^(leg.asset === 0 ? strike : -strike)\n // Mirror that here so K_raw matches the intended notional scaling.\n const signedStrike = leg.asset === 0n ? leg.strike : -leg.strike\n const sqrtKraw = tickToSqrtPriceX96(signedStrike)\n const KrawX192 = sqrtKraw * sqrtKraw\n notional = divTrunc(m * KrawX192, Q192)\n }\n\n if (borrowsAsset) {\n // Asset loan/credit: debt PnL = -notional*(P - Pm); crosses y=0 at mint price, delta=-notional.\n const sqrtP = tickToSqrtPriceX96(qCurrentTick)\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const PX192 = sqrtP * sqrtP\n const PmX192 = sqrtPm * sqrtPm\n return divTrunc(-notional * (PX192 - PmX192), Q192)\n } else {\n // Numeraire loan/credit: the obligation is a constant amount of the numeraire token,\n // so its value doesn't change with price. getLegValue is mint-relative PnL (option\n // legs cancel the mint baseline via `itm`; the asset branch above returns\n // -notional*(P - Pm), which is 0 at mint), so the numeraire branch's mint-relative PnL\n // is value(P) - value(Pm) = const - const = 0. Returning a nonzero constant here would\n // shift the whole PnL curve/baseline by the notional (double-counting the credit).\n return 0n\n }\n}\n\n// --- Public Helpers ---\n\n/**\n * Check if leg is a call option (vs put).\n *\n * A call is when the leg moves the asset token:\n * - If asset is token0: call when tokenType=0\n * - If asset is token1: call when tokenType=1\n */\nexport function isCall(tokenType: bigint, isAssetToken0: boolean): boolean {\n return isAssetToken0 ? tokenType === 0n : tokenType === 1n\n}\n\n/**\n * Check if position has defined risk (is a spread).\n *\n * A position is defined risk if it has 2+ legs of the same tokenType\n * with both long and short exposure.\n */\nexport function isDefinedRisk(legs: Pick<TokenIdLeg, 'tokenType' | 'isLong'>[]): boolean {\n if (legs.length < 2) return false\n\n for (const tt of [0n, 1n]) {\n const group = legs.filter((l) => l.tokenType === tt)\n if (group.length >= 2 && group.some((l) => l.isLong) && group.some((l) => !l.isLong)) {\n return true\n }\n }\n return false\n}\n\n// --- Per-Leg Greeks ---\n\n/**\n * Calculate the value of a single leg.\n *\n * Value represents the current P&L of the position in numeraire token units.\n * Combines base value (from Panoptic's piecewise formula), debt, and ITM adjustment.\n *\n * Uses sqrtPriceX96 for all calculations to maintain precision and on-chain fidelity.\n *\n * @param leg - The leg to calculate\n * @param currentTick - Current pool tick\n * @param mintTick - Tick at position mint\n * @param positionSize - Position size in asset token smallest units\n * @param poolTickSpacing - Pool tick spacing\n * @param definedRisk - Whether position is defined risk\n * @param assetIndex - Optional override for leg.asset (0n = token0 is asset, 1n = token1)\n * @returns Leg value in numeraire token smallest units\n */\nexport function getLegValue(\n leg: TokenIdLeg,\n currentTick: bigint,\n mintTick: bigint,\n positionSize: bigint,\n poolTickSpacing: bigint,\n definedRisk: boolean,\n assetIndex?: bigint,\n): bigint {\n const isAssetToken0 = resolveAssetDirection(leg, assetIndex)\n const qCurrentTick = quoteTick(currentTick, isAssetToken0)\n const qMintTick = quoteTick(mintTick, isAssetToken0)\n const qStrikeTick = quoteTick(leg.strike, isAssetToken0)\n const halfWidthTick = (leg.width * poolTickSpacing) / 2n\n\n const m = leg.isLong ? -(positionSize * leg.optionRatio) : positionSize * leg.optionRatio\n\n // Width=0 (loans/credits): single-tick position, no range to integrate over.\n if (halfWidthTick === 0n) {\n return getLegValueWidth0(\n leg,\n m,\n qCurrentTick,\n qStrikeTick,\n qMintTick,\n isAssetToken0,\n definedRisk,\n )\n }\n\n // Compute base value: v = f(P, K, r) from Panoptic's piecewise formula\n let v: bigint\n\n if (qCurrentTick < qStrikeTick - halfWidthTick) {\n // Below range: v = m * P\n const sqrtP = tickToSqrtPriceX96(qCurrentTick)\n const PX192 = sqrtP * sqrtP\n v = divTrunc(m * PX192, Q192)\n } else if (qCurrentTick > qStrikeTick + halfWidthTick) {\n // Above range: v = m * K\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const KX192 = sqrtK * sqrtK\n v = divTrunc(m * KX192, Q192)\n } else {\n // In range: v = m * (2*sqrt(P*K*r) - P - K) / (r - 1)\n const sqrtP = tickToSqrtPriceX96(qCurrentTick)\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const sqrtPKR = tickToSqrtPriceX96(qCurrentTick + qStrikeTick + halfWidthTick)\n const sqrtR = tickToSqrtPriceX96(halfWidthTick)\n\n const PX192 = sqrtP * sqrtP\n const KX192 = sqrtK * sqrtK\n const rX192 = sqrtR * sqrtR\n\n // v = m * (2*sqrtPKR/2^96 - PX192/2^192 - KX192/2^192) / ((rX192 - 2^192)/2^192)\n // = m * (2*sqrtPKR*2^96 - PX192 - KX192) / (rX192 - 2^192)\n const numerator = m * (2n * sqrtPKR * Q96 - PX192 - KX192)\n const denominator = rX192 - Q192\n v = divTrunc(numerator, denominator)\n }\n\n const debt = -m\n const isPut = !isCall(leg.tokenType, isAssetToken0)\n\n // Compute ITM adjustment (differs for puts vs calls)\n let itm: bigint\n\n if (isPut) {\n // Put ITM adjustment\n if (qMintTick < qStrikeTick - halfWidthTick) {\n // Below range: itm = (K - Pm) * m\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const KX192 = sqrtK * sqrtK\n const PmX192 = sqrtPm * sqrtPm\n itm = divTrunc(m * (KX192 - PmX192), Q192)\n } else if (qMintTick > qStrikeTick + halfWidthTick) {\n // Above range: itm = 0\n itm = 0n\n } else {\n // In range: itm = m * (sqrt(K*r) - sqrt(Pm))^2 / (r - 1)\n const sqrtKR = tickToSqrtPriceX96(qStrikeTick + halfWidthTick)\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const sqrtR = tickToSqrtPriceX96(halfWidthTick)\n const rX192 = sqrtR * sqrtR\n\n const diff = sqrtKR - sqrtPm // X96\n const diffSqX192 = diff * diff // X192\n itm = divTrunc(m * diffSqX192, rX192 - Q192)\n }\n } else {\n // Call ITM adjustment\n if (qMintTick < qStrikeTick - halfWidthTick) {\n // Below range: itm = 0\n itm = 0n\n } else if (qMintTick > qStrikeTick + halfWidthTick) {\n // Above range: itm = (1 - K/Pm) * m\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const KX192 = sqrtK * sqrtK\n const PmX192 = sqrtPm * sqrtPm\n itm = divTrunc(m * (PmX192 - KX192), PmX192)\n } else {\n // In range: itm = m * (sqrt(r) - sqrt(K/Pm))^2 / (r - 1)\n const sqrtR = tickToSqrtPriceX96(halfWidthTick)\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const rX192 = sqrtR * sqrtR\n\n // sqrt(K/Pm) in X96 = sqrtK * 2^96 / sqrtPm\n const sqrtKPmX96 = divTrunc(sqrtK * Q96, sqrtPm)\n const diff = sqrtR - sqrtKPmX96 // X96\n const diffSqX192 = diff * diff // X192\n itm = divTrunc(m * diffSqX192, rX192 - Q192)\n }\n }\n\n // Compute final result based on option type\n if (isPut) {\n // Put: result = debt * K + v + itm\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const KX192 = sqrtK * sqrtK\n const debtK = divTrunc(debt * KX192, Q192)\n return debtK + v + itm\n } else {\n // Call: result = debt*P + v + itm*Pm (if defined risk) or debt*P + v + itm*P (if not)\n const sqrtP = tickToSqrtPriceX96(qCurrentTick)\n const PX192 = sqrtP * sqrtP\n const debtP = divTrunc(debt * PX192, Q192)\n\n if (definedRisk) {\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const PmX192 = sqrtPm * sqrtPm\n const itmPm = divTrunc(itm * PmX192, Q192)\n return debtP + v + itmPm\n } else {\n const itmP = divTrunc(itm * PX192, Q192)\n return debtP + v + itmP\n }\n }\n}\n\n/**\n * Calculate the delta of a single leg.\n *\n * Delta is the rate of change of position value with respect to price.\n * For puts: delta = vDelta\n * For calls: delta = debtDelta + vDelta + itmDelta (if not defined risk)\n *\n * Uses sqrtPriceX96 for all price calculations to maintain precision.\n *\n * @param leg - The leg to calculate\n * @param currentTick - Current pool tick\n * @param positionSize - Position size in asset token smallest units\n * @param poolTickSpacing - Pool tick spacing\n * @param mintTick - Tick at mint (optional, for ITM adjustment)\n * @param definedRisk - Whether position is defined risk\n * @param assetIndex - Optional override for leg.asset (0n = token0 is asset, 1n = token1)\n * @returns Leg delta in asset token smallest units\n */\nexport function getLegDelta(\n leg: TokenIdLeg,\n currentTick: bigint,\n positionSize: bigint,\n poolTickSpacing: bigint,\n mintTick: bigint | undefined,\n definedRisk: boolean,\n assetIndex?: bigint,\n): bigint {\n const isAssetToken0 = resolveAssetDirection(leg, assetIndex)\n const qCurrentTick = quoteTick(currentTick, isAssetToken0)\n const qStrikeTick = quoteTick(leg.strike, isAssetToken0)\n const halfWidthTick = (leg.width * poolTickSpacing) / 2n\n\n const m = leg.isLong ? -(positionSize * leg.optionRatio) : positionSize * leg.optionRatio\n\n // True loan/credit: leg.width === 0n (not just halfWidth rounding to 0).\n // Debt-side exposure only — no option-like piecewise formula.\n if (leg.width === 0n) {\n const borrowsAsset = isAssetToken0 ? leg.tokenType === 0n : leg.tokenType === 1n\n if (!borrowsAsset) return 0n\n // See getLegValueWidth0 for the notional-scaling rationale.\n if (leg.asset === leg.tokenType) return -m\n const signedStrike = leg.asset === 0n ? leg.strike : -leg.strike\n const sqrtKraw = tickToSqrtPriceX96(signedStrike)\n const KrawX192 = sqrtKraw * sqrtKraw\n const notional = divTrunc(m * KrawX192, Q192)\n return -notional\n }\n\n // Narrow option whose halfWidth rounds to 0: use option-like width=0 branch\n if (halfWidthTick === 0n) {\n const vDelta = qCurrentTick <= qStrikeTick ? m : 0n\n const isPut = !isCall(leg.tokenType, isAssetToken0)\n if (isPut) return vDelta\n\n // Call: add debt delta and ITM delta (same as normal path but no in-range branch)\n const debtDelta = -m\n let itmDelta = 0n\n if (mintTick !== undefined && !definedRisk) {\n const qMintTick = quoteTick(mintTick, isAssetToken0)\n if (qMintTick > qStrikeTick) {\n const sqrtPm = tickToSqrtPriceX96(qMintTick)\n const sqrtK = tickToSqrtPriceX96(qStrikeTick)\n const PmX192 = sqrtPm * sqrtPm\n const KX192 = sqrtK * sqrtK\n itmDelta = divTrunc((PmX192 - KX192) * m, PmX192)\n }\n }\n return definedRisk ? debtDelta + vDelta : debtDelta + vDelta + itmDelta\n }\n\n // Compute vDelta: derivative of value with respect to price\n // vDelta = P < lo ? m : P > hi ? 0 : (m * (sqrt(K*r)/sqrt(P) - 1)) / (r - 1)\n let vDelta: bigint\n\n if (qCurrentTick < qStrikeTick - halfWidthTick) {\n // Below range: vDelta = m\n vDelta = m\n } else if (qCurrentTick > qStrikeTick + halfWidthTick) {\n // Above range: vDelta = 0\n vDelta = 0n\n } else {\n // In range: vDelta = m * (sqrt(K*r) - sqrt(P)) / (sqrt(P) * (r - 1))\n const sqrtP = tickToSqrtPriceX96(qCurrentTick) // X96\n const sqrtKR = tickToSqrtPriceX96(qStrikeTick + halfWidthTick) // sqrt(K*r) in X96\n const sqrtR = tickToSqrtPriceX96(halfWidthTick) // X96\n const rX192 = sqrtR * sqrtR // X192\n\n // vDelta = m * (sqrtKR - sqrtP)/2^96 / (sqrtP/2^96 * (rX192 - 2^192)/2^192)\n // = m * (sqrtKR - sqrtP) * 2^192 / (sqrtP * (rX192 - 2^192))\n const numerator = m * (sqrtKR - sqrtP) * Q192\n const denominator = sqrtP * (rX192 - Q192)\n vDelta = divTrunc(numerator, denominator)\n }\n\n const isPut = !isCall(leg.tokenType, isAssetToken0)\n\n if (isPut) {\n return vDelta\n }\n\n // Call: add debt delta and ITM delta\n const debtDelta = -m\n\n const itmDelta =\n mintTick === undefined\n ? 0n\n : (() => {\n const qMintTick = quoteTick(mintTick, isAssetToken0)\n\n if (qMintTick < qStrikeTick - halfWidthTick) {\n // Below range: itmDelta = 0\n return 0n\n } else if (qMintTick > qStrikeTick + halfWidthTick) {\n // Above range: itmDelta = (1 - K/Pm) * m = (Pm - K) * m / Pm\n const sqrtPm = tickToSqrtPriceX96(qMintTick) // X96\n const sqrtK = tickToSqrtPriceX96(qStrikeTick) // X96\n const PmX192 = sqrtPm * sqrtPm // X192\n const KX192 = sqrtK * sqrtK // X192\n\n // itmDelta = (1 - K/Pm) * m = (PmX192 - KX192) * m / PmX192\n return divTrunc((PmX192 - KX192) * m, PmX192)\n } else {\n // In range: itmDelta = m * (sqrt(r) - sqrt(K/Pm))^2 / (r - 1)\n const sqrtR = tickToSqrtPriceX96(halfWidthTick) // X96\n const sqrtK = tickToSqrtPriceX96(qStrikeTick) // X96\n const sqrtPm = tickToSqrtPriceX96(qMintTick) // X96\n const rX192 = sqrtR * sqrtR // X192\n\n // sqrt(K/Pm) = sqrtK / sqrtPm (both X96, so scale cancels)\n // But we need (sqrt(r) - sqrt(K/Pm))^2, so work in X96:\n // sqrtKPm = sqrt(K/Pm) in X96 = sqrtK * 2^96 / sqrtPm\n const sqrtKPmX96 = (sqrtK * Q96) / sqrtPm // X96\n\n // (sqrt(r) - sqrt(K/Pm))^2 = (sqrtR - sqrtKPmX96)^2 / 2^192\n const diff = sqrtR - sqrtKPmX96 // X96\n const diffSqX192 = diff * diff // X192\n\n // itmDelta = m * diffSqX192 / 2^192 / (rX192 / 2^192 - 1)\n // = m * diffSqX192 / (rX192 - 2^192)\n return divTrunc(m * diffSqX192, rX192 - Q192)\n }\n })()\n\n return definedRisk ? debtDelta + vDelta : debtDelta + vDelta + itmDelta\n}\n\n/**\n * Calculate the gamma (dollar gamma) of a single leg.\n *\n * Formula: gamma = (m * sqrt(K * P * r)) / (2 * (r - 1))\n * where:\n * - m = positionSize * optionRatio (with sign based on long/short)\n * - K = strike price (numeraire/asset)\n * - P = current price (numeraire/asset)\n * - r = 1.0001^(width*tickSpacing/2) ≈ 1 (dimensionless ratio)\n *\n * Uses sqrtPriceX96 arithmetic:\n * - sqrt(K*P*r) = tickToSqrtPriceX96(strikeₜ + currentₜ + widthₜ/2)\n * - Keeps X96/X192 precision until final division\n *\n * @param leg - The leg to calculate\n * @param currentTick - Current pool tick\n * @param positionSize - Position size in asset token smallest units\n * @param poolTickSpacing - Pool tick spacing\n * @param assetIndex - Optional override for leg.asset (0n = token0 is asset, 1n = token1)\n * @returns Leg gamma in numeraire token smallest units\n */\nexport function getLegGamma(\n leg: TokenIdLeg,\n currentTick: bigint,\n positionSize: bigint,\n poolTickSpacing: bigint,\n assetIndex?: bigint,\n): bigint {\n const isAssetToken0 = resolveAssetDirection(leg, assetIndex)\n\n // Convert to quote-denominated ticks (negate if asset is token0)\n const qCurrentTick = quoteTick(currentTick, isAssetToken0)\n const qStrikeTick = quoteTick(leg.strike, isAssetToken0)\n const halfWidthTick = (leg.width * poolTickSpacing) / 2n\n\n // True loan: no gamma\n if (leg.width === 0n) return 0n\n\n // Narrow option whose halfWidth rounds to 0: no curvature (denominator 2*(r-1)=0)\n if (halfWidthTick === 0n) return 0n\n\n // Range check: gamma is zero outside [strike - halfWidth, strike + halfWidth]\n // This works in both normal and inverted tick space\n if (qCurrentTick < qStrikeTick - halfWidthTick || qCurrentTick > qStrikeTick + halfWidthTick) {\n return 0n\n }\n\n // Position size with sign: gamma uses inverted multiplier (long = positive, short = negative)\n const m = leg.isLong ? positionSize * leg.optionRatio : -(positionSize * leg.optionRatio)\n\n // sqrt(K * P * r) using tick addition: sqrt(K*P*r) = sqrt(1.0001^(K_tick + P_tick + r_tick))\n const sqrtKPR = tickToSqrtPriceX96(qStrikeTick + qCurrentTick + halfWidthTick) // X96 scale\n\n // r = 1.0001^(halfWidthTick), compute as (sqrtR)^2 to maintain precision\n const sqrtR = tickToSqrtPriceX96(halfWidthTick) // X96 scale\n const rX192 = sqrtR * sqrtR // X192 scale: r * 2^192\n\n // gamma = m * sqrt(K*P*r) / (2 * (r - 1))\n // = m * (sqrtKPR / 2^96) / (2 * (rX192/2^192 - 1))\n // = m * sqrtKPR * 2^192 / (2^96 * 2 * (rX192 - 2^192))\n // = m * sqrtKPR * 2^96 / (2 * (rX192 - 2^192))\n const numerator = m * sqrtKPR * Q96 // [asset] * [numeraire/asset * 2^96] * 2^96 = [numeraire * 2^192]\n const denominator = 2n * (rX192 - Q192) // 2 * (r - 1) in X192 scale\n\n return divTrunc(numerator, denominator) // [numeraire]\n}\n\n// --- Position-Level Aggregates ---\n\n/**\n * Parameters for position-level greek calculations.\n */\nexport interface PositionGreeksInput {\n /** Position legs */\n legs: TokenIdLeg[]\n /** Current pool tick */\n currentTick: bigint\n /** Tick at position mint */\n mintTick: bigint\n /** Position size in asset token smallest units */\n positionSize: bigint\n /** Pool tick spacing */\n poolTickSpacing: bigint\n /** Optional override for leg.asset on all legs (0n = token0 is asset, 1n = token1) */\n assetIndex?: bigint\n}\n\n/**\n * Calculate total value across all legs.\n */\nexport function calculatePositionValue(input: PositionGreeksInput): bigint {\n const { legs, currentTick, mintTick, positionSize, poolTickSpacing, assetIndex } = input\n const definedRisk = isDefinedRisk(legs)\n\n return legs.reduce(\n (sum, leg) =>\n sum +\n getLegValue(\n leg,\n currentTick,\n mintTick,\n positionSize,\n poolTickSpacing,\n definedRisk,\n assetIndex,\n ),\n 0n,\n )\n}\n\n/**\n * Calculate total delta across all legs.\n */\nexport function calculatePositionDelta(input: PositionGreeksInput): bigint {\n const { legs, currentTick, mintTick, positionSize, poolTickSpacing, assetIndex } = input\n const definedRisk = isDefinedRisk(legs)\n\n return legs.reduce(\n (sum, leg) =>\n sum +\n getLegDelta(\n leg,\n currentTick,\n positionSize,\n poolTickSpacing,\n mintTick,\n definedRisk,\n assetIndex,\n ),\n 0n,\n )\n}\n\n/**\n * Calculate total gamma across all legs.\n */\nexport function calculatePositionGamma(input: PositionGreeksInput): bigint {\n const { legs, currentTick, positionSize, poolTickSpacing, assetIndex } = input\n\n return legs.reduce(\n (sum, leg) => sum + getLegGamma(leg, currentTick, positionSize, poolTickSpacing, assetIndex),\n 0n,\n )\n}\n\n/**\n * Position greeks result.\n */\nexport interface PositionGreeksResult {\n /** Position value in numeraire token smallest units */\n value: bigint\n /** Position delta in asset token smallest units */\n delta: bigint\n /** Position gamma in numeraire token smallest units */\n gamma: bigint\n}\n\n/**\n * Calculate all greeks for a position.\n */\nexport function calculatePositionGreeks(input: PositionGreeksInput): PositionGreeksResult {\n return {\n value: calculatePositionValue(input),\n delta: calculatePositionDelta(input),\n gamma: calculatePositionGamma(input),\n }\n}\n\n// --- Loan/Credit Swap-Aware Delta ---\n\n/**\n * Calculate the effective delta of a loan leg accounting for swapAtMint.\n *\n * A loan borrows one token and (optionally) swaps it for the other at mint.\n * The net delta depends on whether the swap occurred:\n *\n * | Scenario | Result |\n * |-----------------------|-------------------------------------------------|\n * | No swap | 0n (hold what you owe, net zero) |\n * | Swap + borrows asset | -m (hold numeraire, owe asset → short exposure) |\n * | Swap + borrows numer. | +m (hold asset, owe numeraire → long exposure) |\n *\n * Only meaningful for legs with `width === 0n`. For options, use `getLegDelta`.\n *\n * @param leg - The loan leg\n * @param positionSize - Position size in asset token smallest units\n * @param swapAtMint - Whether the borrowed tokens were swapped at mint\n * @param assetIndex - Optional override for leg.asset (0n = token0 is asset)\n * @returns Effective delta in asset token smallest units\n */\nexport function getLoanEffectiveDelta(\n leg: TokenIdLeg,\n positionSize: bigint,\n swapAtMint: boolean,\n assetIndex?: bigint,\n): bigint {\n if (!swapAtMint) return 0n\n\n const isAssetToken0 = resolveAssetDirection(leg, assetIndex)\n const m = leg.isLong ? -(positionSize * leg.optionRatio) : positionSize * leg.optionRatio\n const borrowsAsset = isAssetToken0 ? leg.tokenType === 0n : leg.tokenType === 1n\n\n return borrowsAsset ? -m : m\n}\n\n/**\n * Calculate total delta for a position, using swap-aware delta for loan legs.\n *\n * For legs with `width === 0n` (loans/credits), uses `getLoanEffectiveDelta`\n * which accounts for the swapAtMint flag. For option legs (`width > 0n`),\n * uses the standard `getLegDelta`.\n *\n * @param input - Position greeks input plus swapAtMint flag\n * @returns Total delta in asset token smallest units\n */\nexport function calculatePositionDeltaWithSwap(\n input: PositionGreeksInput & { swapAtMint: boolean },\n): bigint {\n const { legs, currentTick, mintTick, positionSize, poolTickSpacing, assetIndex, swapAtMint } =\n input\n const optionLegs = legs.filter((l) => l.width !== 0n)\n const definedRisk = isDefinedRisk(optionLegs)\n\n return legs.reduce((sum, leg) => {\n if (leg.width === 0n) {\n return sum + getLoanEffectiveDelta(leg, positionSize, swapAtMint, assetIndex)\n }\n return (\n sum +\n getLegDelta(\n leg,\n currentTick,\n positionSize,\n poolTickSpacing,\n mintTick,\n definedRisk,\n assetIndex,\n )\n )\n }, 0n)\n}\n","/**\n * TokenId constants for the Panoptic v2 SDK.\n * @module v2/tokenId/constants\n */\n\n/**\n * Default vegoid value used in pool ID encoding.\n */\nexport const DEFAULT_VEGOID = 8n\n\n/**\n * Default MAX_SPREAD value (90_000 = 9 * 10_000).\n * On-chain: removed/net ratio cap, in units of 1/10_000.\n */\nexport const DEFAULT_MAX_SPREAD = 90_000n\n\n/**\n * Standard tick widths matching DTE gamma profiles.\n *\n * These represent the position width in ticks for each timescale.\n * Width = tickUpper - tickLower.\n */\nexport const STANDARD_TICK_WIDTHS = {\n /** 1-hour expiry profile (240 ticks) */\n '1H': 240n,\n /** 1-day expiry profile (720 ticks) */\n '1D': 720n,\n /** 1-week expiry profile (2400 ticks) */\n '1W': 2400n,\n /** 1-month expiry profile (4800 ticks) */\n '1M': 4800n,\n /** 1-year expiry profile (15000 ticks) */\n '1Y': 15000n,\n} as const\n\n/**\n * Timescale key type for STANDARD_TICK_WIDTHS.\n */\nexport type Timescale = keyof typeof STANDARD_TICK_WIDTHS\n\n/**\n * Bit positions and sizes for TokenId encoding.\n */\nexport const TOKEN_ID_BITS = {\n /** Pool ID occupies bits 0-63 */\n POOL_ID_SIZE: 64n,\n /** Vegoid starts at bit 40 within pool ID */\n VEGOID_STARTING_BIT: 40n,\n /** Vegoid is 8 bits */\n VEGOID_SIZE: 8n,\n /** Tick spacing starts at bit 48 within pool ID */\n TICK_SPACING_STARTING_BIT: 48n,\n /** Tick spacing is 16 bits */\n TICK_SPACING_SIZE: 16n,\n /** Each leg is 48 bits */\n LEG_SIZE: 48n,\n /** Maximum number of legs per TokenId */\n MAX_LEGS: 4n,\n} as const\n\n/**\n * Bit positions within a leg (relative to leg start).\n */\nexport const LEG_BITS = {\n /** Asset bit position */\n ASSET_BIT: 0n,\n /** Asset size in bits */\n ASSET_SIZE: 1n,\n /** Option ratio starting bit */\n RATIO_BIT: 1n,\n /** Option ratio size in bits */\n RATIO_SIZE: 7n,\n /** Is long starting bit */\n IS_LONG_BIT: 8n,\n /** Is long size in bits */\n IS_LONG_SIZE: 1n,\n /** Token type starting bit */\n TOKEN_TYPE_BIT: 9n,\n /** Token type size in bits */\n TOKEN_TYPE_SIZE: 1n,\n /** Risk partner starting bit */\n RISK_PARTNER_BIT: 10n,\n /** Risk partner size in bits */\n RISK_PARTNER_SIZE: 2n,\n /** Strike starting bit */\n STRIKE_BIT: 12n,\n /** Strike size in bits (24 bits, signed int24) */\n STRIKE_SIZE: 24n,\n /** Width starting bit */\n WIDTH_BIT: 36n,\n /** Width size in bits */\n WIDTH_SIZE: 12n,\n} as const\n\n/**\n * Masks for extracting/encoding leg fields.\n */\nexport const LEG_MASKS = {\n /** Mask for asset (1 bit) */\n ASSET: (1n << LEG_BITS.ASSET_SIZE) - 1n,\n /** Mask for option ratio (7 bits) */\n RATIO: (1n << LEG_BITS.RATIO_SIZE) - 1n,\n /** Mask for is long (1 bit) */\n IS_LONG: (1n << LEG_BITS.IS_LONG_SIZE) - 1n,\n /** Mask for token type (1 bit) */\n TOKEN_TYPE: (1n << LEG_BITS.TOKEN_TYPE_SIZE) - 1n,\n /** Mask for risk partner (2 bits) */\n RISK_PARTNER: (1n << LEG_BITS.RISK_PARTNER_SIZE) - 1n,\n /** Mask for strike (24 bits) */\n STRIKE: (1n << LEG_BITS.STRIKE_SIZE) - 1n,\n /** Mask for width (12 bits) */\n WIDTH: (1n << LEG_BITS.WIDTH_SIZE) - 1n,\n /** Mask for entire leg (48 bits) */\n LEG: (1n << TOKEN_ID_BITS.LEG_SIZE) - 1n,\n} as const\n\n/**\n * Maximum and minimum values for leg fields.\n */\nexport const LEG_LIMITS = {\n /** Maximum option ratio (127) */\n MAX_RATIO: 127n,\n /** Maximum width (4095) */\n MAX_WIDTH: 4095n,\n /** Maximum strike (8388607, max int24 positive) */\n MAX_STRIKE: 8388607n,\n /** Minimum strike (-8388608, min int24) */\n MIN_STRIKE: -8388608n,\n} as const\n\n/**\n * Value used to convert negative strike to unsigned representation.\n * Strike is stored as int24, so we use 2^24 for conversion.\n */\nexport const STRIKE_CONVERSION_FACTOR = 16777216n\n","import type { Address, Hex } from 'viem'\n\nimport { DEFAULT_VEGOID } from '../tokenId/constants'\n\nexport const vegoid = Number(DEFAULT_VEGOID)\n\nexport interface LegParams {\n index: number\n width: bigint\n optionRatio: bigint\n asset: bigint\n strike: bigint\n isLong: bigint // 0 if short, 1 if long\n tokenType: bigint // Which token (0|1 in underlying pool) is being moved\n riskPartner: bigint\n}\n\nexport const areLegsEqual = (leg1: LegParams, leg2: LegParams): boolean => {\n return (\n leg1.width === leg2.width &&\n leg1.optionRatio === leg2.optionRatio &&\n leg1.asset === leg2.asset &&\n leg1.strike === leg2.strike &&\n leg1.isLong === leg2.isLong &&\n leg1.tokenType === leg2.tokenType &&\n leg1.riskPartner === leg2.riskPartner\n )\n}\n\nexport const stringifyLeg = (leg: LegParams): string => {\n return `Index: ${leg.index} | Width: ${leg.width.toString()} | OptionRatio: ${leg.optionRatio.toString()} | Asset: ${leg.asset.toString()} | Strike: ${leg.strike.toString()} | IsLong?: ${leg.isLong.toString()} | Token Type: ${leg.tokenType.toString()} | Risk Partner: ${leg.riskPartner.toString()}`\n}\n\n// Synthetic TokenIds padding constant\nexport const SYNTH_TOKENID_PADDING = BigInt(\n '115792089237316195423570985007226406215939081747436879206741300988257197096960',\n)\n\nconst POOL_ID_SIZE = 64n\nconst VEGOID_STARTING_BIT = 40n\nconst VEGOID_SIZE = 8n\nconst TICK_SPACING_STARTING_BIT = 48n\nconst ASSET_STARTING_BIT = 0n\nconst ASSET_SIZE = 1n\nconst RATIO_STARTING_BIT = ASSET_STARTING_BIT + ASSET_SIZE // 0 + 1\nconst RATIO_SIZE = 7n\nconst IS_LONG_STARTING_BIT = RATIO_STARTING_BIT + RATIO_SIZE // 1 + 7\nconst IS_LONG_SIZE = 1n\nconst TOKEN_TYPE_STARTING_BIT = IS_LONG_STARTING_BIT + IS_LONG_SIZE // 8 + 1\nconst TOKEN_TYPE_SIZE = 1n\nconst RISK_PARTNER_STARTING_BIT = TOKEN_TYPE_STARTING_BIT + TOKEN_TYPE_SIZE // 9 + 1\nconst RISK_PARTNER_SIZE = 2n\nconst STRIKE_STARTING_BIT = RISK_PARTNER_STARTING_BIT + RISK_PARTNER_SIZE // 10 + 2\nconst STRIKE_SIZE = 24n\nconst WIDTH_STARTING_BIT = STRIKE_STARTING_BIT + STRIKE_SIZE // 12 + 24\nconst WIDTH_SIZE = 12n\nconst LEG_SIZE = WIDTH_STARTING_BIT + WIDTH_SIZE // 36 + 12 = 48\n\n// converts unsigned strike to signed for encoding\nexport const convertStrike = (n: bigint): bigint => {\n if (n < 0n) {\n // 3 bytes because strike is int24\n return 16777216n + n\n } else {\n return n\n }\n}\n\n// converts encoded (unsigned) strike back to signed\nexport const signStrike = (encodedStrike: bigint): bigint => {\n if (encodedStrike > 2n ** 23n) {\n return encodedStrike - 16777216n\n }\n return encodedStrike\n}\n\nconst getLegOffsetByIndex = (index: bigint): bigint => index * LEG_SIZE\n\nconst encodeAsset = (asset: bigint, legIndex: bigint): bigint =>\n asset << (getLegOffsetByIndex(legIndex) + ASSET_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeRatio = (optionRatio: bigint, legIndex: bigint): bigint =>\n optionRatio << (getLegOffsetByIndex(legIndex) + RATIO_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeIsLong = (isLong: bigint, legIndex: bigint): bigint =>\n isLong << (getLegOffsetByIndex(legIndex) + IS_LONG_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeTokenType = (tokenType: bigint, legIndex: bigint): bigint =>\n tokenType << (getLegOffsetByIndex(legIndex) + TOKEN_TYPE_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeRiskPartner = (riskPartner: bigint, legIndex: bigint): bigint =>\n riskPartner << (getLegOffsetByIndex(legIndex) + RISK_PARTNER_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeStrike = (strike: bigint, legIndex: bigint): bigint =>\n convertStrike(strike) << (getLegOffsetByIndex(legIndex) + STRIKE_STARTING_BIT + POOL_ID_SIZE)\n\nconst encodeWidth = (width: bigint, legIndex: bigint): bigint =>\n width << (getLegOffsetByIndex(legIndex) + WIDTH_STARTING_BIT + POOL_ID_SIZE)\n\nconst decodeAsset = (leg: bigint): bigint => leg % (1n << ASSET_SIZE)\n\nconst decodeRatio = (leg: bigint): bigint => (leg >> RATIO_STARTING_BIT) % (1n << RATIO_SIZE)\n\nconst decodeIsLong = (leg: bigint): bigint => (leg >> IS_LONG_STARTING_BIT) % (1n << IS_LONG_SIZE)\n\nconst decodeTokenType = (leg: bigint): bigint =>\n (leg >> TOKEN_TYPE_STARTING_BIT) % (1n << TOKEN_TYPE_SIZE)\n\nconst decodeRiskPartner = (leg: bigint): bigint =>\n (leg >> RISK_PARTNER_STARTING_BIT) % (1n << RISK_PARTNER_SIZE)\n\nconst decodeStrike = (leg: bigint): bigint =>\n signStrike((leg >> STRIKE_STARTING_BIT) % (1n << STRIKE_SIZE))\n\nconst decodeWidth = (leg: bigint): bigint => (leg >> WIDTH_STARTING_BIT) % (1n << WIDTH_SIZE)\n\n/**\n * Extract vegoid from a TokenId\n * Vegoid is stored in bits 40-47 (8 bits) of the poolId\n */\nexport const decodeVegoid = (tokenId: bigint): bigint => {\n return ((tokenId % (1n << POOL_ID_SIZE)) >> VEGOID_STARTING_BIT) % (1n << VEGOID_SIZE)\n}\n\n/**\n * Extract vegoid from a poolId\n * Vegoid is stored in bits 40-47 (8 bits) of the poolId\n */\nexport const decodeVegoidFromPoolId = (poolId: bigint): bigint => {\n return (poolId >> VEGOID_STARTING_BIT) % (1n << VEGOID_SIZE)\n}\n\n/**\n * Extract tickSpacing from a TokenId\n * TickSpacing is stored in bits 48-63 (16 bits) of the poolId\n */\nexport const decodeTickSpacing = (tokenId: bigint): bigint => {\n return (tokenId % (1n << POOL_ID_SIZE)) >> TICK_SPACING_STARTING_BIT\n}\n\n/**\n * Encode poolId with vegoid support\n * The encoded PoolId structure: [16-bit tickSpacing][8-bit vegoid][40-bit pool address]\n * @param address The Uniswap V3 pool address (hex string)\n * @param tickSpacing The tick spacing of the pool\n * @param vegoidValue The vegoid value (defaults to 4 if not provided)\n * @return The encoded poolId as bigint\n */\nexport const encodePoolId = (\n address: Address,\n tickSpacing: bigint,\n vegoidValue: bigint = BigInt(vegoid),\n): bigint => {\n // Remove 0x prefix and get first 10 hex chars (5 bytes = 40 bits)\n const addressHex = address.slice(2, 12).toLowerCase()\n\n // Convert to bytes array (big-endian), then reverse to little-endian\n const bytes: number[] = []\n for (let i = 0; i < 10; i += 2) {\n bytes.push(parseInt(addressHex.slice(i, i + 2), 16))\n }\n bytes.reverse()\n\n // Build poolId: pool address (5 bytes) + vegoid (1 byte) + tickSpacing (2 bytes) = 8 bytes\n // All in little-endian format\n let poolId = 0n\n for (let i = 0; i < bytes.length; i++) {\n poolId |= BigInt(bytes[i]) << BigInt(i * 8)\n }\n\n // Add vegoid at bit 40\n poolId |= (vegoidValue % 256n) << 40n\n\n // Add tickSpacing at bit 48\n poolId |= (tickSpacing % 65536n) << 48n\n\n return poolId\n}\n\n/**\n * Encode V4 poolId with vegoid support\n * The encoded PoolId structure: [16-bit tickSpacing][8-bit vegoid][40-bit pool pattern]\n * @param poolId The V4 pool ID (bytes32 hex string)\n * @param tickSpacing The tick spacing of the pool\n * @param vegoidValue The vegoid value (defaults to 4 if not provided)\n * @return The encoded poolId as bigint\n */\nexport const encodeV4PoolId = (\n poolId: Hex,\n tickSpacing: bigint,\n vegoidValue: bigint = BigInt(vegoid),\n): bigint => {\n // Remove 0x prefix and get last 10 hex chars (5 bytes = 40 bits)\n const poolIdHex = poolId.slice(2)\n const last5BytesHex = poolIdHex.slice(-10).toLowerCase()\n\n // Convert to bytes array (big-endian), then reverse to little-endian\n const bytes: number[] = []\n for (let i = 0; i < 10; i += 2) {\n bytes.push(parseInt(last5BytesHex.slice(i, i + 2), 16))\n }\n bytes.reverse()\n\n // Build encoded poolId: pool pattern (5 bytes) + vegoid (1 byte) + tickSpacing (2 bytes) = 8 bytes\n let encodedPoolId = 0n\n for (let i = 0; i < bytes.length; i++) {\n encodedPoolId |= BigInt(bytes[i]) << BigInt(i * 8)\n }\n\n // Add vegoid at bit 40\n encodedPoolId |= (vegoidValue % 256n) << 40n\n\n // Add tickSpacing at bit 48\n encodedPoolId |= (tickSpacing % 65536n) << 48n\n\n return encodedPoolId\n}\n\n// Can be (ab)used to create a leg id by passing in a tokenId of 0\nexport const addLeg = (tokenId: bigint, leg: LegParams): bigint => {\n const legIndex = BigInt(leg.index)\n const width = leg.width\n const strike = leg.strike\n const riskPartner = leg.riskPartner\n const tokenType = leg.tokenType\n const isLong = leg.isLong\n const optionRatio = leg.optionRatio\n const asset = leg.asset\n\n return (\n tokenId +\n encodeWidth(width, legIndex) +\n encodeStrike(strike, legIndex) +\n (encodeRiskPartner(riskPartner, legIndex) |\n encodeTokenType(tokenType, legIndex) |\n encodeIsLong(isLong, legIndex) |\n encodeRatio(optionRatio, legIndex) |\n encodeAsset(asset, legIndex))\n )\n}\n\nexport const encodePosition = (poolId: bigint, legs: LegParams[]): bigint => {\n return legs.reduce((acc, leg) => addLeg(acc, leg), poolId)\n}\n\nexport interface Position {\n poolId: string\n legs: LegParams[]\n}\n\nexport const decodePosition = (encodedPosition: bigint): Position => {\n const leg4 = (encodedPosition >> (POOL_ID_SIZE + getLegOffsetByIndex(3n))) % (1n << LEG_SIZE)\n\n const leg3 = (encodedPosition >> (POOL_ID_SIZE + getLegOffsetByIndex(2n))) % (1n << LEG_SIZE)\n\n const leg2 = (encodedPosition >> (POOL_ID_SIZE + getLegOffsetByIndex(1n))) % (1n << LEG_SIZE)\n\n const leg1 = (encodedPosition >> (POOL_ID_SIZE + getLegOffsetByIndex(0n))) % (1n << LEG_SIZE)\n\n let poolId = (encodedPosition % (1n << POOL_ID_SIZE)).toString(16)\n\n const poolIdLength = 16 // poolId is 64 bits => 16 hex characters\n if (poolId.length < poolIdLength) {\n poolId = padHexWithZeros('0x' + poolId, poolIdLength + 2) // +2 for 0x prefix\n } else {\n poolId = '0x' + poolId\n }\n\n const encodedLegs = [leg1, leg2, leg3, leg4].filter((leg) => decodeRatio(leg) > 0n)\n\n const legs: LegParams[] = encodedLegs.map((leg, index) => ({\n index: index,\n width: decodeWidth(leg),\n strike: decodeStrike(leg),\n riskPartner: decodeRiskPartner(leg),\n tokenType: decodeTokenType(leg),\n isLong: decodeIsLong(leg),\n optionRatio: decodeRatio(leg),\n asset: decodeAsset(leg),\n }))\n\n return {\n poolId,\n legs,\n }\n}\n\nexport function padHexWithZeros(hex: string, length: number): string {\n // Check if the hex starts with \"0x\"\n if (hex.startsWith('0x')) {\n // Remove the \"0x\" prefix\n hex = hex.substring(2)\n } else {\n throw new Error('do not use padHexWithZeros on non-hex strings')\n }\n\n // Subtract 2 from length to account for the substring(2) call to remove the leading 0x\n while (hex.length < length - 2) {\n hex = '0' + hex\n }\n\n // Add back the \"0x\" prefix\n return '0x' + hex\n}\n","/**\n * Position read functions for the Panoptic v2 SDK.\n * @module v2/reads/position\n */\n\nimport type { Address, PublicClient } from 'viem'\n\nimport { panopticPoolV2Abi } from '../../../generated'\nimport { getBlockMeta } from '../clients/blockMeta'\nimport { calculatePositionGreeks } from '../greeks'\nimport type { BlockMeta, Position, PositionGreeks, TokenIdLeg } from '../types'\nimport { decodePosition, decodeTickSpacing } from '../utils/option-encoding-v2'\n\n/**\n * Decode a packed PositionBalance (uint256) into its component fields.\n */\nfunction decodePositionBalance(balance: bigint) {\n const positionSize = balance & ((1n << 128n) - 1n)\n const poolUtilization0 = (balance >> 128n) & 0xffffn\n const poolUtilization1 = (balance >> 144n) & 0xffffn\n let tickAtMint = (balance >> 160n) & 0xffffffn\n if (tickAtMint > 0x7fffffn) {\n tickAtMint = tickAtMint - 0x1000000n\n }\n const timestampAtMint = (balance >> 184n) & 0xffffffffn\n const blockAtMint = (balance >> 216n) & ((1n << 39n) - 1n)\n const swapAtMint = balance >> 255n === 1n\n\n return {\n positionSize,\n poolUtilization0,\n poolUtilization1,\n tickAtMint,\n timestampAtMint,\n blockAtMint,\n swapAtMint,\n }\n}\n\n/**\n * Parameters for getPosition.\n */\nexport interface GetPositionParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Owner address */\n owner: Address\n /** TokenId to query */\n tokenId: bigint\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get a single position by tokenId.\n *\n * @param params - The parameters\n * @returns Position data with block metadata\n */\nexport async function getPosition(params: GetPositionParams): Promise<Position> {\n const { client, poolAddress, owner, tokenId, blockNumber } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n const [fullData, _meta] = await Promise.all([\n client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getFullPositionsData',\n args: [owner, false, [tokenId]],\n blockNumber: targetBlockNumber,\n }),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n const balanceRaw = fullData[2][0] // positionBalances[0]\n const {\n positionSize,\n poolUtilization0: utilization0AtMint,\n poolUtilization1: utilization1AtMint,\n tickAtMint,\n timestampAtMint,\n blockAtMint,\n swapAtMint,\n } = decodePositionBalance(balanceRaw)\n\n // Decode the tokenId to get legs\n const decoded = decodePosition(tokenId)\n const tickSpacing = decodeTickSpacing(tokenId)\n\n // Convert decoded legs to TokenIdLeg format\n const legs: TokenIdLeg[] = decoded.legs.map((leg) => {\n const width = leg.width\n const strike = leg.strike\n // Calculate tick bounds based on strike and width\n const tickLower = strike - (width * tickSpacing) / 2n\n const tickUpper = strike + (width * tickSpacing) / 2n\n\n return {\n index: BigInt(leg.index),\n asset: leg.asset,\n optionRatio: leg.optionRatio,\n isLong: leg.isLong === 1n,\n tokenType: leg.tokenType,\n riskPartner: leg.riskPartner,\n strike,\n width,\n tickLower,\n tickUpper,\n }\n })\n\n return {\n tokenId,\n positionSize,\n owner,\n poolAddress,\n legs,\n poolUtilization0AtMint: utilization0AtMint,\n poolUtilization1AtMint: utilization1AtMint,\n tickAtMint: BigInt(tickAtMint),\n timestampAtMint,\n blockNumberAtMint: blockAtMint,\n swapAtMint,\n premiaOwed0: 0n, // Premia now tracked separately, not returned from positionData\n premiaOwed1: 0n,\n assetIndex: legs.length > 0 ? legs[0].asset : 0n,\n _meta,\n }\n}\n\n/**\n * Parameters for getPositions.\n */\nexport interface GetPositionsParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Owner address */\n owner: Address\n /** TokenIds to query */\n tokenIds: bigint[]\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get multiple positions for an account.\n *\n * @param params - The parameters\n * @returns Array of positions with block metadata\n */\nexport async function getPositions(\n params: GetPositionsParams,\n): Promise<{ positions: Position[]; _meta: BlockMeta }> {\n const { client, poolAddress, owner, tokenIds, blockNumber } = params\n\n if (tokenIds.length === 0) {\n const _meta =\n params._meta ??\n (await getBlockMeta({\n client,\n blockNumber: blockNumber ?? (await client.getBlockNumber()),\n }))\n return { positions: [], _meta }\n }\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n const _meta = params._meta ?? (await getBlockMeta({ client, blockNumber: targetBlockNumber }))\n\n const decodePositions = (\n ids: bigint[],\n positionBalances: readonly bigint[],\n meta: BlockMeta,\n ): Position[] => {\n const positions: Position[] = []\n for (let i = 0; i < ids.length; i += 1) {\n const tokenId = ids[i]\n if (tokenId === undefined) continue\n const balanceRaw = positionBalances[i]\n if (balanceRaw === undefined) continue\n\n const {\n positionSize,\n poolUtilization0: utilization0AtMint,\n poolUtilization1: utilization1AtMint,\n tickAtMint,\n timestampAtMint,\n blockAtMint,\n swapAtMint,\n } = decodePositionBalance(balanceRaw)\n\n // Skip positions with zero size\n if (positionSize === 0n) {\n continue\n }\n\n // Decode the tokenId to get legs\n const decoded = decodePosition(tokenId)\n const tickSpacing = decodeTickSpacing(tokenId)\n\n // Convert decoded legs to TokenIdLeg format\n const legs: TokenIdLeg[] = decoded.legs.map((leg) => {\n const width = leg.width\n const strike = leg.strike\n const tickLower = strike - (width * tickSpacing) / 2n\n const tickUpper = strike + (width * tickSpacing) / 2n\n\n return {\n index: BigInt(leg.index),\n asset: leg.asset,\n optionRatio: leg.optionRatio,\n isLong: leg.isLong === 1n,\n tokenType: leg.tokenType,\n riskPartner: leg.riskPartner,\n strike,\n width,\n tickLower,\n tickUpper,\n }\n })\n\n positions.push({\n tokenId,\n positionSize,\n owner,\n poolAddress,\n legs,\n poolUtilization0AtMint: utilization0AtMint,\n poolUtilization1AtMint: utilization1AtMint,\n tickAtMint: BigInt(tickAtMint),\n timestampAtMint,\n blockNumberAtMint: blockAtMint,\n swapAtMint,\n premiaOwed0: 0n, // Premia now tracked separately\n premiaOwed1: 0n,\n assetIndex: legs.length > 0 ? legs[0].asset : 0n,\n _meta: meta,\n })\n }\n return positions\n }\n\n const getOrderingCandidates = (ids: bigint[]): bigint[][] => {\n if (ids.length <= 1) return [Array.from(ids)]\n const candidates: bigint[][] = []\n const seen = new Set<string>()\n const push = (candidate: bigint[]) => {\n const key = candidate.map((value) => value.toString()).join(',')\n if (seen.has(key)) return\n seen.add(key)\n candidates.push(candidate)\n }\n push(Array.from(ids))\n push(Array.from(ids).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)))\n push(Array.from(ids).sort((a, b) => (a < b ? 1 : a > b ? -1 : 0)))\n return candidates\n }\n\n const fetchBalances = async (ids: bigint[]) => {\n const fullData = await client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getFullPositionsData',\n args: [owner, false, ids],\n blockNumber: targetBlockNumber,\n })\n const balances = fullData[2]\n return Array.isArray(balances) ? balances : []\n }\n\n // Try full-batch read first.\n for (const candidate of getOrderingCandidates(tokenIds)) {\n try {\n const balances = await fetchBalances(candidate)\n return { positions: decodePositions(candidate, balances, _meta), _meta }\n } catch {\n // fall through to next ordering candidate\n }\n }\n\n // Last-resort fallback: probe each token independently and keep only successful reads.\n const perTokenResults = await Promise.all(\n tokenIds.map(async (tokenId) => {\n try {\n const balances = await fetchBalances([tokenId])\n return { tokenId, balance: balances[0] }\n } catch {\n return { tokenId, balance: undefined }\n }\n }),\n )\n const validTokenIds: bigint[] = []\n const validBalances: bigint[] = []\n for (const result of perTokenResults) {\n if (result.balance === undefined) continue\n validTokenIds.push(result.tokenId)\n validBalances.push(result.balance)\n }\n\n return { positions: decodePositions(validTokenIds, validBalances, _meta), _meta }\n}\n\n/**\n * Parameters for getPositionGreeks.\n */\nexport interface GetPositionGreeksParams {\n /** viem PublicClient */\n client: PublicClient\n /** PanopticPool address */\n poolAddress: Address\n /** Owner address */\n owner: Address\n /** TokenId to calculate greeks for */\n tokenId: bigint\n /** Optional: Current tick override (defaults to pool's current tick) */\n atTick?: bigint\n /** Optional block number for historical queries */\n blockNumber?: bigint\n /** Optional pre-fetched block metadata (skips getBlockMeta RPC call) */\n _meta?: BlockMeta\n}\n\n/**\n * Get Greeks for a position.\n *\n * Uses client-side calculation based on the position's legs, current tick,\n * and mint tick. Returns WAD-scaled (1e18) bigint values.\n *\n * @param params - The parameters\n * @returns Position greeks with block metadata\n */\nexport async function getPositionGreeks(\n params: GetPositionGreeksParams,\n): Promise<PositionGreeks & { _meta: BlockMeta }> {\n const { client, poolAddress, owner, tokenId, atTick, blockNumber } = params\n\n const targetBlockNumber =\n blockNumber ?? params._meta?.blockNumber ?? (await client.getBlockNumber())\n\n // Get position data and current tick in parallel\n const [fullData, currentTickResult, _meta] = await Promise.all([\n client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getFullPositionsData',\n args: [owner, false, [tokenId]],\n blockNumber: targetBlockNumber,\n }),\n atTick === undefined\n ? client.readContract({\n address: poolAddress,\n abi: panopticPoolV2Abi,\n functionName: 'getCurrentTick',\n blockNumber: targetBlockNumber,\n })\n : Promise.resolve(atTick),\n params._meta ?? getBlockMeta({ client, blockNumber: targetBlockNumber }),\n ])\n\n const { tickAtMint, positionSize } = decodePositionBalance(fullData[2][0])\n\n // Decode the tokenId to get legs\n const decoded = decodePosition(tokenId)\n const tickSpacing = decodeTickSpacing(tokenId)\n\n // Convert decoded legs to TokenIdLeg format\n const legs: TokenIdLeg[] = decoded.legs.map((leg) => {\n const width = leg.width\n const strike = leg.strike\n const tickLower = strike - (width * tickSpacing) / 2n\n const tickUpper = strike + (width * tickSpacing) / 2n\n\n return {\n index: BigInt(leg.index),\n asset: leg.asset,\n optionRatio: leg.optionRatio,\n isLong: leg.isLong === 1n,\n tokenType: leg.tokenType,\n riskPartner: leg.riskPartner,\n strike,\n width,\n tickLower,\n tickUpper,\n }\n })\n\n const currentTick =\n typeof currentTickResult === 'bigint' ? currentTickResult : BigInt(currentTickResult)\n\n // Calculate greeks using client-side implementation\n const greeks = calculatePositionGreeks({\n legs,\n currentTick,\n mintTick: BigInt(tickAtMint),\n positionSize,\n poolTickSpacing: tickSpacing,\n })\n\n return {\n ...greeks,\n _meta,\n }\n}\n"],"mappings":"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AAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IAAE,MAAM;IAAM,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACvE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAsB;CACzD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAA0B;CAC7D;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CACD;EACE,MAAM;EACN,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAS,cAAc;GAAW,MAAM;EAAW,GAC3D;GAAE,MAAM;GAAW,cAAc;GAAQ,MAAM;EAAQ,CACxD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAI,cAAc;GAA2B,MAAM;EAAW,CAAC;EAChF,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,GACD;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,GACD;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,CACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS;EACV,GACD;GAAE,MAAM;GAAO,cAAc;GAAW,MAAM;GAAW,SAAS;EAAO,CAC1E;EACD,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAsB;CACzD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAmB;CACtD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAwB;CAC3D;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAmB;CACtD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAgB;CACnD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAwB;CAC3D;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAO,cAAc;GAAW,MAAM;EAAW,CAAC;EACnE,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;AACnD;AAMD,MAAa,oBAAoB;CAC/B;EACE,MAAM;EACN,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAa,cAAc;GAAW,MAAM;EAAW,GAC/D;GAAE,MAAM;GAAa,cAAc;GAAW,MAAM;EAAW,CAChE;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAiB,cAAc;IAAa,MAAM;GAAa;GACvE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAyB,cAAc;IAAQ,MAAM;GAAQ;GACrE;IAAE,MAAM;IAAe,cAAc;IAAW,MAAM;GAAW;EAClE;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAAC;EACvE,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,GAC7D;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAC9D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAa,cAAc;GAAS,MAAM;EAAS,GAC3D;GAAE,MAAM;GAAa,cAAc;GAAS,MAAM;EAAS,CAC5D;EACD,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAY,cAAc;IAAqB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAY,cAAc;IAAqB,MAAM;GAAW;EACzE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;GAAW;GAC1D;IAAE,MAAM;IAAyB,cAAc;IAAQ,MAAM;GAAQ;GACrE;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAe,cAAc;IAAS,MAAM;GAAS;GAC7D;IAAE,MAAM;IAAY,cAAc;IAAS,MAAM;GAAS;GAC1D;IAAE,MAAM;IAAc,cAAc;IAAS,MAAM;GAAS;GAC5D;IAAE,MAAM;IAAc,cAAc;IAAS,MAAM;GAAS;GAC5D;IAAE,MAAM;IAAc,cAAc;IAAc,MAAM;GAAW;EACpE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAe,cAAc;GAAW,MAAM;EAAW,CAAC;EAC3E,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,GACD;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,CAC9D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAY,cAAc;GAAS,MAAM;EAAS,CAAC;EACrE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAQ,cAAc;GAAW,MAAM;EAAW,CAAC;EACpE,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAQ,cAAc;GAAW,MAAM;EAAW,CAAC;EACpE,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAS,MAAM;GAAS;EACnD;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAO,cAAc;GAAS,MAAM;EAAS,CAAC;EAChE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAW,cAAc;GAAQ,MAAM;EAAQ,CAAC;EAClE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAwB,MAAM;EAAW,CAAC;EAC9E,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;GAAW;GAC1D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAyB,cAAc;IAAQ,MAAM;GAAQ;EACtE;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,GAC7D;GAAE,MAAM;GAAiB,cAAc;GAAW,MAAM;EAAW,CACpE;EACD,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAsB;CACzD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAgB;CACnD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoC;CACvE;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAiB;CACpD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAqB;CACxD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAmB;CACtD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAuB;CAC1D;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAc;CACjD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAsB;CACzD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAmB;CACtD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAiB;CACpD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;AACnD;AAMD,MAAa,mBAAmB;CAC9B;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAI,cAAc;IAAgB,MAAM;GAAgB;GAChE;IAAE,MAAM;IAAI,cAAc;IAAY,MAAM;GAAY;GACxD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;EACvD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAQ,cAAc;GAAyB,MAAM;EAAW,GACxE;GAAE,MAAM;GAAkB,cAAc;GAAa,MAAM;EAAa,CACzE;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAmB,MAAM;EAAmB,CAAC;EACjF,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAwB,cAAc;GAAS,MAAM;EAAS,GACtE;GAAE,MAAM;GAAsB,cAAc;GAAS,MAAM;EAAS,CACrE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;EAC9D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAoB,cAAc;GAAW,MAAM;EAAW,GACtE;GAAE,MAAM;GAAoB,cAAc;GAAW,MAAM;EAAW,CACvE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAyB,cAAc;IAAQ,MAAM;GAAQ;GACrE;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,GAC1D;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAC3D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,GAC1D;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAC3D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;EACzE;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAU,cAAc;GAAY,MAAM;EAAY,GAC9D;GAAE,MAAM;GAAU,cAAc;GAAY,MAAM;EAAY,CAC/D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;EAC7D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAY,cAAc;GAAY,MAAM;EAAY,GAChE;GAAE,MAAM;GAAiB,cAAc;GAAY,MAAM;EAAY,CACtE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAQ,MAAM;EAAQ,CAAC;EAC3D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;EAC9D;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAQ,cAAc;IAAyB,MAAM;GAAW;GACxE;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAS,cAAc;IAAS,MAAM;GAAS;EACxD;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAgB,MAAM;GAAgB;GAChE;IAAE,MAAM;IAAI,cAAc;IAAgB,MAAM;GAAgB;GAChE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAQ,cAAc;GAAW,MAAM;EAAW,CAAC;EACpE,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAgB;CACnD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAiB,cAAc;GAAW,MAAM;EAAW,CAAC;EAC7E,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAiB;AACrD;AAMD,MAAa,gBAAgB;CAC3B;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAiB,cAAc;IAAW,MAAM;GAAW;GACnE;IAAE,MAAM;IAAiB,cAAc;IAAW,MAAM;GAAW;GACnE;IAAE,MAAM;IAAa,cAAc;IAAW,MAAM;GAAW;GAC/D;IAAE,MAAM;IAAmB,cAAc;IAAW,MAAM;GAAW;EACtE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAU,MAAM;EAAU,CAAC;EAC/D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAS,cAAc;GAAW,MAAM;EAAW,GAC3D;GAAE,MAAM;GAAa,cAAc;GAAW,MAAM;EAAW,CAChE;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAW,MAAM;GAAW;GAC/D;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;EAC7D;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAc,cAAc;GAAc,MAAM;EAAW,GACnE;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,CAC9D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAc,cAAc;GAAS,MAAM;EAAS,GAC5D;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAe,cAAc;GAAU,MAAM;EAAU,GAC/D;GAAE,MAAM;GAAe,cAAc;GAAW,MAAM;EAAW,CAClE;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAe,cAAc;IAAS,MAAM;GAAS;GAC7D;IAAE,MAAM;IAAc,cAAc;IAAS,MAAM;GAAS;GAC5D;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAgB,cAAc;GAAmB,MAAM;EAAU,CAAC;EACpF,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAe,cAAc;GAAW,MAAM;EAAW,CAAC;EAC3E,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAgB,cAAc;GAAW,MAAM;EAAW,CAAC;EAC7E,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAkB,cAAc;IAAW,MAAM;GAAW;GACpE;IAAE,MAAM;IAAW,cAAc;IAAmB,MAAM;GAAU;GACpE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAI,cAAc;GAAmB,MAAM;EAAU,GAC7D;GAAE,MAAM;GAAI,cAAc;GAAmB,MAAM;EAAU,CAC9D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;GAAW;GAC1D;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,GAC7D;GAAE,MAAM;GAAe,cAAc;GAAc,MAAM;EAAW,CACrE;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAY,cAAc;IAAS,MAAM;GAAS;GAC1D;IAAE,MAAM;IAAc,cAAc;IAAS,MAAM;GAAS;GAC5D;IAAE,MAAM;IAAc,cAAc;IAAS,MAAM;GAAS;GAC5D;IAAE,MAAM;IAAc,cAAc;IAAc,MAAM;GAAW;EACpE;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAQ,cAAc;IAAmB,MAAM;GAAU;GACjE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAmB,MAAM;EAAU,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAe,cAAc;IAAS,MAAM;GAAS;GAC7D;IAAE,MAAM;IAAc,cAAc;IAAc,MAAM;GAAW;GACnE;IAAE,MAAM;IAAe,cAAc;IAAW,MAAM;GAAW;EAClE;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAkB,MAAM;EAAW,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAe,cAAc;IAAS,MAAM;GAAS;GAC7D;IAAE,MAAM;IAAe,cAAc;IAAc,MAAM;GAAW;GACpE;IAAE,MAAM;IAAY,cAAc;IAAS,MAAM;GAAS;EAC3D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,GACtD;GAAE,MAAM;GAAI,cAAc;GAAc,MAAM;EAAW,CAC1D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAkB,cAAc;IAAW,MAAM;GAAW;EACrE;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAe,cAAc;IAAmB,MAAM;GAAU;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAe,cAAc;GAAW,MAAM;EAAW,GACjE;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CAAC;EACjE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAkB,cAAc;IAAa,MAAM;GAAa;GACxE;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;GAAW;GAC1D;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;EAC7D;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAQ,MAAM;EAAQ,CAAC;EAC3D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,GAC7D;GAAE,MAAM;GAAc,cAAc;GAAc,MAAM;EAAW,CACpE;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAY,cAAc;GAAS,MAAM;EAAS,CAAC;EACrE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAc,cAAc;GAAc,MAAM;EAAW,CAAC;EAC7E,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAe,cAAc;GAAW,MAAM;EAAW,GACjE;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,GACtD;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CACvD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CAAC;EAC7D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ,CAAC;GAAE,MAAM;GAAY,cAAc;GAAQ,MAAM;GAAQ,SAAS;EAAO,CAAC;EAClF,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAA0B;CAC7D;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAgB;CACnD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAsB;CACzD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAkB;CACrD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAoB;CACvD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAe;CAClD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;GAAW;GAC1D;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;GAC5D;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;EAC9D;EACD,MAAM;CACP;CACD;EAAE,MAAM;EAAS,QAAQ,CAAE;EAAE,MAAM;CAAiB;AACrD;AAMD,MAAa,mCAAmC;CAC9C;EACE,MAAM;EACN,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;GACP;EACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,GAC7D;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAC9D;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAU,cAAc;GAAa,MAAM;EAAa,GAChE;GAAE,MAAM;GAAO,cAAc;GAAa,MAAM;EAAa,CAC9D;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAY,cAAc;GAAa,MAAM;EAAa,CAAC;EAC7E,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAW,cAAc;IAAS,MAAM;GAAS;GACzD;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAgB,cAAc;IAAW,MAAM;GAAW;GAClE;IAAE,MAAM;IAAgB,cAAc;IAAS,MAAM;GAAS;GAC9D;IAAE,MAAM;IAAiB,cAAc;IAAS,MAAM;GAAS;EAChE;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAI,cAAc;IAAwB,MAAM;GAAc;GACtE;IAAE,MAAM;IAAI,cAAc;IAAmB,MAAM;GAAU;GAC7D;IAAE,MAAM;IAAI,cAAc;IAAS,MAAM;GAAS;EACnD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAAC;EACpE,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAW,cAAc;IAAS,MAAM;GAAS;GACzD;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAW,MAAM;GAAW;GAC/D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;EAC5D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAa,cAAc;GAAU,MAAM;EAAU,GAC7D;GAAE,MAAM;GAAa,cAAc;GAAU,MAAM;EAAU,CAC9D;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAW,cAAc;IAAS,MAAM;GAAS;GACzD;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAW,MAAM;GAAW;GAC/D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;EAC5D;EACD,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAW,cAAc;IAAS,MAAM;GAAS;GACzD;IAAE,MAAM;IAAS,cAAc;IAAW,MAAM;GAAW;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAW,MAAM;GAAW;GAC/D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAa,cAAc;IAAS,MAAM;GAAS;GAC3D;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;GACxD;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;GAC5D;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;EAC7D;EACD,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,GACtD;GAAE,MAAM;GAAI,cAAc;GAAW,MAAM;EAAW,CACvD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAW,cAAc;GAAS,MAAM;EAAS,CAAC;EACnE,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAe,cAAc;GAAS,MAAM;EAAS,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAAC;EACpE,MAAM;EACN,SAAS,CACP;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,GAClD;GAAE,MAAM;GAAI,cAAc;GAAS,MAAM;EAAS,CACnD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAM,cAAc;GAAS,MAAM;EAAS,GACpD;GAAE,MAAM;GAAU,cAAc;GAAS,MAAM;EAAS,CACzD;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAAC;EACrE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAAC;EACpE,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,cAAc;GACd,MAAM;EACP,CACF;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;GAC5D;IAAE,MAAM;IAAU,cAAc;IAAW,MAAM;GAAW;GAC5D;IAAE,MAAM;IAAO,cAAc;IAAU,MAAM;GAAU;GACvD;IAAE,MAAM;IAAU,cAAc;IAAS,MAAM;GAAS;EACzD;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAU,cAAc;GAAU,MAAM;EAAU,CAAC;EACrE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAS,cAAc;GAAW,MAAM;EAAW,GAC3D;GAAE,MAAM;GAAY,cAAc;GAAW,MAAM;EAAW,CAC/D;EACD,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAkB,cAAc;GAAQ,MAAM;EAAQ,CAAC;EACzE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAW,cAAc;IAAS,MAAM;GAAS;GACzD;IAAE,MAAM;IAAW,cAAc;IAAW,MAAM;GAAW;GAC7D;IAAE,MAAM;IAAgB,cAAc;IAAW,MAAM;GAAW;GAClE;IAAE,MAAM;IAAgB,cAAc;IAAS,MAAM;GAAS;GAC9D;IAAE,MAAM;IAAiB,cAAc;IAAS,MAAM;GAAS;EAChE;EACD,MAAM;EACN,SAAS;GACP;IAAE,MAAM;IAAI,cAAc;IAAwB,MAAM;GAAc;GACtE;IAAE,MAAM;IAAI,cAAc;IAAmB,MAAM;GAAU;GAC7D;IAAE,MAAM;IAAI,cAAc;IAAS,MAAM;GAAS;EACnD;EACD,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAQ,cAAc;GAAW,MAAM;EAAW,CAAC;EACpE,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAW,cAAc;GAAW,MAAM;EAAW,CAAC;EACxE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAE;EACV,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAW,cAAc;GAAQ,MAAM;EAAQ,CAAC;EAClE,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAa,MAAM;GAAa;GAC1D;IAAE,MAAM;IAAI,cAAc;IAAa,MAAM;GAAa;GAC1D;IAAE,MAAM;IAAI,cAAc;IAAS,MAAM;GAAS;EACnD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAW,MAAM;GAAW;GACtD;IAAE,MAAM;IAAI,cAAc;IAAS,MAAM;GAAS;EACnD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CACN;GAAE,MAAM;GAAY,cAAc;GAAW,MAAM;EAAW,GAC9D;GAAE,MAAM;GAAY,cAAc;GAAQ,MAAM;EAAQ,CACzD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ,CAAC;GAAE,MAAM;GAAe,cAAc;GAAU,MAAM;EAAU,CAAC;EACzE,MAAM;EACN,SAAS,CAAC;GAAE,MAAM;GAAI,cAAc;GAAQ,MAAM;EAAQ,CAAC;EAC3D,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAe,cAAc;IAAW,MAAM;GAAW;GACjE;IAAE,MAAM;IAAe,cAAc;IAAW,MAAM;GAAW;GACjE;IAAE,MAAM;IAAQ,cAAc;IAAS,MAAM;GAAS;EACvD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,QAAQ;GACN;IAAE,MAAM;IAAgB,cAAc;IAAU,MAAM;GAAU;GAChE;IAAE,MAAM;IAAgB,cAAc;IAAU,MAAM;GAAU;GAChE;IAAE,MAAM;IAAQ,cAAc;IAAS,MAAM;GAAS;EACvD;EACD,MAAM;EACN,SAAS,CAAE;EACX,iBAAiB;CAClB;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAY,cAAc;IAAQ,MAAM;IAAQ,SAAS;GAAO;EACzE;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IAAE,MAAM;IAAM,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACvE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IAAE,MAAM;IAAM,cAAc;IA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SAAS;GAAM;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IAAE,MAAM;IAAM,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACvE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM;CACP;CACD;EACE,MAAM;EACN,WAAW;EACX,QAAQ;GACN;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;GACD;IAAE,MAAM;IAAQ,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACzE;IAAE,MAAM;IAAM,cAAc;IAAW,MAAM;IAAW,SAAS;GAAM;GACvE;IAAE,MAAM;IAAM,cAAc;IAAW,MAAM;IAAW,SAAS;GAAO;GACxE;IACE,MAAM;IACN,cAAc;IACd,MAAM;IACN,SAAS;GACV;EACF;EACD,MAAM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"}
|