[
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "bunniHub_",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [],
        "name": "FeeOverrideHooklet__InvalidSwapFee",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "FeeOverrideHooklet__NotBunniTokenOwner",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "PoolId",
                "name": "id",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "overrideZeroToOne",
                "type": "bool"
            },
            {
                "indexed": false,
                "internalType": "uint24",
                "name": "feeZeroToOne",
                "type": "uint24"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "overrideOneToZero",
                "type": "bool"
            },
            {
                "indexed": false,
                "internalType": "uint24",
                "name": "feeOneToZero",
                "type": "uint24"
            }
        ],
        "name": "SetFeeOverride",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "refundRecipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "referrer",
                        "type": "address"
                    }
                ],
                "internalType": "struct IBunniHub.DepositParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.DepositReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterDeposit",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "refundRecipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "referrer",
                        "type": "address"
                    }
                ],
                "internalType": "struct IBunniHub.DepositParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.DepositReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterDepositView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "twapSecondsAgo",
                        "type": "uint24"
                    },
                    {
                        "internalType": "contract ILiquidityDensityFunction",
                        "name": "liquidityDensityFunction",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IHooklet",
                        "name": "hooklet",
                        "type": "address"
                    },
                    {
                        "internalType": "enum LDFType",
                        "name": "ldfType",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "ldfParams",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "contract IBunniHook",
                        "name": "hooks",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookParams",
                        "type": "bytes"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault0",
                        "type": "address"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceX96",
                        "type": "uint160"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "name",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "symbol",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "address",
                        "name": "owner",
                        "type": "address"
                    },
                    {
                        "internalType": "string",
                        "name": "metadataURI",
                        "type": "string"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "salt",
                        "type": "bytes32"
                    }
                ],
                "internalType": "struct IBunniHub.DeployBunniTokenParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "contract IBunniToken",
                        "name": "bunniToken",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "key",
                        "type": "tuple"
                    }
                ],
                "internalType": "struct IHooklet.InitializeReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterInitialize",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "",
                "type": "tuple"
            },
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "afterRebalance",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "int256",
                        "name": "amountSpecified",
                        "type": "int256"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceLimitX96",
                        "type": "uint160"
                    }
                ],
                "internalType": "struct IPoolManager.SwapParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint160",
                        "name": "updatedSqrtPriceX96",
                        "type": "uint160"
                    },
                    {
                        "internalType": "int24",
                        "name": "updatedTick",
                        "type": "int24"
                    },
                    {
                        "internalType": "uint256",
                        "name": "inputAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "outputAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint24",
                        "name": "swapFee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint256",
                        "name": "totalLiquidity",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.SwapReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterSwap",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "int256",
                        "name": "amountSpecified",
                        "type": "int256"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceLimitX96",
                        "type": "uint160"
                    }
                ],
                "internalType": "struct IPoolManager.SwapParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint160",
                        "name": "updatedSqrtPriceX96",
                        "type": "uint160"
                    },
                    {
                        "internalType": "int24",
                        "name": "updatedTick",
                        "type": "int24"
                    },
                    {
                        "internalType": "uint256",
                        "name": "inputAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "outputAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint24",
                        "name": "swapFee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint256",
                        "name": "totalLiquidity",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.SwapReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterSwapView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "",
                "type": "tuple"
            },
            {
                "internalType": "contract IBunniToken",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "afterTransfer",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "useQueuedWithdrawal",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IBunniHub.WithdrawParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "amount0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.WithdrawReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterWithdraw",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "useQueuedWithdrawal",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IBunniHub.WithdrawParams",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "amount0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IHooklet.WithdrawReturnData",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "afterWithdrawView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "refundRecipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "referrer",
                        "type": "address"
                    }
                ],
                "internalType": "struct IBunniHub.DepositParams",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "beforeDeposit",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "refundRecipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "referrer",
                        "type": "address"
                    }
                ],
                "internalType": "struct IBunniHub.DepositParams",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "beforeDepositView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "twapSecondsAgo",
                        "type": "uint24"
                    },
                    {
                        "internalType": "contract ILiquidityDensityFunction",
                        "name": "liquidityDensityFunction",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IHooklet",
                        "name": "hooklet",
                        "type": "address"
                    },
                    {
                        "internalType": "enum LDFType",
                        "name": "ldfType",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "ldfParams",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "contract IBunniHook",
                        "name": "hooks",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookParams",
                        "type": "bytes"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault0",
                        "type": "address"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceX96",
                        "type": "uint160"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "name",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "symbol",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "address",
                        "name": "owner",
                        "type": "address"
                    },
                    {
                        "internalType": "string",
                        "name": "metadataURI",
                        "type": "string"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "salt",
                        "type": "bytes32"
                    }
                ],
                "internalType": "struct IBunniHub.DeployBunniTokenParams",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "beforeInitialize",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "key",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "int256",
                        "name": "amountSpecified",
                        "type": "int256"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceLimitX96",
                        "type": "uint160"
                    }
                ],
                "internalType": "struct IPoolManager.SwapParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "beforeSwap",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            },
            {
                "internalType": "bool",
                "name": "feeOverriden",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "fee",
                "type": "uint24"
            },
            {
                "internalType": "bool",
                "name": "priceOverridden",
                "type": "bool"
            },
            {
                "internalType": "uint160",
                "name": "sqrtPriceX96",
                "type": "uint160"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "key",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "int256",
                        "name": "amountSpecified",
                        "type": "int256"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceLimitX96",
                        "type": "uint160"
                    }
                ],
                "internalType": "struct IPoolManager.SwapParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "beforeSwapView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            },
            {
                "internalType": "bool",
                "name": "feeOverriden",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "fee",
                "type": "uint24"
            },
            {
                "internalType": "bool",
                "name": "priceOverridden",
                "type": "bool"
            },
            {
                "internalType": "uint160",
                "name": "sqrtPriceX96",
                "type": "uint160"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "fee",
                        "type": "uint24"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "contract IHooks",
                        "name": "hooks",
                        "type": "address"
                    }
                ],
                "internalType": "struct PoolKey",
                "name": "",
                "type": "tuple"
            },
            {
                "internalType": "contract IBunniToken",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "beforeTransfer",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "useQueuedWithdrawal",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IBunniHub.WithdrawParams",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "beforeWithdraw",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "useQueuedWithdrawal",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IBunniHub.WithdrawParams",
                "name": "",
                "type": "tuple"
            }
        ],
        "name": "beforeWithdrawView",
        "outputs": [
            {
                "internalType": "bytes4",
                "name": "selector",
                "type": "bytes4"
            }
        ],
        "stateMutability": "pure",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "bunniHub",
        "outputs": [
            {
                "internalType": "contract IBunniHub",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "",
                "type": "bytes32"
            }
        ],
        "name": "feeOverrides",
        "outputs": [
            {
                "internalType": "bool",
                "name": "overrideZeroToOne",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "feeZeroToOne",
                "type": "uint24"
            },
            {
                "internalType": "bool",
                "name": "overrideOneToZero",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "feeOneToZero",
                "type": "uint24"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "id",
                "type": "bytes32"
            },
            {
                "internalType": "bool",
                "name": "overrideZeroToOne",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "feeZeroToOne",
                "type": "uint24"
            },
            {
                "internalType": "bool",
                "name": "overrideOneToZero",
                "type": "bool"
            },
            {
                "internalType": "uint24",
                "name": "feeOneToZero",
                "type": "uint24"
            }
        ],
        "name": "setFeeOverride",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
