{
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISwapRouter.ExactInputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISwapRouter.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISwapRouter.ExactOutputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISwapRouter.ExactOutputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "uniswapV3SwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "exactInput((bytes,address,uint256,uint256,uint256))": "c04b8d59",
    "exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": "414bf389",
    "exactOutput((bytes,address,uint256,uint256,uint256))": "f28c0498",
    "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": "db3e2198",
    "uniswapV3SwapCallback(int256,int256,bytes)": "fa461e33"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ISwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ISwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ISwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ISwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV3SwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"exactInput((bytes,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"uniswapV3SwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IUniswapV3PoolActions#swap call\"}}},\"title\":\"Router token swapping functionality\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"exactInput((bytes,address,uint256,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token\"},\"uniswapV3SwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.\"}},\"notice\":\"Functions for swapping tokens via Uniswap V3\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol\":\"ISwapRouter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib_uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol\":{\"keccak256\":\"0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652\",\"dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol\":{\"keccak256\":\"0x9bfaf1feb32814623e627ab70f2409760b15d95f1f9b058e2b3399a8bb732975\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a8a2c3e55965b61bcd91993d8e1d5d34b8b8a63e0fdfce87a85f6af92526fd53\",\"dweb:/ipfs/QmQj2CSCSwqDSU4KMNWxGsN2336Cy64WgpV1X1EHXNZWxM\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.22+commit.4fc1097e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "struct ISwapRouter.ExactInputParams",
              "name": "params",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMinimum",
                  "type": "uint256"
                }
              ]
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "exactInput",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct ISwapRouter.ExactInputSingleParams",
              "name": "params",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ]
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "exactInputSingle",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct ISwapRouter.ExactOutputParams",
              "name": "params",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMaximum",
                  "type": "uint256"
                }
              ]
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "exactOutput",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct ISwapRouter.ExactOutputSingleParams",
              "name": "params",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMaximum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ]
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "exactOutputSingle",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "int256",
              "name": "amount0Delta",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "amount1Delta",
              "type": "int256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "uniswapV3SwapCallback"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "exactInput((bytes,address,uint256,uint256,uint256))": {
            "params": {
              "params": "The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata"
            },
            "returns": {
              "amountOut": "The amount of the received token"
            }
          },
          "exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": {
            "params": {
              "params": "The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata"
            },
            "returns": {
              "amountOut": "The amount of the received token"
            }
          },
          "exactOutput((bytes,address,uint256,uint256,uint256))": {
            "params": {
              "params": "The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata"
            },
            "returns": {
              "amountIn": "The amount of the input token"
            }
          },
          "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": {
            "params": {
              "params": "The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata"
            },
            "returns": {
              "amountIn": "The amount of the input token"
            }
          },
          "uniswapV3SwapCallback(int256,int256,bytes)": {
            "details": "In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.",
            "params": {
              "amount0Delta": "The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.",
              "amount1Delta": "The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.",
              "data": "Any data passed through by the caller via the IUniswapV3PoolActions#swap call"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "exactInput((bytes,address,uint256,uint256,uint256))": {
            "notice": "Swaps `amountIn` of one token for as much as possible of another along the specified path"
          },
          "exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": {
            "notice": "Swaps `amountIn` of one token for as much as possible of another token"
          },
          "exactOutput((bytes,address,uint256,uint256,uint256))": {
            "notice": "Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)"
          },
          "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": {
            "notice": "Swaps as little as possible of one token for `amountOut` of another token"
          },
          "uniswapV3SwapCallback(int256,int256,bytes)": {
            "notice": "Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@uniswap/v3-core/=lib_uniswap/v3-core/",
        "@uniswap/v3-periphery/=lib_uniswap/v3-periphery/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "v3-core/=lib_uniswap/v3-core/",
        "v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/"
      ],
      "optimizer": {
        "runs": 999999999,
        "details": {
          "peephole": true,
          "inliner": true,
          "jumpdestRemover": true,
          "orderLiterals": true,
          "deduplicate": true,
          "cse": true,
          "constantOptimizer": true,
          "yul": true,
          "yulDetails": {
            "stackAllocation": true,
            "optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu"
          }
        }
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol": "ISwapRouter"
      },
      "libraries": {}
    },
    "sources": {
      "lib_uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol": {
        "keccak256": "0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69",
        "urls": [
          "bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652",
          "dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol": {
        "keccak256": "0x9bfaf1feb32814623e627ab70f2409760b15d95f1f9b058e2b3399a8bb732975",
        "urls": [
          "bzz-raw://a8a2c3e55965b61bcd91993d8e1d5d34b8b8a63e0fdfce87a85f6af92526fd53",
          "dweb:/ipfs/QmQj2CSCSwqDSU4KMNWxGsN2336Cy64WgpV1X1EHXNZWxM"
        ],
        "license": "GPL-2.0-or-later"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol",
    "id": 45455,
    "exportedSymbols": {
      "ISwapRouter": [
        45454
      ],
      "IUniswapV3SwapCallback": [
        43908
      ]
    },
    "nodeType": "SourceUnit",
    "src": "45:2675:44",
    "nodes": [
      {
        "id": 45356,
        "nodeType": "PragmaDirective",
        "src": "45:24:44",
        "nodes": [],
        "literals": [
          "solidity",
          ">=",
          "0.7",
          ".5"
        ]
      },
      {
        "id": 45357,
        "nodeType": "PragmaDirective",
        "src": "70:19:44",
        "nodes": [],
        "literals": [
          "abicoder",
          "v2"
        ]
      },
      {
        "id": 45358,
        "nodeType": "ImportDirective",
        "src": "91:83:44",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 45455,
        "sourceUnit": 43909,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 45454,
        "nodeType": "ContractDefinition",
        "src": "280:2439:44",
        "nodes": [
          {
            "id": 45378,
            "nodeType": "StructDefinition",
            "src": "334:256:44",
            "nodes": [],
            "canonicalName": "ISwapRouter.ExactInputSingleParams",
            "members": [
              {
                "constant": false,
                "id": 45363,
                "mutability": "mutable",
                "name": "tokenIn",
                "nameLocation": "382:7:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "374:15:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45362,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "374:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45365,
                "mutability": "mutable",
                "name": "tokenOut",
                "nameLocation": "407:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "399:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45364,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "399:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45367,
                "mutability": "mutable",
                "name": "fee",
                "nameLocation": "432:3:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "425:10:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint24",
                  "typeString": "uint24"
                },
                "typeName": {
                  "id": 45366,
                  "name": "uint24",
                  "nodeType": "ElementaryTypeName",
                  "src": "425:6:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45369,
                "mutability": "mutable",
                "name": "recipient",
                "nameLocation": "453:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "445:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45368,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "445:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45371,
                "mutability": "mutable",
                "name": "deadline",
                "nameLocation": "480:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "472:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45370,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "472:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45373,
                "mutability": "mutable",
                "name": "amountIn",
                "nameLocation": "506:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "498:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45372,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "498:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45375,
                "mutability": "mutable",
                "name": "amountOutMinimum",
                "nameLocation": "532:16:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "524:24:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45374,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "524:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45377,
                "mutability": "mutable",
                "name": "sqrtPriceLimitX96",
                "nameLocation": "566:17:44",
                "nodeType": "VariableDeclaration",
                "scope": 45378,
                "src": "558:25:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint160",
                  "typeString": "uint160"
                },
                "typeName": {
                  "id": 45376,
                  "name": "uint160",
                  "nodeType": "ElementaryTypeName",
                  "src": "558:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExactInputSingleParams",
            "nameLocation": "341:22:44",
            "scope": 45454,
            "visibility": "public"
          },
          {
            "id": 45387,
            "nodeType": "FunctionDefinition",
            "src": "851:111:44",
            "nodes": [],
            "documentation": {
              "id": 45379,
              "nodeType": "StructuredDocumentation",
              "src": "596:250:44",
              "text": "@notice Swaps `amountIn` of one token for as much as possible of another token\n @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\n @return amountOut The amount of the received token"
            },
            "functionSelector": "414bf389",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exactInputSingle",
            "nameLocation": "860:16:44",
            "parameters": {
              "id": 45383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45382,
                  "mutability": "mutable",
                  "name": "params",
                  "nameLocation": "909:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45387,
                  "src": "877:38:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_calldata_ptr",
                    "typeString": "struct ISwapRouter.ExactInputSingleParams"
                  },
                  "typeName": {
                    "id": 45381,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45380,
                      "name": "ExactInputSingleParams",
                      "nameLocations": [
                        "877:22:44"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45378,
                      "src": "877:22:44"
                    },
                    "referencedDeclaration": 45378,
                    "src": "877:22:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_storage_ptr",
                      "typeString": "struct ISwapRouter.ExactInputSingleParams"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "876:40:44"
            },
            "returnParameters": {
              "id": 45386,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45385,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nameLocation": "951:9:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45387,
                  "src": "943:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 45384,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "943:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "942:19:44"
            },
            "scope": 45454,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 45398,
            "nodeType": "StructDefinition",
            "src": "968:164:44",
            "nodes": [],
            "canonicalName": "ISwapRouter.ExactInputParams",
            "members": [
              {
                "constant": false,
                "id": 45389,
                "mutability": "mutable",
                "name": "path",
                "nameLocation": "1008:4:44",
                "nodeType": "VariableDeclaration",
                "scope": 45398,
                "src": "1002:10:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 45388,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "1002:5:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45391,
                "mutability": "mutable",
                "name": "recipient",
                "nameLocation": "1030:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45398,
                "src": "1022:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45390,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1022:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45393,
                "mutability": "mutable",
                "name": "deadline",
                "nameLocation": "1057:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45398,
                "src": "1049:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45392,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1049:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45395,
                "mutability": "mutable",
                "name": "amountIn",
                "nameLocation": "1083:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45398,
                "src": "1075:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45394,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1075:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45397,
                "mutability": "mutable",
                "name": "amountOutMinimum",
                "nameLocation": "1109:16:44",
                "nodeType": "VariableDeclaration",
                "scope": 45398,
                "src": "1101:24:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45396,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1101:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExactInputParams",
            "nameLocation": "975:16:44",
            "scope": 45454,
            "visibility": "public"
          },
          {
            "id": 45407,
            "nodeType": "FunctionDefinition",
            "src": "1416:99:44",
            "nodes": [],
            "documentation": {
              "id": 45399,
              "nodeType": "StructuredDocumentation",
              "src": "1138:273:44",
              "text": "@notice Swaps `amountIn` of one token for as much as possible of another along the specified path\n @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\n @return amountOut The amount of the received token"
            },
            "functionSelector": "c04b8d59",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exactInput",
            "nameLocation": "1425:10:44",
            "parameters": {
              "id": 45403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45402,
                  "mutability": "mutable",
                  "name": "params",
                  "nameLocation": "1462:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45407,
                  "src": "1436:32:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExactInputParams_$45398_calldata_ptr",
                    "typeString": "struct ISwapRouter.ExactInputParams"
                  },
                  "typeName": {
                    "id": 45401,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45400,
                      "name": "ExactInputParams",
                      "nameLocations": [
                        "1436:16:44"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45398,
                      "src": "1436:16:44"
                    },
                    "referencedDeclaration": 45398,
                    "src": "1436:16:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExactInputParams_$45398_storage_ptr",
                      "typeString": "struct ISwapRouter.ExactInputParams"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1435:34:44"
            },
            "returnParameters": {
              "id": 45406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45405,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nameLocation": "1504:9:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45407,
                  "src": "1496:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 45404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1496:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1495:19:44"
            },
            "scope": 45454,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 45424,
            "nodeType": "StructDefinition",
            "src": "1521:257:44",
            "nodes": [],
            "canonicalName": "ISwapRouter.ExactOutputSingleParams",
            "members": [
              {
                "constant": false,
                "id": 45409,
                "mutability": "mutable",
                "name": "tokenIn",
                "nameLocation": "1570:7:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1562:15:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45408,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1562:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45411,
                "mutability": "mutable",
                "name": "tokenOut",
                "nameLocation": "1595:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1587:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45410,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1587:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45413,
                "mutability": "mutable",
                "name": "fee",
                "nameLocation": "1620:3:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1613:10:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint24",
                  "typeString": "uint24"
                },
                "typeName": {
                  "id": 45412,
                  "name": "uint24",
                  "nodeType": "ElementaryTypeName",
                  "src": "1613:6:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45415,
                "mutability": "mutable",
                "name": "recipient",
                "nameLocation": "1641:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1633:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45414,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1633:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45417,
                "mutability": "mutable",
                "name": "deadline",
                "nameLocation": "1668:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1660:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45416,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1660:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45419,
                "mutability": "mutable",
                "name": "amountOut",
                "nameLocation": "1694:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1686:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45418,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1686:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45421,
                "mutability": "mutable",
                "name": "amountInMaximum",
                "nameLocation": "1721:15:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1713:23:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45420,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1713:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45423,
                "mutability": "mutable",
                "name": "sqrtPriceLimitX96",
                "nameLocation": "1754:17:44",
                "nodeType": "VariableDeclaration",
                "scope": 45424,
                "src": "1746:25:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint160",
                  "typeString": "uint160"
                },
                "typeName": {
                  "id": 45422,
                  "name": "uint160",
                  "nodeType": "ElementaryTypeName",
                  "src": "1746:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExactOutputSingleParams",
            "nameLocation": "1528:23:44",
            "scope": 45454,
            "visibility": "public"
          },
          {
            "id": 45433,
            "nodeType": "FunctionDefinition",
            "src": "2039:112:44",
            "nodes": [],
            "documentation": {
              "id": 45425,
              "nodeType": "StructuredDocumentation",
              "src": "1784:250:44",
              "text": "@notice Swaps as little as possible of one token for `amountOut` of another token\n @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\n @return amountIn The amount of the input token"
            },
            "functionSelector": "db3e2198",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exactOutputSingle",
            "nameLocation": "2048:17:44",
            "parameters": {
              "id": 45429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45428,
                  "mutability": "mutable",
                  "name": "params",
                  "nameLocation": "2099:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45433,
                  "src": "2066:39:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExactOutputSingleParams_$45424_calldata_ptr",
                    "typeString": "struct ISwapRouter.ExactOutputSingleParams"
                  },
                  "typeName": {
                    "id": 45427,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45426,
                      "name": "ExactOutputSingleParams",
                      "nameLocations": [
                        "2066:23:44"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45424,
                      "src": "2066:23:44"
                    },
                    "referencedDeclaration": 45424,
                    "src": "2066:23:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExactOutputSingleParams_$45424_storage_ptr",
                      "typeString": "struct ISwapRouter.ExactOutputSingleParams"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2065:41:44"
            },
            "returnParameters": {
              "id": 45432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45431,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nameLocation": "2141:8:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45433,
                  "src": "2133:16:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 45430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2133:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2132:18:44"
            },
            "scope": 45454,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 45444,
            "nodeType": "StructDefinition",
            "src": "2157:165:44",
            "nodes": [],
            "canonicalName": "ISwapRouter.ExactOutputParams",
            "members": [
              {
                "constant": false,
                "id": 45435,
                "mutability": "mutable",
                "name": "path",
                "nameLocation": "2198:4:44",
                "nodeType": "VariableDeclaration",
                "scope": 45444,
                "src": "2192:10:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 45434,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "2192:5:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45437,
                "mutability": "mutable",
                "name": "recipient",
                "nameLocation": "2220:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45444,
                "src": "2212:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45436,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2212:7:44",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45439,
                "mutability": "mutable",
                "name": "deadline",
                "nameLocation": "2247:8:44",
                "nodeType": "VariableDeclaration",
                "scope": 45444,
                "src": "2239:16:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45438,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2239:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45441,
                "mutability": "mutable",
                "name": "amountOut",
                "nameLocation": "2273:9:44",
                "nodeType": "VariableDeclaration",
                "scope": 45444,
                "src": "2265:17:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45440,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2265:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45443,
                "mutability": "mutable",
                "name": "amountInMaximum",
                "nameLocation": "2300:15:44",
                "nodeType": "VariableDeclaration",
                "scope": 45444,
                "src": "2292:23:44",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 45442,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2292:7:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExactOutputParams",
            "nameLocation": "2164:17:44",
            "scope": 45454,
            "visibility": "public"
          },
          {
            "id": 45453,
            "nodeType": "FunctionDefinition",
            "src": "2617:100:44",
            "nodes": [],
            "documentation": {
              "id": 45445,
              "nodeType": "StructuredDocumentation",
              "src": "2328:284:44",
              "text": "@notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)\n @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\n @return amountIn The amount of the input token"
            },
            "functionSelector": "f28c0498",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exactOutput",
            "nameLocation": "2626:11:44",
            "parameters": {
              "id": 45449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45448,
                  "mutability": "mutable",
                  "name": "params",
                  "nameLocation": "2665:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45453,
                  "src": "2638:33:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExactOutputParams_$45444_calldata_ptr",
                    "typeString": "struct ISwapRouter.ExactOutputParams"
                  },
                  "typeName": {
                    "id": 45447,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45446,
                      "name": "ExactOutputParams",
                      "nameLocations": [
                        "2638:17:44"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45444,
                      "src": "2638:17:44"
                    },
                    "referencedDeclaration": 45444,
                    "src": "2638:17:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExactOutputParams_$45444_storage_ptr",
                      "typeString": "struct ISwapRouter.ExactOutputParams"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2637:35:44"
            },
            "returnParameters": {
              "id": 45452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45451,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nameLocation": "2707:8:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 45453,
                  "src": "2699:16:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 45450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2699:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2698:18:44"
            },
            "scope": 45454,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 45360,
              "name": "IUniswapV3SwapCallback",
              "nameLocations": [
                "305:22:44"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 43908,
              "src": "305:22:44"
            },
            "id": 45361,
            "nodeType": "InheritanceSpecifier",
            "src": "305:22:44"
          }
        ],
        "canonicalName": "ISwapRouter",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 45359,
          "nodeType": "StructuredDocumentation",
          "src": "176:104:44",
          "text": "@title Router token swapping functionality\n @notice Functions for swapping tokens via Uniswap V3"
        },
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          45454,
          43908
        ],
        "name": "ISwapRouter",
        "nameLocation": "290:11:44",
        "scope": 45455,
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "license": "GPL-2.0-or-later"
  },
  "id": 44
}