{
  "id": "4271ee61422fc7a2ccbf14843a4ac8a7",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.10",
  "solcLongVersion": "0.6.10+commit.00c0fcaf",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/protocol/integration/governance/SnapshotGovernanceAdapter.sol": {
        "content": "/*\n    Copyright 2021 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\n/**\n * @title SnapshotGovernanceAdapter\n * @author Noah Citron\n *\n * Governance adapter for Snapshot delegation that returns data delegating and revoking delegations\n */\npragma solidity 0.6.10;\npragma experimental \"ABIEncoderV2\";\n\n\ncontract SnapshotGovernanceAdapter {\n\n    /* ============ Constants ============ */\n    \n    // Signature of the delegate function for Snapshot\n    string public constant SET_DELEGATE_SIGNATURE = \"setDelegate(bytes32,address)\";\n\n    // Signature of the clear delegate function for Snapshot\n    string public constant CLEAR_DELEGATE_SIGNATURE = \"clearDelegate(bytes32)\";\n\n    // Zero bytes32 is used as the id parameter for DelegateRegistry to denote delegating for all spaces\n    bytes32 private constant ZERO_BYTES32 = bytes32(0);\n\n    /* ============ State Variables ============ */\n\n    address public delegateRegistry;\n\n    /* ============ Constructor ============ */\n\n    /**\n     * Set state variables\n     *\n     * @param _delegateRegistry    Address of the Snapshot DelegateRegistry\n     */\n    constructor(address _delegateRegistry) public {\n        delegateRegistry = _delegateRegistry;\n    }\n\n    /* ============ External Getter Functions ============ */\n\n    /**\n     * Generates the calldata to delegate Snapshot votes to another ETH address\n     *\n     * @param _delegatee            Address of the delegatee\n     *\n     * @return address              Target contract address\n     * @return uint256              Total quantity of ETH (Set to 0)\n     * @return bytes                Delegate calldata\n     */\n    function getDelegateCalldata(address _delegatee) external view returns (address, uint256, bytes memory) {\n        // setDelegate(bytes32 _id, address _delegatee)\n        bytes memory callData = abi.encodeWithSignature(SET_DELEGATE_SIGNATURE, ZERO_BYTES32, _delegatee);\n\n        return (address(delegateRegistry), 0, callData);\n    }\n\n    /**\n     * Generates the calldata to remove delegate\n     *\n     * @return address              Target contract address\n     * @return uint256              Total quantity of ETH (Set to 0)\n     * @return bytes                Revoke calldata\n     */\n     function getRevokeCalldata() external view returns (address, uint256, bytes memory) {\n         // clearDelegate(bytes32 _id)\n         bytes memory callData = abi.encodeWithSignature(CLEAR_DELEGATE_SIGNATURE, ZERO_BYTES32);\n\n         return (address(delegateRegistry), 0, callData);\n     }\n}"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/protocol/integration/governance/SnapshotGovernanceAdapter.sol": {
        "SnapshotGovernanceAdapter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_delegateRegistry",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "CLEAR_DELEGATE_SIGNATURE",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "SET_DELEGATE_SIGNATURE",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "delegateRegistry",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_delegatee",
                  "type": "address"
                }
              ],
              "name": "getDelegateCalldata",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRevokeCalldata",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161047838038061047883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b6103e7806100916000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806313bfffac1461005c5780634d19c3641461007a578063889274bf1461008f578063d0ae50ae14610097578063d5abba99146100b9575b600080fd5b6100646100c1565b604051610071919061030a565b60405180910390f35b6100826100d0565b604051610071919061036e565b610082610109565b6100aa6100a5366004610294565b61013b565b6040516100719392919061031e565b6100aa6101ed565b6000546001600160a01b031681565b6040518060400160405280601c81526020017f73657444656c656761746528627974657333322c61646472657373290000000081525081565b60405180604001604052806016815260200175636c65617244656c656761746528627974657333322960501b81525081565b6000806060806040518060400160405280601c81526020017f73657444656c656761746528627974657333322c6164647265737329000000008152506000801b8660405160240161018d929190610357565b60408051601f1981840301815290829052916101a8916102ee565b6040519081900390206020820180516001600160e01b03166001600160e01b0319909216919091179052600080546001600160a01b0316955093509150509193909250565b60008060608060405180604001604052806016815260200175636c65617244656c656761746528627974657333322960501b8152506000801b604051602401610236919061034e565b60408051601f198184030181529082905291610251916102ee565b6040519081900390206020820180516001600160e01b03166001600160e01b0319909216919091179052600080546001600160a01b031695509350915050909192565b6000602082840312156102a5578081fd5b81356001600160a01b03811681146102bb578182fd5b9392505050565b600081518084526102da816020860160208601610381565b601f01601f19169290920160200192915050565b60008251610300818460208701610381565b9190910192915050565b6001600160a01b0391909116815260200190565b600060018060a01b03851682528360208301526060604083015261034560608301846102c2565b95945050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b6000602082526102bb60208301846102c2565b60005b8381101561039c578181015183820152602001610384565b838111156103ab576000848401525b5050505056fea2646970667358221220e9bc0ef0c87723d9473b346343e21298913e5cd83e2c2f75f90f1e3b202425bc64736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x478 CODESIZE SUB DUP1 PUSH2 0x478 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x3E7 DUP1 PUSH2 0x91 PUSH1 0x0 CODECOPY 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 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x13BFFFAC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x4D19C364 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x889274BF EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xD0AE50AE EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD5ABBA99 EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0xD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x36E JUMP JUMPDEST PUSH2 0x82 PUSH2 0x109 JUMP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x294 JUMP JUMPDEST PUSH2 0x13B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31E JUMP JUMPDEST PUSH2 0xAA PUSH2 0x1ED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657444656C656761746528627974657333322C616464726573732900000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH22 0x636C65617244656C6567617465286279746573333229 PUSH1 0x50 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657444656C656761746528627974657333322C616464726573732900000000 DUP2 MSTORE POP PUSH1 0x0 DUP1 SHL DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x18D SWAP3 SWAP2 SWAP1 PUSH2 0x357 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE SWAP2 PUSH2 0x1A8 SWAP2 PUSH2 0x2EE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 POP SWAP4 POP SWAP2 POP POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH22 0x636C65617244656C6567617465286279746573333229 PUSH1 0x50 SHL DUP2 MSTORE POP PUSH1 0x0 DUP1 SHL PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x236 SWAP2 SWAP1 PUSH2 0x34E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE SWAP2 PUSH2 0x251 SWAP2 PUSH2 0x2EE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 POP SWAP4 POP SWAP2 POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2BB JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2DA DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x381 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x300 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x381 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x345 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2C2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x2BB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2C2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x39C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x384 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xBC 0xE CREATE 0xC8 PUSH24 0x23D9473B346343E21298913E5CD83E2C2F75F90F1E3B2024 0x25 0xBC PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
              "sourceMap": "887:2207:0:-:0;;;1690:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1746:16;:36;;-1:-1:-1;;;;;;1746:36:0;-1:-1:-1;;;;;1746:36:0;;;;;;;;;;887:2207;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186;;887:2207:0;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c806313bfffac1461005c5780634d19c3641461007a578063889274bf1461008f578063d0ae50ae14610097578063d5abba99146100b9575b600080fd5b6100646100c1565b604051610071919061030a565b60405180910390f35b6100826100d0565b604051610071919061036e565b610082610109565b6100aa6100a5366004610294565b61013b565b6040516100719392919061031e565b6100aa6101ed565b6000546001600160a01b031681565b6040518060400160405280601c81526020017f73657444656c656761746528627974657333322c61646472657373290000000081525081565b60405180604001604052806016815260200175636c65617244656c656761746528627974657333322960501b81525081565b6000806060806040518060400160405280601c81526020017f73657444656c656761746528627974657333322c6164647265737329000000008152506000801b8660405160240161018d929190610357565b60408051601f1981840301815290829052916101a8916102ee565b6040519081900390206020820180516001600160e01b03166001600160e01b0319909216919091179052600080546001600160a01b0316955093509150509193909250565b60008060608060405180604001604052806016815260200175636c65617244656c656761746528627974657333322960501b8152506000801b604051602401610236919061034e565b60408051601f198184030181529082905291610251916102ee565b6040519081900390206020820180516001600160e01b03166001600160e01b0319909216919091179052600080546001600160a01b031695509350915050909192565b6000602082840312156102a5578081fd5b81356001600160a01b03811681146102bb578182fd5b9392505050565b600081518084526102da816020860160208601610381565b601f01601f19169290920160200192915050565b60008251610300818460208701610381565b9190910192915050565b6001600160a01b0391909116815260200190565b600060018060a01b03851682528360208301526060604083015261034560608301846102c2565b95945050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b6000602082526102bb60208301846102c2565b60005b8381101561039c578181015183820152602001610384565b838111156103ab576000848401525b5050505056fea2646970667358221220e9bc0ef0c87723d9473b346343e21298913e5cd83e2c2f75f90f1e3b202425bc64736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x13BFFFAC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x4D19C364 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x889274BF EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xD0AE50AE EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD5ABBA99 EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0xD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x36E JUMP JUMPDEST PUSH2 0x82 PUSH2 0x109 JUMP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x294 JUMP JUMPDEST PUSH2 0x13B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31E JUMP JUMPDEST PUSH2 0xAA PUSH2 0x1ED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657444656C656761746528627974657333322C616464726573732900000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH22 0x636C65617244656C6567617465286279746573333229 PUSH1 0x50 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657444656C656761746528627974657333322C616464726573732900000000 DUP2 MSTORE POP PUSH1 0x0 DUP1 SHL DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x18D SWAP3 SWAP2 SWAP1 PUSH2 0x357 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE SWAP2 PUSH2 0x1A8 SWAP2 PUSH2 0x2EE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 POP SWAP4 POP SWAP2 POP POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH22 0x636C65617244656C6567617465286279746573333229 PUSH1 0x50 SHL DUP2 MSTORE POP PUSH1 0x0 DUP1 SHL PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x236 SWAP2 SWAP1 PUSH2 0x34E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE SWAP2 PUSH2 0x251 SWAP2 PUSH2 0x2EE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 POP SWAP4 POP SWAP2 POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2BB JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2DA DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x381 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x300 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x381 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x345 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2C2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x2BB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2C2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x39C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x384 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xBC 0xE CREATE 0xC8 PUSH24 0x23D9473B346343E21298913E5CD83E2C2F75F90F1E3B2024 0x25 0xBC PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
              "sourceMap": "887:2207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1477:31;;;:::i;:::-;;;;;;;;;;;;;;;;1035:78;;;:::i;:::-;;;;;;;;1181:74;;;:::i;2212:332::-;;;;;;;;;:::i;:::-;;;;;;;;;;2804:288;;;:::i;1477:31::-;;;-1:-1:-1;;;;;1477:31:0;;:::o;1035:78::-;;;;;;;;;;;;;;;;;;;:::o;1181:74::-;;;;;;;;;;;;;;-1:-1:-1;;;1181:74:0;;;;:::o;2212:332::-;2284:7;2293;2302:12;2382:21;2430:22;;;;;;;;;;;;;;;;;1415:1;1407:10;;2468;2406:73;;;;;;;;;;;;;;-1:-1:-1;;2406:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2406:73:0;-1:-1:-1;;;;;;2406:73:0;;;;;;;;;-1:-1:-1;2506:16:0;;-1:-1:-1;;;;;2506:16:0;;-1:-1:-1;;;2406:73:0;-1:-1:-1;;2212:332:0;;;;;:::o;2804:288::-;2856:7;2865;2874:12;2938:21;2986:24;;;;;;;;;;;;;-1:-1:-1;;;2986:24:0;;;1415:1;1407:10;;2962:63;;;;;;;;;;;;;-1:-1:-1;;2962:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2962:63:0;-1:-1:-1;;;;;;2962:63:0;;;;;;;;;-1:-1:-1;3053:16:0;;-1:-1:-1;;;;;3053:16:0;;-1:-1:-1;;;2962:63:0;-1:-1:-1;;2804:288:0;;;:::o;142:241:-1:-;;246:2;234:9;225:7;221:23;217:32;214:2;;;-1:-1;;252:12;214:2;72:20;;-1:-1;;;;;4746:54;;5332:35;;5322:2;;-1:-1;;5371:12;5322:2;304:63;208:175;-1:-1;;;208:175;630:343;;772:5;3840:12;4125:6;4120:3;4113:19;865:52;910:6;4162:4;4157:3;4153:14;4162:4;891:5;887:16;865:52;;;5252:7;5236:14;-1:-1;;5232:28;929:39;;;;4162:4;929:39;;720:253;-1:-1;;720:253;1821:275;;1497:5;3840:12;1609:52;1654:6;1649:3;1642:4;1635:5;1631:16;1609:52;;;1673:16;;;;;1957:139;-1:-1;;1957:139;2103:222;-1:-1;;;;;4746:54;;;;461:37;;2230:2;2215:18;;2201:124;2332:528;;4757:42;;;;;4750:5;4746:54;468:3;461:37;611:5;2697:2;2686:9;2682:18;581:37;2533:2;2734;2723:9;2719:18;2712:48;2774:76;2533:2;2522:9;2518:18;2836:6;2774:76;;;2766:84;2504:356;-1:-1;;;;;2504:356;2867:222;581:37;;;2994:2;2979:18;;2965:124;3096:333;581:37;;;-1:-1;;;;;4746:54;3415:2;3400:18;;461:37;3251:2;3236:18;;3222:207;3436:310;;3583:2;3604:17;3597:47;3658:78;3583:2;3572:9;3568:18;3722:6;3658:78;;4892:268;4957:1;4964:101;4978:6;4975:1;4972:13;4964:101;;;5045:11;;;5039:18;5026:11;;;5019:39;5000:2;4993:10;4964:101;;;5080:6;5077:1;5074:13;5071:2;;;4957:1;5136:6;5131:3;5127:16;5120:27;5071:2;;4941:219;;;"
            },
            "methodIdentifiers": {
              "CLEAR_DELEGATE_SIGNATURE()": "889274bf",
              "SET_DELEGATE_SIGNATURE()": "4d19c364",
              "delegateRegistry()": "13bfffac",
              "getDelegateCalldata(address)": "d0ae50ae",
              "getRevokeCalldata()": "d5abba99"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/protocol/integration/governance/SnapshotGovernanceAdapter.sol": {
        "ast": {
          "absolutePath": "contracts/protocol/integration/governance/SnapshotGovernanceAdapter.sol",
          "exportedSymbols": {
            "SnapshotGovernanceAdapter": [
              85
            ]
          },
          "id": 86,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "825:23:0"
            },
            {
              "id": 2,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "849:35:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 85,
              "linearizedBaseContracts": [
                85
              ],
              "name": "SnapshotGovernanceAdapter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "functionSelector": "4d19c364",
                  "id": 5,
                  "mutability": "constant",
                  "name": "SET_DELEGATE_SIGNATURE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 85,
                  "src": "1035:78:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1035:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "73657444656c656761746528627974657333322c6164647265737329",
                    "id": 4,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1083:30:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bd86e508c5a276031dbc4f41ea67b1de9f9306d430102ea33251942a6c8ec71a",
                      "typeString": "literal_string \"setDelegate(bytes32,address)\""
                    },
                    "value": "setDelegate(bytes32,address)"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "889274bf",
                  "id": 8,
                  "mutability": "constant",
                  "name": "CLEAR_DELEGATE_SIGNATURE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 85,
                  "src": "1181:74:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1181:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "636c65617244656c6567617465286279746573333229",
                    "id": 7,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1231:24:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_f0bedbe209ac72907b78ce06f8fbb472c108fbd8076c45e50cc6a5351d607796",
                      "typeString": "literal_string \"clearDelegate(bytes32)\""
                    },
                    "value": "clearDelegate(bytes32)"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 14,
                  "mutability": "constant",
                  "name": "ZERO_BYTES32",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 85,
                  "src": "1367:50:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1367:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 12,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1415:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 11,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1407:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 10,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1407:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 13,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1407:10:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "functionSelector": "13bfffac",
                  "id": 16,
                  "mutability": "mutable",
                  "name": "delegateRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 85,
                  "src": "1477:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1477:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 26,
                    "nodeType": "Block",
                    "src": "1736:53:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 22,
                            "name": "delegateRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "1746:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 23,
                            "name": "_delegateRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19,
                            "src": "1765:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1746:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 25,
                        "nodeType": "ExpressionStatement",
                        "src": "1746:36:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "1564:121:0",
                    "text": " Set state variables\n @param _delegateRegistry    Address of the Snapshot DelegateRegistry"
                  },
                  "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": "_delegateRegistry",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 27,
                        "src": "1702:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1702:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1701:27:0"
                  },
                  "returnParameters": {
                    "id": 21,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1736:0:0"
                  },
                  "scope": 85,
                  "src": "1690:99:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 56,
                    "nodeType": "Block",
                    "src": "2316:228:0",
                    "statements": [
                      {
                        "assignments": [
                          40
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 40,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 56,
                            "src": "2382:21:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 39,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2382:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 47,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 43,
                              "name": "SET_DELEGATE_SIGNATURE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5,
                              "src": "2430:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 44,
                              "name": "ZERO_BYTES32",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14,
                              "src": "2454:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 45,
                              "name": "_delegatee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "2468:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 41,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2406:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 42,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2406:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 46,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2406:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2382:97:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 50,
                                  "name": "delegateRegistry",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16,
                                  "src": "2506:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 49,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2498:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 48,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2498:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 51,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2498:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 52,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2525:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 53,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 40,
                              "src": "2528:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 54,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2497:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 38,
                        "id": 55,
                        "nodeType": "Return",
                        "src": "2490:47:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 28,
                    "nodeType": "StructuredDocumentation",
                    "src": "1858:349:0",
                    "text": " Generates the calldata to delegate Snapshot votes to another ETH address\n @param _delegatee            Address of the delegatee\n @return address              Target contract address\n @return uint256              Total quantity of ETH (Set to 0)\n @return bytes                Delegate calldata"
                  },
                  "functionSelector": "d0ae50ae",
                  "id": 57,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getDelegateCalldata",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 31,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 30,
                        "mutability": "mutable",
                        "name": "_delegatee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 57,
                        "src": "2241:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 29,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2241:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2240:20:0"
                  },
                  "returnParameters": {
                    "id": 38,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 33,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 57,
                        "src": "2284:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 32,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2284:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 35,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 57,
                        "src": "2293:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 34,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2293:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 37,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 57,
                        "src": "2302:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 36,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2302:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2283:32:0"
                  },
                  "scope": 85,
                  "src": "2212:332:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 83,
                    "nodeType": "Block",
                    "src": "2888:204:0",
                    "statements": [
                      {
                        "assignments": [
                          68
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 68,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 83,
                            "src": "2938:21:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 67,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2938:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 74,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 71,
                              "name": "CLEAR_DELEGATE_SIGNATURE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8,
                              "src": "2986:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 72,
                              "name": "ZERO_BYTES32",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14,
                              "src": "3012:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 69,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2962:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 70,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2962:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 73,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2962:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2938:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 77,
                                  "name": "delegateRegistry",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16,
                                  "src": "3053:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 76,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3045:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 75,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3045:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 78,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3045:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 79,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3072:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 80,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 68,
                              "src": "3075:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 81,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3044:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 66,
                        "id": 82,
                        "nodeType": "Return",
                        "src": "3037:47:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 58,
                    "nodeType": "StructuredDocumentation",
                    "src": "2550:248:0",
                    "text": " Generates the calldata to remove delegate\n @return address              Target contract address\n @return uint256              Total quantity of ETH (Set to 0)\n @return bytes                Revoke calldata"
                  },
                  "functionSelector": "d5abba99",
                  "id": 84,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRevokeCalldata",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 59,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2830:2:0"
                  },
                  "returnParameters": {
                    "id": 66,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 61,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "2856:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2856:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 63,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "2865:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2865:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 65,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "2874:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2874:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2855:32:0"
                  },
                  "scope": 85,
                  "src": "2804:288:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 86,
              "src": "887:2207:0"
            }
          ],
          "src": "825:2269:0"
        },
        "id": 0
      }
    }
  }
}
