{
  "id": "d27ce91b6b49505274941202099b8dec",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.10",
  "solcLongVersion": "0.6.10+commit.00c0fcaf",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/interfaces/external/IGaugeController.sol": {
        "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache License, Version 2.0\n*/\n\npragma solidity 0.6.10;\n\ninterface IGaugeController {\n    function gauge_types(address _gauge) external view returns (int128);\n}\n"
      },
      "contracts/protocol/integration/staking/CurveStakingAdapter.sol": {
        "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache License, Version 2.0\n*/\n\npragma solidity 0.6.10;\n\nimport { IGaugeController } from \"../../../interfaces/external/IGaugeController.sol\";\n\n/**\n * @title CurveStakingAdapter\n * @author Set Protocol\n *\n * Staking adapter for Curve that returns data to stake/unstake tokens\n */\ncontract CurveStakingAdapter {\n\n    /* ============ State Variables ============ */\n\n    // Address of the gauge controller\n    IGaugeController public immutable gaugeController;\n\n    /* ============ Constructor ============ */\n\n    /**\n     * Set state variables\n     *\n     * @param _gaugeController     Address of Gauge Controller\n     */\n    constructor(IGaugeController _gaugeController) public {\n        gaugeController = _gaugeController;\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * Generates the calldata to stake lp tokens in the staking contract\n     *\n     * @param _stakingContract          Address of the gauge staking contract\n     * @param _notionalAmount           Quantity of token to stake\n     *\n     * @return address                  Target address\n     * @return uint256                  Call value\n     * @return bytes                    Stake tokens calldata\n     */\n    function getStakeCallData(\n        address _stakingContract,\n        uint256 _notionalAmount\n    )\n    external\n    view\n    returns(address, uint256, bytes memory) {\n        require(_isValidStakingContract(_stakingContract), \"Invalid staking contract\");\n        bytes memory callData = abi.encodeWithSignature(\"deposit(uint256)\", _notionalAmount);\n        return (_stakingContract, 0, callData);\n    }\n\n    /**\n     * Generates the calldata to unstake lp tokens from the staking contract\n     *\n     * @param _stakingContract          Address of the gauge staking contract\n     * @param _notionalAmount           Quantity of token to stake\n     *\n     * @return address                  Target address\n     * @return uint256                  Call value\n     * @return bytes                    Unstake tokens calldata\n     */\n    function getUnstakeCallData(\n        address _stakingContract,\n        uint256 _notionalAmount\n    )\n    external\n    view\n    returns(address, uint256, bytes memory) {\n        require(_isValidStakingContract(_stakingContract), \"Invalid staking contract\");\n        bytes memory callData = abi.encodeWithSignature(\"withdraw(uint256)\", _notionalAmount);\n        return (_stakingContract, 0, callData);\n    }\n\n    /**\n     * Returns the address to approve component for staking tokens.\n     *\n     * @param _stakingContract          Address of the gauge staking contract\n     *\n     * @return address                  Address of the contract to approve tokens transfers to\n     */\n    function getSpenderAddress(address _stakingContract) external pure returns(address) {\n        return _stakingContract;\n    }\n\n    /**\n     * Validates that the staking contract is registered in the gauge controller\n     *\n     * @param _stakingContract          Address of the gauge staking contract\n     *\n     * @return bool                     Whether or not the staking contract is valid\n     */\n    function _isValidStakingContract(address _stakingContract) internal view returns (bool) {\n        // If the gauge address is not defined in the gaugeController, gauge_types will revert.\n        // Otherwise returns the value.\n        // Here we catch the revert and return false to revert with a proper error message\n        try gaugeController.gauge_types(_stakingContract) {\n            return true;\n        } catch {\n            return false;\n        }\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/interfaces/external/IGaugeController.sol": {
        "IGaugeController": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_gauge",
                  "type": "address"
                }
              ],
              "name": "gauge_types",
              "outputs": [
                {
                  "internalType": "int128",
                  "name": "",
                  "type": "int128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "gauge_types(address)": "3f9095b7"
            }
          }
        }
      },
      "contracts/protocol/integration/staking/CurveStakingAdapter.sol": {
        "CurveStakingAdapter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "contract IGaugeController",
                  "name": "_gaugeController",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "gaugeController",
              "outputs": [
                {
                  "internalType": "contract IGaugeController",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_stakingContract",
                  "type": "address"
                }
              ],
              "name": "getSpenderAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_stakingContract",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_notionalAmount",
                  "type": "uint256"
                }
              ],
              "name": "getStakeCallData",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_stakingContract",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_notionalAmount",
                  "type": "uint256"
                }
              ],
              "name": "getUnstakeCallData",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b506040516104413803806104418339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b03166103d561006c600039806102ca52806102f052506103d56000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d697603146100515780630e8edd86146101155780639971c1651461015757806399eecb3b14610183575b600080fd5b61007d6004803603604081101561006757600080fd5b506001600160a01b03813516906020013561018b565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156100d85781810151838201526020016100c0565b50505050905090810190601f1680156101055780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61013b6004803603602081101561012b57600080fd5b50356001600160a01b0316610226565b604080516001600160a01b039092168252519081900360200190f35b61007d6004803603604081101561016d57600080fd5b506001600160a01b03813516906020013561022d565b61013b6102c8565b6000806060610199856102ec565b6101e5576040805162461bcd60e51b8152602060048201526018602482015277125b9d985b1a59081cdd185ada5b99c818dbdb9d1c9858dd60421b604482015290519081900360640190fd5b505060408051602480820194909452815180820390940184526044019052506020810180516001600160e01b031663b6b55f2560e01b179052909160009190565b805b919050565b600080606061023b856102ec565b610287576040805162461bcd60e51b8152602060048201526018602482015277125b9d985b1a59081cdd185ada5b99c818dbdb9d1c9858dd60421b604482015290519081900360640190fd5b505060408051602480820194909452815180820390940184526044019052506020810180516001600160e01b0316632e1a7d4d60e01b179052909160009190565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633f9095b7836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561036457600080fd5b505afa92505050801561038957506040513d602081101561038457600080fd5b505160015b61039557506000610228565b506001905061022856fea264697066735822122076450764a990bd31f35d1a5047f7a83b85c3f5ad94ed680f384e38afbbe8716664736f6c634300060a0033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x441 CODESIZE SUB DUP1 PUSH2 0x441 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D5 PUSH2 0x6C PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2CA MSTORE DUP1 PUSH2 0x2F0 MSTORE POP PUSH2 0x3D5 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD697603 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xE8EDD86 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x9971C165 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x99EECB3B EQ PUSH2 0x183 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x105 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x226 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x7D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x22D JUMP JUMPDEST PUSH2 0x13B PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x199 DUP6 PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x1E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x125B9D985B1A59081CDD185ADA5B99C818DBDB9D1C9858DD PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x44 ADD SWAP1 MSTORE POP PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xB6B55F25 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 SWAP1 JUMP JUMPDEST DUP1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x23B DUP6 PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x287 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x125B9D985B1A59081CDD185ADA5B99C818DBDB9D1C9858DD PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x44 ADD SWAP1 MSTORE POP PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3F9095B7 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x389 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 JUMPDEST PUSH2 0x395 JUMPI POP PUSH1 0x0 PUSH2 0x228 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 POP PUSH2 0x228 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0x450764A990BD31F35D1A5047F7A83B85C3F5AD94ED680F CODESIZE 0x4E CODESIZE 0xAF 0xBB 0xE8 PUSH18 0x6664736F6C634300060A0033000000000000 ",
              "sourceMap": "903:3308:1:-:0;;;1249:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1249:105:1;1313:34;;;;-1:-1:-1;;;;;;1313:34:1;;;-1:-1:-1;;;;;903:3308:1;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "16": [
                  {
                    "length": 32,
                    "start": 714
                  },
                  {
                    "length": 32,
                    "start": 752
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d697603146100515780630e8edd86146101155780639971c1651461015757806399eecb3b14610183575b600080fd5b61007d6004803603604081101561006757600080fd5b506001600160a01b03813516906020013561018b565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156100d85781810151838201526020016100c0565b50505050905090810190601f1680156101055780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61013b6004803603602081101561012b57600080fd5b50356001600160a01b0316610226565b604080516001600160a01b039092168252519081900360200190f35b61007d6004803603604081101561016d57600080fd5b506001600160a01b03813516906020013561022d565b61013b6102c8565b6000806060610199856102ec565b6101e5576040805162461bcd60e51b8152602060048201526018602482015277125b9d985b1a59081cdd185ada5b99c818dbdb9d1c9858dd60421b604482015290519081900360640190fd5b505060408051602480820194909452815180820390940184526044019052506020810180516001600160e01b031663b6b55f2560e01b179052909160009190565b805b919050565b600080606061023b856102ec565b610287576040805162461bcd60e51b8152602060048201526018602482015277125b9d985b1a59081cdd185ada5b99c818dbdb9d1c9858dd60421b604482015290519081900360640190fd5b505060408051602480820194909452815180820390940184526044019052506020810180516001600160e01b0316632e1a7d4d60e01b179052909160009190565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633f9095b7836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561036457600080fd5b505afa92505050801561038957506040513d602081101561038457600080fd5b505160015b61039557506000610228565b506001905061022856fea264697066735822122076450764a990bd31f35d1a5047f7a83b85c3f5ad94ed680f384e38afbbe8716664736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD697603 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xE8EDD86 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x9971C165 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x99EECB3B EQ PUSH2 0x183 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x105 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x226 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x7D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x22D JUMP JUMPDEST PUSH2 0x13B PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x199 DUP6 PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x1E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x125B9D985B1A59081CDD185ADA5B99C818DBDB9D1C9858DD PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x44 ADD SWAP1 MSTORE POP PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xB6B55F25 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 SWAP1 JUMP JUMPDEST DUP1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x23B DUP6 PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x287 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x125B9D985B1A59081CDD185ADA5B99C818DBDB9D1C9858DD PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP1 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x44 ADD SWAP1 MSTORE POP PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3F9095B7 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x389 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 JUMPDEST PUSH2 0x395 JUMPI POP PUSH1 0x0 PUSH2 0x228 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 POP PUSH2 0x228 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0x450764A990BD31F35D1A5047F7A83B85C3F5AD94ED680F CODESIZE 0x4E CODESIZE 0xAF 0xBB 0xE8 PUSH18 0x6664736F6C634300060A0033000000000000 ",
              "sourceMap": "903:3308:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1832:402;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1832:402:1;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1832:402:1;-1:-1:-1;;;;;1832:402:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3344:124;;;;;;;;;;;;;;;;-1:-1:-1;3344:124:1;-1:-1:-1;;;;;3344:124:1;;:::i;:::-;;;;-1:-1:-1;;;;;3344:124:1;;;;;;;;;;;;;;2662:405;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2662:405:1;;;;;;;;:::i;1031:49::-;;;:::i;1832:402::-;1965:7;1974;1983:12;2015:41;2039:16;2015:23;:41::i;:::-;2007:78;;;;;-1:-1:-1;;;2007:78:1;;;;;;;;;;;;-1:-1:-1;;;2007:78:1;;;;;;;;;;;;;;;-1:-1:-1;;2119:60:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2119:60:1;;;;;-1:-1:-1;;;;;2119:60:1;-1:-1:-1;;;2119:60:1;;;2197:16;;-1:-1:-1;;2119:60:1;1832:402::o;3344:124::-;3445:16;3344:124;;;;:::o;2662:405::-;2797:7;2806;2815:12;2847:41;2871:16;2847:23;:41::i;:::-;2839:78;;;;;-1:-1:-1;;;2839:78:1;;;;;;;;;;;;-1:-1:-1;;;2839:78:1;;;;;;;;;;;;;;;-1:-1:-1;;2951:61:1;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2951:61:1;;;;;-1:-1:-1;;;;;2951:61:1;-1:-1:-1;;;2951:61:1;;;3030:16;;-1:-1:-1;;2951:61:1;2662:405::o;1031:49::-;;;:::o;3748:461::-;3830:4;4077:15;-1:-1:-1;;;;;4077:27:1;;4105:16;4077:45;;;;;;;;;;;;;-1:-1:-1;;;;;4077:45:1;-1:-1:-1;;;;;4077:45:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4077:45:1;;;4073:130;;-1:-1:-1;4187:5:1;4180:12;;4073:130;;4144:4;4137:11;;;"
            },
            "methodIdentifiers": {
              "gaugeController()": "99eecb3b",
              "getSpenderAddress(address)": "0e8edd86",
              "getStakeCallData(address,uint256)": "0d697603",
              "getUnstakeCallData(address,uint256)": "9971c165"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/interfaces/external/IGaugeController.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/external/IGaugeController.sol",
          "exportedSymbols": {
            "IGaugeController": [
              9
            ]
          },
          "id": 10,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "655:23:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 9,
              "linearizedBaseContracts": [
                9
              ],
              "name": "IGaugeController",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "3f9095b7",
                  "id": 8,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "gauge_types",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3,
                        "mutability": "mutable",
                        "name": "_gauge",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "734:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "733:16:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "773:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "773:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "772:8:0"
                  },
                  "scope": 9,
                  "src": "713:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10,
              "src": "680:103:0"
            }
          ],
          "src": "655:129:0"
        },
        "id": 0
      },
      "contracts/protocol/integration/staking/CurveStakingAdapter.sol": {
        "ast": {
          "absolutePath": "contracts/protocol/integration/staking/CurveStakingAdapter.sol",
          "exportedSymbols": {
            "CurveStakingAdapter": [
              131
            ]
          },
          "id": 132,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "655:23:1"
            },
            {
              "absolutePath": "contracts/interfaces/external/IGaugeController.sol",
              "file": "../../../interfaces/external/IGaugeController.sol",
              "id": 13,
              "nodeType": "ImportDirective",
              "scope": 132,
              "sourceUnit": 10,
              "src": "680:85:1",
              "symbolAliases": [
                {
                  "foreign": {
                    "argumentTypes": null,
                    "id": 12,
                    "name": "IGaugeController",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": null,
                    "src": "689:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": null,
                      "typeString": null
                    }
                  },
                  "local": null
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 14,
                "nodeType": "StructuredDocumentation",
                "src": "767:135:1",
                "text": " @title CurveStakingAdapter\n @author Set Protocol\n Staking adapter for Curve that returns data to stake/unstake tokens"
              },
              "fullyImplemented": true,
              "id": 131,
              "linearizedBaseContracts": [
                131
              ],
              "name": "CurveStakingAdapter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "99eecb3b",
                  "id": 16,
                  "mutability": "immutable",
                  "name": "gaugeController",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 131,
                  "src": "1031:49:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IGaugeController_$9",
                    "typeString": "contract IGaugeController"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 15,
                    "name": "IGaugeController",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9,
                    "src": "1031:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IGaugeController_$9",
                      "typeString": "contract IGaugeController"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 26,
                    "nodeType": "Block",
                    "src": "1303:51:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 22,
                            "name": "gaugeController",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "1313:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IGaugeController_$9",
                              "typeString": "contract IGaugeController"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 23,
                            "name": "_gaugeController",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19,
                            "src": "1331:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IGaugeController_$9",
                              "typeString": "contract IGaugeController"
                            }
                          },
                          "src": "1313:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IGaugeController_$9",
                            "typeString": "contract IGaugeController"
                          }
                        },
                        "id": 25,
                        "nodeType": "ExpressionStatement",
                        "src": "1313:34:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "1136:108:1",
                    "text": " Set state variables\n @param _gaugeController     Address of Gauge Controller"
                  },
                  "id": 27,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 20,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 19,
                        "mutability": "mutable",
                        "name": "_gaugeController",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 27,
                        "src": "1261:33:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IGaugeController_$9",
                          "typeString": "contract IGaugeController"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 18,
                          "name": "IGaugeController",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9,
                          "src": "1261:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IGaugeController_$9",
                            "typeString": "contract IGaugeController"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1260:35:1"
                  },
                  "returnParameters": {
                    "id": 21,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1303:0:1"
                  },
                  "scope": 131,
                  "src": "1249:105:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 61,
                    "nodeType": "Block",
                    "src": "1997:237:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 43,
                                  "name": "_stakingContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "2039:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 42,
                                "name": "_isValidStakingContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 130,
                                "src": "2015:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 44,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2015:41:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964207374616b696e6720636f6e7472616374",
                              "id": 45,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2058:26:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9a03c56c1e084ce4e98a827d43afc3f7f3d830558a655a43dce43583d895a3fa",
                                "typeString": "literal_string \"Invalid staking contract\""
                              },
                              "value": "Invalid staking contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9a03c56c1e084ce4e98a827d43afc3f7f3d830558a655a43dce43583d895a3fa",
                                "typeString": "literal_string \"Invalid staking contract\""
                              }
                            ],
                            "id": 41,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2007:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 46,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2007:78:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 47,
                        "nodeType": "ExpressionStatement",
                        "src": "2007:78:1"
                      },
                      {
                        "assignments": [
                          49
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 49,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 61,
                            "src": "2095:21:1",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 48,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2095:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 55,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "6465706f7369742875696e7432353629",
                              "id": 52,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2143:18:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b6b55f256c3eb337f96418d59e773db6e805074f5e574a2bebb7d71394043619",
                                "typeString": "literal_string \"deposit(uint256)\""
                              },
                              "value": "deposit(uint256)"
                            },
                            {
                              "argumentTypes": null,
                              "id": 53,
                              "name": "_notionalAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "2163:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_b6b55f256c3eb337f96418d59e773db6e805074f5e574a2bebb7d71394043619",
                                "typeString": "literal_string \"deposit(uint256)\""
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 50,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2119:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 51,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2119:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 54,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2119:60:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2095:84:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 56,
                              "name": "_stakingContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "2197:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 57,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2215:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 58,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49,
                              "src": "2218:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 59,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2196:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 40,
                        "id": 60,
                        "nodeType": "Return",
                        "src": "2189:38:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 28,
                    "nodeType": "StructuredDocumentation",
                    "src": "1416:411:1",
                    "text": " Generates the calldata to stake lp tokens in the staking contract\n @param _stakingContract          Address of the gauge staking contract\n @param _notionalAmount           Quantity of token to stake\n @return address                  Target address\n @return uint256                  Call value\n @return bytes                    Stake tokens calldata"
                  },
                  "functionSelector": "0d697603",
                  "id": 62,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getStakeCallData",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 33,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 30,
                        "mutability": "mutable",
                        "name": "_stakingContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 62,
                        "src": "1867:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 29,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1867:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 32,
                        "mutability": "mutable",
                        "name": "_notionalAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 62,
                        "src": "1901:23:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1901:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1857:73:1"
                  },
                  "returnParameters": {
                    "id": 40,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 35,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 62,
                        "src": "1965:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 34,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1965:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 37,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 62,
                        "src": "1974:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 36,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1974:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 39,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 62,
                        "src": "1983:12:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1983:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1964:32:1"
                  },
                  "scope": 131,
                  "src": "1832:402:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 96,
                    "nodeType": "Block",
                    "src": "2829:238:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 78,
                                  "name": "_stakingContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 65,
                                  "src": "2871:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 77,
                                "name": "_isValidStakingContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 130,
                                "src": "2847:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 79,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2847:41:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964207374616b696e6720636f6e7472616374",
                              "id": 80,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2890:26:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9a03c56c1e084ce4e98a827d43afc3f7f3d830558a655a43dce43583d895a3fa",
                                "typeString": "literal_string \"Invalid staking contract\""
                              },
                              "value": "Invalid staking contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9a03c56c1e084ce4e98a827d43afc3f7f3d830558a655a43dce43583d895a3fa",
                                "typeString": "literal_string \"Invalid staking contract\""
                              }
                            ],
                            "id": 76,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2839:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 81,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2839:78:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 82,
                        "nodeType": "ExpressionStatement",
                        "src": "2839:78:1"
                      },
                      {
                        "assignments": [
                          84
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 84,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 96,
                            "src": "2927:21:1",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 83,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2927:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 90,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "77697468647261772875696e7432353629",
                              "id": 87,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2975:19:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2e1a7d4d13322e7b96f9a57413e1525c250fb7a9021cf91d1540d5b69f16a49f",
                                "typeString": "literal_string \"withdraw(uint256)\""
                              },
                              "value": "withdraw(uint256)"
                            },
                            {
                              "argumentTypes": null,
                              "id": 88,
                              "name": "_notionalAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67,
                              "src": "2996:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_2e1a7d4d13322e7b96f9a57413e1525c250fb7a9021cf91d1540d5b69f16a49f",
                                "typeString": "literal_string \"withdraw(uint256)\""
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 85,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2951:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 86,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2951:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 89,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2951:61:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2927:85:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 91,
                              "name": "_stakingContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65,
                              "src": "3030:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 92,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3048:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 93,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 84,
                              "src": "3051:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 94,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3029:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 75,
                        "id": 95,
                        "nodeType": "Return",
                        "src": "3022:38:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 63,
                    "nodeType": "StructuredDocumentation",
                    "src": "2240:417:1",
                    "text": " Generates the calldata to unstake lp tokens from the staking contract\n @param _stakingContract          Address of the gauge staking contract\n @param _notionalAmount           Quantity of token to stake\n @return address                  Target address\n @return uint256                  Call value\n @return bytes                    Unstake tokens calldata"
                  },
                  "functionSelector": "9971c165",
                  "id": 97,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getUnstakeCallData",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 68,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 65,
                        "mutability": "mutable",
                        "name": "_stakingContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 97,
                        "src": "2699:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2699:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 67,
                        "mutability": "mutable",
                        "name": "_notionalAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 97,
                        "src": "2733:23:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 66,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2733:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2689:73:1"
                  },
                  "returnParameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 70,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 97,
                        "src": "2797:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2797:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 72,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 97,
                        "src": "2806:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2806:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 74,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 97,
                        "src": "2815:12:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2815:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2796:32:1"
                  },
                  "scope": 131,
                  "src": "2662:405:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 107,
                    "nodeType": "Block",
                    "src": "3428:40:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 105,
                          "name": "_stakingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 100,
                          "src": "3445:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 104,
                        "id": 106,
                        "nodeType": "Return",
                        "src": "3438:23:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 98,
                    "nodeType": "StructuredDocumentation",
                    "src": "3073:266:1",
                    "text": " Returns the address to approve component for staking tokens.\n @param _stakingContract          Address of the gauge staking contract\n @return address                  Address of the contract to approve tokens transfers to"
                  },
                  "functionSelector": "0e8edd86",
                  "id": 108,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSpenderAddress",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 101,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 100,
                        "mutability": "mutable",
                        "name": "_stakingContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "3371:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 99,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3371:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3370:26:1"
                  },
                  "returnParameters": {
                    "id": 104,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 103,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "3419:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 102,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3419:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3418:9:1"
                  },
                  "scope": 131,
                  "src": "3344:124:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 129,
                    "nodeType": "Block",
                    "src": "3836:373:1",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 122,
                              "nodeType": "Block",
                              "src": "4123:36:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "74727565",
                                    "id": 120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4144:4:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "functionReturnParameters": 115,
                                  "id": 121,
                                  "nodeType": "Return",
                                  "src": "4137:11:1"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 123,
                            "nodeType": "TryCatchClause",
                            "parameters": null,
                            "src": "4123:36:1"
                          },
                          {
                            "block": {
                              "id": 126,
                              "nodeType": "Block",
                              "src": "4166:37:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "66616c7365",
                                    "id": 124,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4187:5:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  },
                                  "functionReturnParameters": 115,
                                  "id": 125,
                                  "nodeType": "Return",
                                  "src": "4180:12:1"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 127,
                            "nodeType": "TryCatchClause",
                            "parameters": null,
                            "src": "4160:43:1"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 118,
                              "name": "_stakingContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 111,
                              "src": "4105:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 116,
                              "name": "gaugeController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16,
                              "src": "4077:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IGaugeController_$9",
                                "typeString": "contract IGaugeController"
                              }
                            },
                            "id": 117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "gauge_types",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8,
                            "src": "4077:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_int128_$",
                              "typeString": "function (address) view external returns (int128)"
                            }
                          },
                          "id": 119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4077:45:1",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "id": 128,
                        "nodeType": "TryStatement",
                        "src": "4073:130:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "3474:269:1",
                    "text": " Validates that the staking contract is registered in the gauge controller\n @param _stakingContract          Address of the gauge staking contract\n @return bool                     Whether or not the staking contract is valid"
                  },
                  "id": 130,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidStakingContract",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "_stakingContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 130,
                        "src": "3781:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3781:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3780:26:1"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 130,
                        "src": "3830:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3830:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3829:6:1"
                  },
                  "scope": 131,
                  "src": "3748:461:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 132,
              "src": "903:3308:1"
            }
          ],
          "src": "655:3557:1"
        },
        "id": 1
      }
    }
  }
}
