{
    "version": "0.1.0",
    "name": "whirlpool",
    "instructions": [
        {
            "name": "initializeConfig",
            "accounts": [
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "feeAuthority",
                    "type": "publicKey"
                },
                {
                    "name": "collectProtocolFeesAuthority",
                    "type": "publicKey"
                },
                {
                    "name": "rewardEmissionsSuperAuthority",
                    "type": "publicKey"
                },
                {
                    "name": "poolCreatorAuthority",
                    "type": "publicKey"
                },
                {
                    "name": "defaultProtocolFeeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "initializePool",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenMintA",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenMintB",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "feeTier",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bumps",
                    "type": {
                        "defined": "WhirlpoolBumps"
                    }
                },
                {
                    "name": "tickSpacing",
                    "type": "u16"
                },
                {
                    "name": "initialSqrtPrice",
                    "type": "u128"
                }
            ]
        },
        {
            "name": "initializeTickArray",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "tickArray",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "startTickIndex",
                    "type": "i32"
                }
            ]
        },
        {
            "name": "initializeFeeTier",
            "accounts": [
                {
                    "name": "config",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "feeTier",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "tickSpacing",
                    "type": "u16"
                },
                {
                    "name": "defaultFeeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "initializeReward",
            "accounts": [
                {
                    "name": "rewardAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardVault",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "setRewardEmissions",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "rewardVault",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u8"
                },
                {
                    "name": "emissionsPerSecondX64",
                    "type": "u128"
                }
            ]
        },
        {
            "name": "openPosition",
            "accounts": [
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionMint",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bumps",
                    "type": {
                        "defined": "OpenPositionBumps"
                    }
                },
                {
                    "name": "tickLowerIndex",
                    "type": "i32"
                },
                {
                    "name": "tickUpperIndex",
                    "type": "i32"
                }
            ]
        },
        {
            "name": "openPositionWithMetadata",
            "accounts": [
                {
                    "name": "funder",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "owner",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionMint",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "positionMetadataAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "metadataProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "metadataUpdateAuth",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bumps",
                    "type": {
                        "defined": "OpenPositionWithMetadataBumps"
                    }
                },
                {
                    "name": "tickLowerIndex",
                    "type": "i32"
                },
                {
                    "name": "tickUpperIndex",
                    "type": "i32"
                }
            ]
        },
        {
            "name": "increaseLiquidity",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "positionAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayLower",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayUpper",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "liquidityAmount",
                    "type": "u128"
                },
                {
                    "name": "tokenMaxA",
                    "type": "u64"
                },
                {
                    "name": "tokenMaxB",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "decreaseLiquidity",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "positionAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayLower",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayUpper",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "liquidityAmount",
                    "type": "u128"
                },
                {
                    "name": "tokenMinA",
                    "type": "u64"
                },
                {
                    "name": "tokenMinB",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "updateFeesAndRewards",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayLower",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tickArrayUpper",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "collectFees",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "positionAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "collectReward",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "positionAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rewardOwnerAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "collectProtocolFees",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "collectProtocolFeesAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenDestinationA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenDestinationB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "swap",
            "accounts": [
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArray0",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArray1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArray2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "oracle",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                },
                {
                    "name": "otherAmountThreshold",
                    "type": "u64"
                },
                {
                    "name": "sqrtPriceLimit",
                    "type": "u128"
                },
                {
                    "name": "amountSpecifiedIsInput",
                    "type": "bool"
                },
                {
                    "name": "aToB",
                    "type": "bool"
                }
            ]
        },
        {
            "name": "closePosition",
            "accounts": [
                {
                    "name": "positionAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "receiver",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "position",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "positionTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setDefaultFeeRate",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "feeTier",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "defaultFeeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "setDefaultProtocolFeeRate",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "defaultProtocolFeeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "setFeeRate",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "feeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "setProtocolFeeRate",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "protocolFeeRate",
                    "type": "u16"
                }
            ]
        },
        {
            "name": "setFeeAuthority",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "feeAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newFeeAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setCollectProtocolFeesAuthority",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "collectProtocolFeesAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newCollectProtocolFeesAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setRewardAuthority",
            "accounts": [
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newRewardAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "setPoolCreatorAuthority",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "poolCreatorAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newPoolCreatorAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setRewardAuthorityBySuperAuthority",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardEmissionsSuperAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newRewardAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "rewardIndex",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "setRewardEmissionsSuperAuthority",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rewardEmissionsSuperAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "newRewardEmissionsSuperAuthority",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setEnableFlag",
            "accounts": [
                {
                    "name": "whirlpoolsConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "whirlpool",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "poolCreatorAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "isEnabled",
                    "type": "bool"
                }
            ]
        },
        {
            "name": "twoHopSwap",
            "accounts": [
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenAuthority",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "whirlpoolOne",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "whirlpoolTwo",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountOneA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultOneA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountOneB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultOneB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountTwoA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultTwoA",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenOwnerAccountTwoB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVaultTwoB",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayOne0",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayOne1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayOne2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayTwo0",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayTwo1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tickArrayTwo2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "oracleOne",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "oracleTwo",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                },
                {
                    "name": "otherAmountThreshold",
                    "type": "u64"
                },
                {
                    "name": "amountSpecifiedIsInput",
                    "type": "bool"
                },
                {
                    "name": "aToBOne",
                    "type": "bool"
                },
                {
                    "name": "aToBTwo",
                    "type": "bool"
                },
                {
                    "name": "sqrtPriceLimitOne",
                    "type": "u128"
                },
                {
                    "name": "sqrtPriceLimitTwo",
                    "type": "u128"
                }
            ]
        }
    ],
    "accounts": [
        {
            "name": "WhirlpoolsConfig",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "feeAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "collectProtocolFeesAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "rewardEmissionsSuperAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "poolCreatorAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "defaultProtocolFeeRate",
                        "type": "u16"
                    }
                ]
            }
        },
        {
            "name": "FeeTier",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "whirlpoolsConfig",
                        "type": "publicKey"
                    },
                    {
                        "name": "tickSpacing",
                        "type": "u16"
                    },
                    {
                        "name": "defaultFeeRate",
                        "type": "u16"
                    }
                ]
            }
        },
        {
            "name": "Position",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "whirlpool",
                        "type": "publicKey"
                    },
                    {
                        "name": "positionMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "liquidity",
                        "type": "u128"
                    },
                    {
                        "name": "tickLowerIndex",
                        "type": "i32"
                    },
                    {
                        "name": "tickUpperIndex",
                        "type": "i32"
                    },
                    {
                        "name": "feeGrowthCheckpointA",
                        "type": "u128"
                    },
                    {
                        "name": "feeOwedA",
                        "type": "u64"
                    },
                    {
                        "name": "feeGrowthCheckpointB",
                        "type": "u128"
                    },
                    {
                        "name": "feeOwedB",
                        "type": "u64"
                    },
                    {
                        "name": "rewardInfos",
                        "type": {
                            "array": [
                                {
                                    "defined": "PositionRewardInfo"
                                },
                                3
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "TickArray",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "startTickIndex",
                        "type": "i32"
                    },
                    {
                        "name": "ticks",
                        "type": {
                            "array": [
                                {
                                    "defined": "Tick"
                                },
                                88
                            ]
                        }
                    },
                    {
                        "name": "whirlpool",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "Whirlpool",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "isEnabled",
                        "type": "bool"
                    },
                    {
                        "name": "whirlpoolsConfig",
                        "type": "publicKey"
                    },
                    {
                        "name": "whirlpoolBump",
                        "type": {
                            "array": [
                                "u8",
                                1
                            ]
                        }
                    },
                    {
                        "name": "tickSpacing",
                        "type": "u16"
                    },
                    {
                        "name": "tickSpacingSeed",
                        "type": {
                            "array": [
                                "u8",
                                2
                            ]
                        }
                    },
                    {
                        "name": "feeRate",
                        "type": "u16"
                    },
                    {
                        "name": "protocolFeeRate",
                        "type": "u16"
                    },
                    {
                        "name": "liquidity",
                        "type": "u128"
                    },
                    {
                        "name": "sqrtPrice",
                        "type": "u128"
                    },
                    {
                        "name": "tickCurrentIndex",
                        "type": "i32"
                    },
                    {
                        "name": "protocolFeeOwedA",
                        "type": "u64"
                    },
                    {
                        "name": "protocolFeeOwedB",
                        "type": "u64"
                    },
                    {
                        "name": "tokenMintA",
                        "type": "publicKey"
                    },
                    {
                        "name": "tokenVaultA",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeGrowthGlobalA",
                        "type": "u128"
                    },
                    {
                        "name": "tokenMintB",
                        "type": "publicKey"
                    },
                    {
                        "name": "tokenVaultB",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeGrowthGlobalB",
                        "type": "u128"
                    },
                    {
                        "name": "rewardLastUpdatedTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "rewardInfos",
                        "type": {
                            "array": [
                                {
                                    "defined": "WhirlpoolRewardInfo"
                                },
                                3
                            ]
                        }
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "OpenPositionBumps",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "positionBump",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "OpenPositionWithMetadataBumps",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "positionBump",
                        "type": "u8"
                    },
                    {
                        "name": "metadataBump",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "PositionRewardInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "growthInsideCheckpoint",
                        "type": "u128"
                    },
                    {
                        "name": "amountOwed",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "Tick",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "initialized",
                        "type": "bool"
                    },
                    {
                        "name": "liquidityNet",
                        "type": "i128"
                    },
                    {
                        "name": "liquidityGross",
                        "type": "u128"
                    },
                    {
                        "name": "feeGrowthOutsideA",
                        "type": "u128"
                    },
                    {
                        "name": "feeGrowthOutsideB",
                        "type": "u128"
                    },
                    {
                        "name": "rewardGrowthsOutside",
                        "type": {
                            "array": [
                                "u128",
                                3
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "WhirlpoolRewardInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "mint",
                        "type": "publicKey"
                    },
                    {
                        "name": "vault",
                        "type": "publicKey"
                    },
                    {
                        "name": "authority",
                        "type": "publicKey"
                    },
                    {
                        "name": "emissionsPerSecondX64",
                        "type": "u128"
                    },
                    {
                        "name": "growthGlobalX64",
                        "type": "u128"
                    }
                ]
            }
        },
        {
            "name": "WhirlpoolBumps",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "whirlpoolBump",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "CurrIndex",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Below"
                    },
                    {
                        "name": "Inside"
                    },
                    {
                        "name": "Above"
                    }
                ]
            }
        },
        {
            "name": "TickLabel",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Upper"
                    },
                    {
                        "name": "Lower"
                    }
                ]
            }
        },
        {
            "name": "Direction",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Left"
                    },
                    {
                        "name": "Right"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "InvalidEnum",
            "msg": "Enum value could not be converted"
        },
        {
            "code": 6001,
            "name": "InvalidStartTick",
            "msg": "Invalid start tick index provided."
        },
        {
            "code": 6002,
            "name": "TickArrayExistInPool",
            "msg": "Tick-array already exists in this whirlpool"
        },
        {
            "code": 6003,
            "name": "TickArrayIndexOutofBounds",
            "msg": "Attempt to search for a tick-array failed"
        },
        {
            "code": 6004,
            "name": "InvalidTickSpacing",
            "msg": "Tick-spacing is not supported"
        },
        {
            "code": 6005,
            "name": "ClosePositionNotEmpty",
            "msg": "Position is not empty It cannot be closed"
        },
        {
            "code": 6006,
            "name": "DivideByZero",
            "msg": "Unable to divide by zero"
        },
        {
            "code": 6007,
            "name": "NumberCastError",
            "msg": "Unable to cast number into BigInt"
        },
        {
            "code": 6008,
            "name": "NumberDownCastError",
            "msg": "Unable to down cast number"
        },
        {
            "code": 6009,
            "name": "TickNotFound",
            "msg": "Tick not found within tick array"
        },
        {
            "code": 6010,
            "name": "InvalidTickIndex",
            "msg": "Provided tick index is either out of bounds or uninitializable"
        },
        {
            "code": 6011,
            "name": "SqrtPriceOutOfBounds",
            "msg": "Provided sqrt price out of bounds"
        },
        {
            "code": 6012,
            "name": "LiquidityZero",
            "msg": "Liquidity amount must be greater than zero"
        },
        {
            "code": 6013,
            "name": "LiquidityTooHigh",
            "msg": "Liquidity amount must be less than i64::MAX"
        },
        {
            "code": 6014,
            "name": "LiquidityOverflow",
            "msg": "Liquidity overflow"
        },
        {
            "code": 6015,
            "name": "LiquidityUnderflow",
            "msg": "Liquidity underflow"
        },
        {
            "code": 6016,
            "name": "LiquidityNetError",
            "msg": "Tick liquidity net underflowed or overflowed"
        },
        {
            "code": 6017,
            "name": "TokenMaxExceeded",
            "msg": "Exceeded token max"
        },
        {
            "code": 6018,
            "name": "TokenMinSubceeded",
            "msg": "Did not meet token min"
        },
        {
            "code": 6019,
            "name": "MissingOrInvalidDelegate",
            "msg": "Position token account has a missing or invalid delegate"
        },
        {
            "code": 6020,
            "name": "InvalidPositionTokenAmount",
            "msg": "Position token amount must be 1"
        },
        {
            "code": 6021,
            "name": "InvalidTimestampConversion",
            "msg": "Timestamp should be convertible from i64 to u64"
        },
        {
            "code": 6022,
            "name": "InvalidTimestamp",
            "msg": "Timestamp should be greater than the last updated timestamp"
        },
        {
            "code": 6023,
            "name": "InvalidTickArraySequence",
            "msg": "Invalid tick array sequence provided for instruction."
        },
        {
            "code": 6024,
            "name": "InvalidTokenMintOrder",
            "msg": "Token Mint in wrong order"
        },
        {
            "code": 6025,
            "name": "RewardNotInitialized",
            "msg": "Reward not initialized"
        },
        {
            "code": 6026,
            "name": "InvalidRewardIndex",
            "msg": "Invalid reward index"
        },
        {
            "code": 6027,
            "name": "RewardVaultAmountInsufficient",
            "msg": "Reward vault requires amount to support emissions for at least one day"
        },
        {
            "code": 6028,
            "name": "FeeRateMaxExceeded",
            "msg": "Exceeded max fee rate"
        },
        {
            "code": 6029,
            "name": "ProtocolFeeRateMaxExceeded",
            "msg": "Exceeded max protocol fee rate"
        },
        {
            "code": 6030,
            "name": "MultiplicationShiftRightOverflow",
            "msg": "Multiplication with shift right overflow"
        },
        {
            "code": 6031,
            "name": "MulDivOverflow",
            "msg": "Muldiv overflow"
        },
        {
            "code": 6032,
            "name": "MulDivInvalidInput",
            "msg": "Invalid div_u256 input"
        },
        {
            "code": 6033,
            "name": "MultiplicationOverflow",
            "msg": "Multiplication overflow"
        },
        {
            "code": 6034,
            "name": "InvalidSqrtPriceLimitDirection",
            "msg": "Provided SqrtPriceLimit not in the same direction as the swap."
        },
        {
            "code": 6035,
            "name": "ZeroTradableAmount",
            "msg": "There are no tradable amount to swap."
        },
        {
            "code": 6036,
            "name": "AmountOutBelowMinimum",
            "msg": "Amount out below minimum threshold"
        },
        {
            "code": 6037,
            "name": "AmountInAboveMaximum",
            "msg": "Amount in above maximum threshold"
        },
        {
            "code": 6038,
            "name": "TickArraySequenceInvalidIndex",
            "msg": "Invalid index for tick array sequence"
        },
        {
            "code": 6039,
            "name": "AmountCalcOverflow",
            "msg": "Amount calculated overflows"
        },
        {
            "code": 6040,
            "name": "AmountRemainingOverflow",
            "msg": "Amount remaining overflows"
        },
        {
            "code": 6041,
            "name": "PoolWasDisabled",
            "msg": "Pool was disabled"
        },
        {
            "code": 6042,
            "name": "InvalidIntermediaryMint",
            "msg": "Invalid intermediary mint"
        },
        {
            "code": 6043,
            "name": "DuplicateTwoHopPool",
            "msg": "Duplicate two hop pool"
        }
    ]
}
