{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CallerHasNotVoted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidVotingReward",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintableSupplyExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposalNotExecuted",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "ProposalRewardAlreadyAssigned",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposalRewardAlreadyClaimed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposalRewardNotAssigned",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposalSnapshotInImmutablePeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VotingRewardNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroVotingContract",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "ProposalRewardAssigned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "voterReward",
          "type": "uint256"
        }
      ],
      "name": "ProposalRewardClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IMMUTABLE_PERIOD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_VOTING_REWARD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTABLE_TOTAL_SUPPLY",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VOTING_REWARD_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "assignProposalReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "claimProposalReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintedSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "votingReward",
          "type": "uint256"
        }
      ],
      "name": "setVotingReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "votingContract",
          "type": "address"
        }
      ],
      "name": "votingRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060405162001c5c38038062001c5c833981016040819052620000349162000140565b6040518060400160405280600781526020016650574e2044414f60c81b81525060405180604001604052806003815260200162282ba760e91b8152506200008a62000084620000c260201b60201c565b620000c6565b600562000098838262000217565b506006620000a7828262000217565b505050620000bb81620000c660201b60201c565b50620002e3565b3390565b600180546001600160a01b0319169055620000ed81620000f0602090811b62000cdc17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019d57607f821691505b602082108103620001be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021257600081815260208120601f850160051c81016020861015620001ed5750805b601f850160051c820191505b818110156200020e57828155600101620001f9565b5050505b505050565b81516001600160401b0381111562000233576200023362000172565b6200024b8162000244845462000188565b84620001c4565b602080601f8311600181146200028357600084156200026a5750858301515b600019600386901b1c1916600185901b1785556200020e565b600085815260208120601f198616915b82811015620002b45788860151825594840194600190910190840162000293565b5085821015620002d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61196980620002f36000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806379ba5097116100f9578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146103ae578063e30c3978146103c1578063f2fde38b146103d2578063fda599b1146103e557600080fd5b8063a457c2d71461037f578063a9059cbb14610392578063c1bd8cf9146103a557600080fd5b806395d89b41116100d357806395d89b411461033c5780639e121c3914610344578063a0712d681461034c578063a43daf6d1461035f57600080fd5b806379ba5097146102fc578063852f3945146103045780638da5cb5b1461031757600080fd5b8063313ce56711610166578063395093511161014057806339509351146102a557806342966c68146102b857806370a08231146102cb578063715018a6146102f457600080fd5b8063313ce56714610256578063360aceb71461026557806337c795611461029057600080fd5b80630edff0f1116101a25780630edff0f11461022a57806318160ddd146102325780631d3b56fe1461023a57806323b872dd1461024357600080fd5b806306fdde03146101c9578063095ea7b3146101e75780630b53c60b1461020a575b600080fd5b6101d16103f8565b6040516101de91906113e4565b60405180910390f35b6101fa6101f536600461142c565b61048a565b60405190151581526020016101de565b61021c6a52b7d2dcc80cd2e400000081565b6040519081526020016101de565b61021c601a81565b60045461021c565b61021c61271081565b6101fa610251366004611458565b6104a4565b604051601281526020016101de565b61021c61027336600461142c565b600960209081526000928352604080842090915290825290205481565b6102a361029e36600461142c565b6104ca565b005b6101fa6102b336600461142c565b6106ae565b6102a36102c6366004611499565b6106d0565b61021c6102d93660046114b2565b6001600160a01b031660009081526002602052604090205490565b6102a36106dd565b6102a36106f1565b6102a361031236600461142c565b610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101de565b6101d16107d5565b61021c606481565b6102a361035a366004611499565b6107e4565b61021c61036d3660046114b2565b60086020526000908152604090205481565b6101fa61038d36600461142c565b610837565b6101fa6103a036600461142c565b6108bd565b61021c60075481565b61021c6103bc3660046114cf565b6108cb565b6001546001600160a01b0316610324565b6102a36103e03660046114b2565b6108f6565b6102a36103f336600461142c565b610967565b60606005805461040790611508565b80601f016020809104026020016040519081016040528092919081815260200182805461043390611508565b80156104805780601f1061045557610100808354040283529160200191610480565b820191906000526020600020905b81548152906001019060200180831161046357829003601f168201915b5050505050905090565b600033610498818585610d2c565b60019150505b92915050565b6000336104b2858285610e51565b6104bd858585610ecb565b60019150505b9392505050565b6104d2611076565b6001600160a01b0382166104f95760405163f48af78f60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600860205260408120549081900361053357604051637457f7c560e11b815260040160405180910390fd5b6001600160a01b03831660009081526009602090815260408083208584529091529020805415610581578054604051630a72c35160e41b815260048101919091526024015b60405180910390fd5b6040516318feeb1560e31b81526004810184905260009081906001600160a01b0387169063c7f758a890602401600060405180830381865afa1580156105cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f39190810190611785565b505050925092505081610619576040516374e0240960e11b815260040160405180910390fd5b601a816080015167ffffffffffffffff161161064857604051631c5db7b360e01b815260040160405180910390fd5b600061065f61065660045490565b866127106110d0565b80855560405181815290915086906001600160a01b038916907f01b41864e51b7647b2303e079be028a4df8d5c9ae30e2a8855d46ba89dfc6e2a9060200160405180910390a350505050505050565b6000336104988185856106c183836108cb565b6106cb919061188f565b610d2c565b6106da33826111ba565b50565b6106e5611076565b6106ef60006112e6565b565b60015433906001600160a01b0316811461075f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610578565b6106da816112e6565b610770611076565b6001600160a01b0382166107975760405163f48af78f60e01b815260040160405180910390fd5b60648111156107b95760405163ccacafc360e01b815260040160405180910390fd5b6001600160a01b03909116600090815260086020526040902055565b60606006805461040790611508565b6107ec611076565b6a52b7d2dcc80cd2e400000081600754610806919061188f565b111561082557604051632e4c2d1360e21b815260040160405180910390fd5b60078054820190556106da33826112ff565b6000338161084582866108cb565b9050838110156108a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610578565b6108b28286868403610d2c565b506001949350505050565b600033610498818585610ecb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6108fe611076565b600180546001600160a01b0383166001600160a01b0319909116811790915561092f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03821661098e5760405163f48af78f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526009602090815260408083208484529091528120805490918190036109d557604051635b9efee360e01b815260040160405180910390fd5b6040516318feeb1560e31b81526004810184905260009081906001600160a01b0387169063c7f758a890602401600060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a479190810190611785565b50919550935033925060009150610a5b9050565b6040516312e0c03b60e31b8152600481018890526001600160a01b03838116602483015289169063970601d890604401602060405180830381865afa158015610aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acc91906118c6565b6003811115610add57610add6118b0565b03610afb57604051637d06fe9d60e11b815260040160405180910390fd5b6001600160a01b038116600090815260018601602052604090205460ff1615610b37576040516338abe0f560e21b815260040160405180910390fd5b6001600160a01b038082166000908152600187810160209081526040808420805460ff1916909317909255815163e28c3b1960e01b8152915192938b169263e28c3b199260048082019392918290030181865afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906118e7565b6080850151604051630748d63560e31b81526001600160a01b03858116600483015267ffffffffffffffff9092166024820152911690633a46b1a890604401602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611904565b90506000836040015184602001518560000151610c5d919061188f565b610c67919061188f565b90506000610c768784846110d0565b9050610c8284826112ff565b836001600160a01b0316898b6001600160a01b03167fe5877305879fe1f016eb4153551eb9b3d11786d817b00d1dc3b13a880d13bd9484604051610cc891815260200190565b60405180910390a450505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316610d8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610578565b6001600160a01b038216610def5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610578565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610e5d84846108cb565b90506000198114610ec55781811015610eb85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610578565b610ec58484848403610d2c565b50505050565b6001600160a01b038316610f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610578565b6001600160a01b038216610f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610578565b6001600160a01b038316600090815260026020526040902054818110156110095760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610578565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110699086815260200190565b60405180910390a3610ec5565b6000546001600160a01b031633146106ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610578565b600080806000198587098587029250828110838203039150508060000361110a578382816111005761110061191d565b04925050506104c3565b8084116111515760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610578565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b03821661121a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610578565b6001600160a01b0382166000908152600260205260409020548181101561128e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610578565b6001600160a01b03831660008181526002602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e44565b600180546001600160a01b03191690556106da81610cdc565b6001600160a01b0382166113555760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610578565b8060046000828254611367919061188f565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60005b838110156113db5781810151838201526020016113c3565b50506000910152565b60208152600082518060208401526114038160408501602087016113c0565b601f01601f19169190910160400192915050565b6001600160a01b03811681146106da57600080fd5b6000806040838503121561143f57600080fd5b823561144a81611417565b946020939093013593505050565b60008060006060848603121561146d57600080fd5b833561147881611417565b9250602084013561148881611417565b929592945050506040919091013590565b6000602082840312156114ab57600080fd5b5035919050565b6000602082840312156114c457600080fd5b81356104c381611417565b600080604083850312156114e257600080fd5b82356114ed81611417565b915060208301356114fd81611417565b809150509250929050565b600181811c9082168061151c57607f821691505b60208210810361153c57634e487b7160e01b600052602260045260246000fd5b50919050565b8051801515811461155257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561159057611590611557565b60405290565b60405160c0810167ffffffffffffffff8111828210171561159057611590611557565b604051601f8201601f1916810167ffffffffffffffff811182821017156115e2576115e2611557565b604052919050565b805167ffffffffffffffff8116811461155257600080fd5b60006060828403121561161457600080fd5b61161c61156d565b905081518152602082015160208201526040820151604082015292915050565b6000601f838184011261164e57600080fd5b8251602067ffffffffffffffff8083111561166b5761166b611557565b8260051b61167a8382016115b9565b938452868101830193838101908986111561169457600080fd5b84890192505b85831015611778578251848111156116b25760008081fd5b89016060601f19828d0381018213156116cb5760008081fd5b6116d361156d565b888401516116e081611417565b81526040848101518a8301529284015192888411156116ff5760008081fd5b83850194508e603f86011261171657600093508384fd5b8985015193508884111561172c5761172c611557565b61173b8a848e870116016115b9565b92508383528e818587010111156117525760008081fd5b611761848b85018388016113c0565b81019190915284525050918401919084019061169a565b9998505050505050505050565b6000806000806000808688036101a08112156117a057600080fd5b6117a988611542565b96506117b760208901611542565b955060c0603f19820112156117cb57600080fd5b506117d4611596565b6040880151600381106117e657600080fd5b8152606088015163ffffffff811681146117ff57600080fd5b6020820152611810608089016115ea565b604082015261182160a089016115ea565b606082015261183260c089016115ea565b608082015260e088015160a08201529350611851886101008901611602565b925061016087015167ffffffffffffffff81111561186e57600080fd5b61187a89828a0161163c565b92505061018087015190509295509295509295565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156118d857600080fd5b8151600481106104c357600080fd5b6000602082840312156118f957600080fd5b81516104c381611417565b60006020828403121561191657600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fdfea2646970667358221220e0118df54311cc9b6acfcc43acd6b063453a722c33481e08c39cbce8e64659c064736f6c63430008120033",
    "sourceMap": "745:9094:52:-:0;;;3834:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1980:113:34;;;;;;;;;;;;;-1:-1:-1;;;1980:113:34;;;;;;;;;;;;;;;;-1:-1:-1;;;1980:113:34;;;936:32:21;955:12;:10;;;:12;;:::i;:::-;936:18;:32::i;:::-;2046:5:34;:13;2054:5;2046;:13;:::i;:::-;-1:-1:-1;2069:7:34;:17;2079:7;2069;:17;:::i;:::-;;1980:113;;3896:26:52::1;3915:6;3896:18;;;:26;;:::i;:::-;3834:95:::0;745:9094;;640:96:43;719:10;;640:96::o;1501:153:22:-;1590:13;1583:20;;-1:-1:-1;;;;;;1583:20:22;;;1613:34;1638:8;1613:24;;;;;;;:34;;:::i;:::-;1501:153;:::o;2426:187:21:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:21;;;-1:-1:-1;;;;;;2534:17:21;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:290:82:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:82;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:82:o;309:127::-;370:10;365:3;361:20;358:1;351:31;401:4;398:1;391:15;425:4;422:1;415:15;441:380;520:1;516:12;;;;563;;;584:61;;638:4;630:6;626:17;616:27;;584:61;691:2;683:6;680:14;660:18;657:38;654:161;;737:10;732:3;728:20;725:1;718:31;772:4;769:1;762:15;800:4;797:1;790:15;654:161;;441:380;;;:::o;952:545::-;1054:2;1049:3;1046:11;1043:448;;;1090:1;1115:5;1111:2;1104:17;1160:4;1156:2;1146:19;1230:2;1218:10;1214:19;1211:1;1207:27;1201:4;1197:38;1266:4;1254:10;1251:20;1248:47;;;-1:-1:-1;1289:4:82;1248:47;1344:2;1339:3;1335:12;1332:1;1328:20;1322:4;1318:31;1308:41;;1399:82;1417:2;1410:5;1407:13;1399:82;;;1462:17;;;1443:1;1432:13;1399:82;;;1403:3;;;1043:448;952:545;;;:::o;1673:1352::-;1793:10;;-1:-1:-1;;;;;1815:30:82;;1812:56;;;1848:18;;:::i;:::-;1877:97;1967:6;1927:38;1959:4;1953:11;1927:38;:::i;:::-;1921:4;1877:97;:::i;:::-;2029:4;;2093:2;2082:14;;2110:1;2105:663;;;;2812:1;2829:6;2826:89;;;-1:-1:-1;2881:19:82;;;2875:26;2826:89;-1:-1:-1;;1630:1:82;1626:11;;;1622:24;1618:29;1608:40;1654:1;1650:11;;;1605:57;2928:81;;2075:944;;2105:663;899:1;892:14;;;936:4;923:18;;-1:-1:-1;;2141:20:82;;;2259:236;2273:7;2270:1;2267:14;2259:236;;;2362:19;;;2356:26;2341:42;;2454:27;;;;2422:1;2410:14;;;;2289:19;;2259:236;;;2263:3;2523:6;2514:7;2511:19;2508:201;;;2584:19;;;2578:26;-1:-1:-1;;2667:1:82;2663:14;;;2679:3;2659:24;2655:37;2651:42;2636:58;2621:74;;2508:201;-1:-1:-1;;;;;2755:1:82;2739:14;;;2735:22;2722:36;;-1:-1:-1;1673:1352:82:o;:::-;745:9094:52;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806379ba5097116100f9578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146103ae578063e30c3978146103c1578063f2fde38b146103d2578063fda599b1146103e557600080fd5b8063a457c2d71461037f578063a9059cbb14610392578063c1bd8cf9146103a557600080fd5b806395d89b41116100d357806395d89b411461033c5780639e121c3914610344578063a0712d681461034c578063a43daf6d1461035f57600080fd5b806379ba5097146102fc578063852f3945146103045780638da5cb5b1461031757600080fd5b8063313ce56711610166578063395093511161014057806339509351146102a557806342966c68146102b857806370a08231146102cb578063715018a6146102f457600080fd5b8063313ce56714610256578063360aceb71461026557806337c795611461029057600080fd5b80630edff0f1116101a25780630edff0f11461022a57806318160ddd146102325780631d3b56fe1461023a57806323b872dd1461024357600080fd5b806306fdde03146101c9578063095ea7b3146101e75780630b53c60b1461020a575b600080fd5b6101d16103f8565b6040516101de91906113e4565b60405180910390f35b6101fa6101f536600461142c565b61048a565b60405190151581526020016101de565b61021c6a52b7d2dcc80cd2e400000081565b6040519081526020016101de565b61021c601a81565b60045461021c565b61021c61271081565b6101fa610251366004611458565b6104a4565b604051601281526020016101de565b61021c61027336600461142c565b600960209081526000928352604080842090915290825290205481565b6102a361029e36600461142c565b6104ca565b005b6101fa6102b336600461142c565b6106ae565b6102a36102c6366004611499565b6106d0565b61021c6102d93660046114b2565b6001600160a01b031660009081526002602052604090205490565b6102a36106dd565b6102a36106f1565b6102a361031236600461142c565b610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101de565b6101d16107d5565b61021c606481565b6102a361035a366004611499565b6107e4565b61021c61036d3660046114b2565b60086020526000908152604090205481565b6101fa61038d36600461142c565b610837565b6101fa6103a036600461142c565b6108bd565b61021c60075481565b61021c6103bc3660046114cf565b6108cb565b6001546001600160a01b0316610324565b6102a36103e03660046114b2565b6108f6565b6102a36103f336600461142c565b610967565b60606005805461040790611508565b80601f016020809104026020016040519081016040528092919081815260200182805461043390611508565b80156104805780601f1061045557610100808354040283529160200191610480565b820191906000526020600020905b81548152906001019060200180831161046357829003601f168201915b5050505050905090565b600033610498818585610d2c565b60019150505b92915050565b6000336104b2858285610e51565b6104bd858585610ecb565b60019150505b9392505050565b6104d2611076565b6001600160a01b0382166104f95760405163f48af78f60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600860205260408120549081900361053357604051637457f7c560e11b815260040160405180910390fd5b6001600160a01b03831660009081526009602090815260408083208584529091529020805415610581578054604051630a72c35160e41b815260048101919091526024015b60405180910390fd5b6040516318feeb1560e31b81526004810184905260009081906001600160a01b0387169063c7f758a890602401600060405180830381865afa1580156105cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f39190810190611785565b505050925092505081610619576040516374e0240960e11b815260040160405180910390fd5b601a816080015167ffffffffffffffff161161064857604051631c5db7b360e01b815260040160405180910390fd5b600061065f61065660045490565b866127106110d0565b80855560405181815290915086906001600160a01b038916907f01b41864e51b7647b2303e079be028a4df8d5c9ae30e2a8855d46ba89dfc6e2a9060200160405180910390a350505050505050565b6000336104988185856106c183836108cb565b6106cb919061188f565b610d2c565b6106da33826111ba565b50565b6106e5611076565b6106ef60006112e6565b565b60015433906001600160a01b0316811461075f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610578565b6106da816112e6565b610770611076565b6001600160a01b0382166107975760405163f48af78f60e01b815260040160405180910390fd5b60648111156107b95760405163ccacafc360e01b815260040160405180910390fd5b6001600160a01b03909116600090815260086020526040902055565b60606006805461040790611508565b6107ec611076565b6a52b7d2dcc80cd2e400000081600754610806919061188f565b111561082557604051632e4c2d1360e21b815260040160405180910390fd5b60078054820190556106da33826112ff565b6000338161084582866108cb565b9050838110156108a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610578565b6108b28286868403610d2c565b506001949350505050565b600033610498818585610ecb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6108fe611076565b600180546001600160a01b0383166001600160a01b0319909116811790915561092f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03821661098e5760405163f48af78f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526009602090815260408083208484529091528120805490918190036109d557604051635b9efee360e01b815260040160405180910390fd5b6040516318feeb1560e31b81526004810184905260009081906001600160a01b0387169063c7f758a890602401600060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a479190810190611785565b50919550935033925060009150610a5b9050565b6040516312e0c03b60e31b8152600481018890526001600160a01b03838116602483015289169063970601d890604401602060405180830381865afa158015610aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acc91906118c6565b6003811115610add57610add6118b0565b03610afb57604051637d06fe9d60e11b815260040160405180910390fd5b6001600160a01b038116600090815260018601602052604090205460ff1615610b37576040516338abe0f560e21b815260040160405180910390fd5b6001600160a01b038082166000908152600187810160209081526040808420805460ff1916909317909255815163e28c3b1960e01b8152915192938b169263e28c3b199260048082019392918290030181865afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906118e7565b6080850151604051630748d63560e31b81526001600160a01b03858116600483015267ffffffffffffffff9092166024820152911690633a46b1a890604401602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611904565b90506000836040015184602001518560000151610c5d919061188f565b610c67919061188f565b90506000610c768784846110d0565b9050610c8284826112ff565b836001600160a01b0316898b6001600160a01b03167fe5877305879fe1f016eb4153551eb9b3d11786d817b00d1dc3b13a880d13bd9484604051610cc891815260200190565b60405180910390a450505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316610d8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610578565b6001600160a01b038216610def5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610578565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610e5d84846108cb565b90506000198114610ec55781811015610eb85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610578565b610ec58484848403610d2c565b50505050565b6001600160a01b038316610f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610578565b6001600160a01b038216610f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610578565b6001600160a01b038316600090815260026020526040902054818110156110095760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610578565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110699086815260200190565b60405180910390a3610ec5565b6000546001600160a01b031633146106ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610578565b600080806000198587098587029250828110838203039150508060000361110a578382816111005761110061191d565b04925050506104c3565b8084116111515760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610578565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b03821661121a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610578565b6001600160a01b0382166000908152600260205260409020548181101561128e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610578565b6001600160a01b03831660008181526002602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e44565b600180546001600160a01b03191690556106da81610cdc565b6001600160a01b0382166113555760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610578565b8060046000828254611367919061188f565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60005b838110156113db5781810151838201526020016113c3565b50506000910152565b60208152600082518060208401526114038160408501602087016113c0565b601f01601f19169190910160400192915050565b6001600160a01b03811681146106da57600080fd5b6000806040838503121561143f57600080fd5b823561144a81611417565b946020939093013593505050565b60008060006060848603121561146d57600080fd5b833561147881611417565b9250602084013561148881611417565b929592945050506040919091013590565b6000602082840312156114ab57600080fd5b5035919050565b6000602082840312156114c457600080fd5b81356104c381611417565b600080604083850312156114e257600080fd5b82356114ed81611417565b915060208301356114fd81611417565b809150509250929050565b600181811c9082168061151c57607f821691505b60208210810361153c57634e487b7160e01b600052602260045260246000fd5b50919050565b8051801515811461155257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561159057611590611557565b60405290565b60405160c0810167ffffffffffffffff8111828210171561159057611590611557565b604051601f8201601f1916810167ffffffffffffffff811182821017156115e2576115e2611557565b604052919050565b805167ffffffffffffffff8116811461155257600080fd5b60006060828403121561161457600080fd5b61161c61156d565b905081518152602082015160208201526040820151604082015292915050565b6000601f838184011261164e57600080fd5b8251602067ffffffffffffffff8083111561166b5761166b611557565b8260051b61167a8382016115b9565b938452868101830193838101908986111561169457600080fd5b84890192505b85831015611778578251848111156116b25760008081fd5b89016060601f19828d0381018213156116cb5760008081fd5b6116d361156d565b888401516116e081611417565b81526040848101518a8301529284015192888411156116ff5760008081fd5b83850194508e603f86011261171657600093508384fd5b8985015193508884111561172c5761172c611557565b61173b8a848e870116016115b9565b92508383528e818587010111156117525760008081fd5b611761848b85018388016113c0565b81019190915284525050918401919084019061169a565b9998505050505050505050565b6000806000806000808688036101a08112156117a057600080fd5b6117a988611542565b96506117b760208901611542565b955060c0603f19820112156117cb57600080fd5b506117d4611596565b6040880151600381106117e657600080fd5b8152606088015163ffffffff811681146117ff57600080fd5b6020820152611810608089016115ea565b604082015261182160a089016115ea565b606082015261183260c089016115ea565b608082015260e088015160a08201529350611851886101008901611602565b925061016087015167ffffffffffffffff81111561186e57600080fd5b61187a89828a0161163c565b92505061018087015190509295509295509295565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156118d857600080fd5b8151600481106104c357600080fd5b6000602082840312156118f957600080fd5b81516104c381611417565b60006020828403121561191657600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fdfea2646970667358221220e0118df54311cc9b6acfcc43acd6b063453a722c33481e08c39cbce8e64659c064736f6c63430008120033",
    "sourceMap": "745:9094:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4444:197;;;;;;:::i;:::-;;:::i;:::-;;;1291:14:82;;1284:22;1266:41;;1254:2;1239:18;4444:197:34;1126:187:82;1069:62:52;;1117:14;1069:62;;;;;1464:25:82;;;1452:2;1437:18;1069:62:52;1318:177:82;1510:45:52;;1553:2;1510:45;;3255:106:34;3342:12;;3255:106;;1359:57:52;;1411:5;1359:57;;5203:256:34;;;;;;:::i;:::-;;:::i;3104:91::-;;;3186:2;2103:36:82;;2091:2;2076:18;3104:91:34;1961:184:82;2369:110:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6243:1453;;;;;;:::i;:::-;;:::i;:::-;;5854:234:34;;;;;;:::i;:::-;;:::i;4833:81:52:-;;;;;;:::i;:::-;;:::i;3419:125:34:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3519:18:34;3493:7;3519:18;;;:9;:18;;;;;;;3419:125;1824:101:21;;;:::i;1734:212:22:-;;;:::i;5543:358:52:-;;;;;;:::i;:::-;;:::i;1201:85:21:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:21;1201:85;;;-1:-1:-1;;;;;2751:32:82;;;2733:51;;2721:2;2706:18;1201:85:21;2587:203:82;2369:102:34;;;:::i;1246:47:52:-;;1290:3;1246:47;;4384:279;;;;;;:::i;:::-;;:::i;1968:70::-;;;;;;:::i;:::-;;;;;;;;;;;;;;6575:427:34;;;;;;:::i;:::-;;:::i;3740:189::-;;;;;;:::i;:::-;;:::i;1636:27:52:-;;;;;;3987:149:34;;;;;;:::i;:::-;;:::i;847:99:22:-;926:13;;-1:-1:-1;;;;;926:13:22;847:99;;1139:178;;;;;;:::i;:::-;;:::i;8001:1835:52:-;;;;;;:::i;:::-;;:::i;2158:98:34:-;2212:13;2244:5;2237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98;:::o;4444:197::-;4527:4;719:10:43;4581:32:34;719:10:43;4597:7:34;4606:6;4581:8;:32::i;:::-;4630:4;4623:11;;;4444:197;;;;;:::o;5203:256::-;5300:4;719:10:43;5356:38:34;5372:4;719:10:43;5387:6:34;5356:15;:38::i;:::-;5404:27;5414:4;5420:2;5424:6;5404:9;:27::i;:::-;5448:4;5441:11;;;5203:256;;;;;;:::o;6243:1453:52:-;1094:13:21;:11;:13::i;:::-;-1:-1:-1;;;;;6350:28:52;::::1;6346:92;;6401:26;;-1:-1:-1::0;;;6401:26:52::1;;;;;;;;;;;6346:92;-1:-1:-1::0;;;;;6470:29:52;::::1;6447:20;6470:29:::0;;;:13:::1;:29;::::0;;;;;;6513:17;;;6509:81:::1;;6553:26;;-1:-1:-1::0;;;6553:26:52::1;;;;;;;;;;;6509:81;-1:-1:-1::0;;;;;6698:31:52;::::1;6658:37;6698:31:::0;;;:15:::1;:31;::::0;;;;;;;:43;;;;;;;;6755:21;;:26;6751:122:::1;;6840:21:::0;;6804:58:::1;::::0;-1:-1:-1;;;6804:58:52;;::::1;::::0;::::1;1464:25:82::0;;;;1437:18;;6804:58:52::1;;;;;;;;6751:122;7010:55;::::0;-1:-1:-1;;;7010:55:52;;::::1;::::0;::::1;1464:25:82::0;;;6919:13:52::1;::::0;;;-1:-1:-1;;;;;7010:43:52;::::1;::::0;::::1;::::0;1437:18:82;;7010:55:52::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;7010:55:52::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;6882:183;;;;;;;;7133:8;7128:74;;7164:27;;-1:-1:-1::0;;;7164:27:52::1;;;;;;;;;;;7128:74;1553:2;7281:18;:32;;;:52;;;7277:175;;7400:41;;-1:-1:-1::0;;;7400:41:52::1;;;;;;;;;;;7277:175;7491:14;7508:67;7520:13;3342:12:34::0;;;3255:106;7520:13:52::1;7535:12;1411:5;7508:11;:67::i;:::-;7585:30:::0;;;7631:58:::1;::::0;1464:25:82;;;7585:30:52;;-1:-1:-1;7670:10:52;;-1:-1:-1;;;;;7631:58:52;::::1;::::0;::::1;::::0;1452:2:82;1437:18;7631:58:52::1;;;;;;;6336:1360;;;;;6243:1453:::0;;:::o;5854:234:34:-;5942:4;719:10:43;5996:64:34;719:10:43;6012:7:34;6049:10;6021:25;719:10:43;6012:7:34;6021:9;:25::i;:::-;:38;;;;:::i;:::-;5996:8;:64::i;4833:81:52:-;4882:25;4888:10;4900:6;4882:5;:25::i;:::-;4833:81;:::o;1824:101:21:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1734:212:22:-;926:13;;719:10:43;;-1:-1:-1;;;;;926:13:22;1833:24;;1825:78;;;;-1:-1:-1;;;1825:78:22;;9398:2:82;1825:78:22;;;9380:21:82;9437:2;9417:18;;;9410:30;9476:34;9456:18;;;9449:62;-1:-1:-1;;;9527:18:82;;;9520:39;9576:19;;1825:78:22;9196:405:82;1825:78:22;1913:26;1932:6;1913:18;:26::i;5543:358:52:-;1094:13:21;:11;:13::i;:::-;-1:-1:-1;;;;;5647:28:52;::::1;5643:92;;5698:26;;-1:-1:-1::0;;;5698:26:52::1;;;;;;;;;;;5643:92;1290:3;5748:12;:32;5744:97;;;5803:27;;-1:-1:-1::0;;;5803:27:52::1;;;;;;;;;;;5744:97;-1:-1:-1::0;;;;;5850:29:52;;::::1;;::::0;;;:13:::1;:29;::::0;;;;:44;5543:358::o;2369:102:34:-;2425:13;2457:7;2450:14;;;;;:::i;4384:279:52:-;1094:13:21;:11;:13::i;:::-;1117:14:52::1;4462:6;4447:12;;:21;;;;:::i;:::-;:45;4443:113;;;4515:30;;-1:-1:-1::0;;;4515:30:52::1;;;;;;;;;;;4443:113;4589:12;:22:::0;;;::::1;::::0;;4631:25:::1;4637:10;4605:6:::0;4631:5:::1;:25::i;6575:427:34:-:0;6668:4;719:10:43;6668:4:34;6749:25;719:10:43;6766:7:34;6749:9;:25::i;:::-;6722:52;;6812:15;6792:16;:35;;6784:85;;;;-1:-1:-1;;;6784:85:34;;9808:2:82;6784:85:34;;;9790:21:82;9847:2;9827:18;;;9820:30;9886:34;9866:18;;;9859:62;-1:-1:-1;;;9937:18:82;;;9930:35;9982:19;;6784:85:34;9606:401:82;6784:85:34;6903:60;6912:5;6919:7;6947:15;6928:16;:34;6903:8;:60::i;:::-;-1:-1:-1;6991:4:34;;6575:427;-1:-1:-1;;;;6575:427:34:o;3740:189::-;3819:4;719:10:43;3873:28:34;719:10:43;3890:2:34;3894:6;3873:9;:28::i;3987:149::-;-1:-1:-1;;;;;4102:18:34;;;4076:7;4102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3987:149::o;1139:178:22:-;1094:13:21;:11;:13::i;:::-;1228::22::1;:24:::0;;-1:-1:-1;;;;;1228:24:22;::::1;-1:-1:-1::0;;;;;;1228:24:22;;::::1;::::0;::::1;::::0;;;1292:7:::1;1247::21::0;1273:6;-1:-1:-1;;;;;1273:6:21;;1201:85;1292:7:22::1;-1:-1:-1::0;;;;;1267:43:22::1;;;;;;;;;;;1139:178:::0;:::o;8001:1835:52:-;-1:-1:-1;;;;;8097:28:52;;8093:92;;8148:26;;-1:-1:-1;;;8148:26:52;;;;;;;;;;;8093:92;-1:-1:-1;;;;;8285:31:52;;8245:37;8285:31;;;:15;:31;;;;;;;;:43;;;;;;;;8363:21;;8285:43;;8398:19;;;8394:90;;8440:33;;-1:-1:-1;;;8440:33:52;;;;;;;;;;;8394:90;8642:55;;-1:-1:-1;;;8642:55:52;;;;;1464:25:82;;;8531:60:52;;;;-1:-1:-1;;;;;8642:43:52;;;;;1437:18:82;;8642:55:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8642:55:52;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8493:204:52;;-1:-1:-1;8493:204:52;-1:-1:-1;8766:10:52;;-1:-1:-1;8750:13:52;;-1:-1:-1;8790:99:52;;-1:-1:-1;8790:99:52;;:64;;-1:-1:-1;;;8790:64:52;;;;;10318:25:82;;;-1:-1:-1;;;;;10379:32:82;;;10359:18;;;10352:60;8790:45:52;;;;;10291:18:82;;8790:64:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:99;;;;;;;;:::i;:::-;;8786:162;;8912:25;;-1:-1:-1;;;8912:25:52;;;;;;;;;;;8786:162;-1:-1:-1;;;;;9019:29:52;;;;;;:22;;;:29;;;;;;;;9015:103;;;9071:36;;-1:-1:-1;;;9071:36:52;;;;;;;;;;;9015:103;-1:-1:-1;;;;;9177:29:52;;;;;;;9209:4;9177:22;;;:29;;;;;;;;:36;;-1:-1:-1;;9177:36:52;;;;;;;9403:48;;-1:-1:-1;;;9403:48:52;;;;9177:29;;9403:46;;;;;:48;;;;;9177:29;9403:48;;;;;;:46;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9485:32;;;;9403:115;;-1:-1:-1;;;9403:115:52;;-1:-1:-1;;;;;11167:32:82;;;9403:115:52;;;11149:51:82;11248:18;11236:31;;;11216:18;;;11209:59;9403:74:52;;;;;11122:18:82;;9403:115:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9382:136;;9528:18;9577:5;:8;;;9565:5;:9;;;9549:5;:13;;;:25;;;;:::i;:::-;:36;;;;:::i;:::-;9528:57;;9595:19;9617:51;9629:14;9645:10;9657;9617:11;:51::i;:::-;9595:73;;9719:25;9725:5;9732:11;9719:5;:25::i;:::-;9810:5;-1:-1:-1;;;;;9760:69:52;9798:10;9782:14;-1:-1:-1;;;;;9760:69:52;;9817:11;9760:69;;;;1464:25:82;;1452:2;1437:18;;1318:177;9760:69:52;;;;;;;;8083:1753;;;;;;;;8001:1835;;:::o;2426:187:21:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:21;;;-1:-1:-1;;;;;;2534:17:21;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;10457:340:34:-;-1:-1:-1;;;;;10558:19:34;;10550:68;;;;-1:-1:-1;;;10550:68:34;;11670:2:82;10550:68:34;;;11652:21:82;11709:2;11689:18;;;11682:30;11748:34;11728:18;;;11721:62;-1:-1:-1;;;11799:18:82;;;11792:34;11843:19;;10550:68:34;11468:400:82;10550:68:34;-1:-1:-1;;;;;10636:21:34;;10628:68;;;;-1:-1:-1;;;10628:68:34;;12075:2:82;10628:68:34;;;12057:21:82;12114:2;12094:18;;;12087:30;12153:34;12133:18;;;12126:62;-1:-1:-1;;;12204:18:82;;;12197:32;12246:19;;10628:68:34;11873:398:82;10628:68:34;-1:-1:-1;;;;;10707:18:34;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10758:32;;1464:25:82;;;10758:32:34;;1437:18:82;10758:32:34;;;;;;;;10457:340;;;:::o;11078:411::-;11178:24;11205:25;11215:5;11222:7;11205:9;:25::i;:::-;11178:52;;-1:-1:-1;;11244:16:34;:37;11240:243;;11325:6;11305:16;:26;;11297:68;;;;-1:-1:-1;;;11297:68:34;;12478:2:82;11297:68:34;;;12460:21:82;12517:2;12497:18;;;12490:30;12556:31;12536:18;;;12529:59;12605:18;;11297:68:34;12276:353:82;11297:68:34;11407:51;11416:5;11423:7;11451:6;11432:16;:25;11407:8;:51::i;:::-;11168:321;11078:411;;;:::o;7456:788::-;-1:-1:-1;;;;;7552:18:34;;7544:68;;;;-1:-1:-1;;;7544:68:34;;12836:2:82;7544:68:34;;;12818:21:82;12875:2;12855:18;;;12848:30;12914:34;12894:18;;;12887:62;-1:-1:-1;;;12965:18:82;;;12958:35;13010:19;;7544:68:34;12634:401:82;7544:68:34;-1:-1:-1;;;;;7630:16:34;;7622:64;;;;-1:-1:-1;;;7622:64:34;;13242:2:82;7622:64:34;;;13224:21:82;13281:2;13261:18;;;13254:30;13320:34;13300:18;;;13293:62;-1:-1:-1;;;13371:18:82;;;13364:33;13414:19;;7622:64:34;13040:399:82;7622:64:34;-1:-1:-1;;;;;7768:15:34;;7746:19;7768:15;;;:9;:15;;;;;;7801:21;;;;7793:72;;;;-1:-1:-1;;;7793:72:34;;13646:2:82;7793:72:34;;;13628:21:82;13685:2;13665:18;;;13658:30;13724:34;13704:18;;;13697:62;-1:-1:-1;;;13775:18:82;;;13768:36;13821:19;;7793:72:34;13444:402:82;7793:72:34;-1:-1:-1;;;;;7899:15:34;;;;;;;:9;:15;;;;;;7917:20;;;7899:38;;8114:13;;;;;;;;;;:23;;;;;;8163:26;;;;;;7931:6;1464:25:82;;1452:2;1437:18;;1318:177;8163:26:34;;;;;;;;8200:37;9375:659;1359:130:21;1247:7;1273:6;-1:-1:-1;;;;;1273:6:21;719:10:43;1422:23:21;1414:68;;;;-1:-1:-1;;;1414:68:21;;14053:2:82;1414:68:21;;;14035:21:82;;;14072:18;;;14065:30;14131:34;14111:18;;;14104:62;14183:18;;1414:68:21;13851:356:82;1667:4213:48;1749:14;;;-1:-1:-1;;2286:1:48;2283;2276:20;2329:1;2326;2322:9;2313:18;;2384:5;2380:2;2377:13;2369:5;2365:2;2361:14;2357:34;2348:43;;;2486:5;2495:1;2486:10;2482:368;;2824:11;2816:5;:19;;;;;:::i;:::-;;2809:26;;;;;;2482:368;2974:5;2960:11;:19;2952:53;;;;-1:-1:-1;;;2952:53:48;;14546:2:82;2952:53:48;;;14528:21:82;14585:2;14565:18;;;14558:30;-1:-1:-1;;;14604:18:82;;;14597:51;14665:18;;2952:53:48;14344:345:82;2952:53:48;3261:17;3396:11;3393:1;3390;3383:25;4774:1;3944;3929:12;;:16;;3914:32;;4049:22;;;;4755:1;:15;;4754:21;;5007;;;5003:25;;4992:36;5076:21;;;5072:25;;5061:36;5146:21;;;5142:25;;5131:36;5216:21;;;5212:25;;5201:36;5286:21;;;5282:25;;5271:36;5357:21;;;5353:25;;;5342:36;;;3899:12;4294;;;4290:23;;;4286:31;;;3510:20;;;3499:32;;;4406:12;;;;3557:21;;4147:16;;;;4397:21;;;;5821:15;;;-1:-1:-1;;;;1667:4213:48:o;9375:659:34:-;-1:-1:-1;;;;;9458:21:34;;9450:67;;;;-1:-1:-1;;;9450:67:34;;14896:2:82;9450:67:34;;;14878:21:82;14935:2;14915:18;;;14908:30;14974:34;14954:18;;;14947:62;-1:-1:-1;;;15025:18:82;;;15018:31;15066:19;;9450:67:34;14694:397:82;9450:67:34;-1:-1:-1;;;;;9613:18:34;;9588:22;9613:18;;;:9;:18;;;;;;9649:24;;;;9641:71;;;;-1:-1:-1;;;9641:71:34;;15298:2:82;9641:71:34;;;15280:21:82;15337:2;15317:18;;;15310:30;15376:34;15356:18;;;15349:62;-1:-1:-1;;;15427:18:82;;;15420:32;15469:19;;9641:71:34;15096:398:82;9641:71:34;-1:-1:-1;;;;;9746:18:34;;;;;;:9;:18;;;;;;;;9767:23;;;9746:44;;9883:12;:22;;;;;;;9931:37;1464:25:82;;;9746:18:34;;;9931:37;;1437:18:82;9931:37:34;1318:177:82;1501:153:22;1590:13;1583:20;;-1:-1:-1;;;;;;1583:20:22;;;1613:34;1638:8;1613:24;:34::i;8520:535:34:-;-1:-1:-1;;;;;8603:21:34;;8595:65;;;;-1:-1:-1;;;8595:65:34;;15701:2:82;8595:65:34;;;15683:21:82;15740:2;15720:18;;;15713:30;15779:33;15759:18;;;15752:61;15830:18;;8595:65:34;15499:355:82;8595:65:34;8747:6;8731:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8899:18:34;;;;;;:9;:18;;;;;;;;:28;;;;;;8952:37;1464:25:82;;;8952:37:34;;1437:18:82;8952:37:34;;;;;;;8520:535;;:::o;14:250:82:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:82;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:82;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:82:o;670:131::-;-1:-1:-1;;;;;745:31:82;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:82:o;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:82;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:82;1931:18;;;;1918:32;;1500:456::o;2150:180::-;2209:6;2262:2;2250:9;2241:7;2237:23;2233:32;2230:52;;;2278:1;2275;2268:12;2230:52;-1:-1:-1;2301:23:82;;2150:180;-1:-1:-1;2150:180:82:o;2335:247::-;2394:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;2502:9;2489:23;2521:31;2546:5;2521:31;:::i;2795:388::-;2863:6;2871;2924:2;2912:9;2903:7;2899:23;2895:32;2892:52;;;2940:1;2937;2930:12;2892:52;2979:9;2966:23;2998:31;3023:5;2998:31;:::i;:::-;3048:5;-1:-1:-1;3105:2:82;3090:18;;3077:32;3118:33;3077:32;3118:33;:::i;:::-;3170:7;3160:17;;;2795:388;;;;;:::o;3188:380::-;3267:1;3263:12;;;;3310;;;3331:61;;3385:4;3377:6;3373:17;3363:27;;3331:61;3438:2;3430:6;3427:14;3407:18;3404:38;3401:161;;3484:10;3479:3;3475:20;3472:1;3465:31;3519:4;3516:1;3509:15;3547:4;3544:1;3537:15;3401:161;;3188:380;;;:::o;3573:164::-;3649:13;;3698;;3691:21;3681:32;;3671:60;;3727:1;3724;3717:12;3671:60;3573:164;;;:::o;3742:127::-;3803:10;3798:3;3794:20;3791:1;3784:31;3834:4;3831:1;3824:15;3858:4;3855:1;3848:15;3874:253;3946:2;3940:9;3988:4;3976:17;;4023:18;4008:34;;4044:22;;;4005:62;4002:88;;;4070:18;;:::i;:::-;4106:2;4099:22;3874:253;:::o;4132:::-;4204:2;4198:9;4246:4;4234:17;;4281:18;4266:34;;4302:22;;;4263:62;4260:88;;;4328:18;;:::i;4390:275::-;4461:2;4455:9;4526:2;4507:13;;-1:-1:-1;;4503:27:82;4491:40;;4561:18;4546:34;;4582:22;;;4543:62;4540:88;;;4608:18;;:::i;:::-;4644:2;4637:22;4390:275;;-1:-1:-1;4390:275:82:o;4670:175::-;4748:13;;4801:18;4790:30;;4780:41;;4770:69;;4835:1;4832;4825:12;4850:335;4913:5;4961:4;4949:9;4944:3;4940:19;4936:30;4933:50;;;4979:1;4976;4969:12;4933:50;5001:22;;:::i;:::-;4992:31;;5052:9;5046:16;5039:5;5032:31;5116:2;5105:9;5101:18;5095:25;5090:2;5083:5;5079:14;5072:49;5174:2;5163:9;5159:18;5153:25;5148:2;5141:5;5137:14;5130:49;4850:335;;;;:::o;5190:2228::-;5261:5;5291:4;5335:3;5330:2;5322:6;5318:15;5314:25;5304:53;;5353:1;5350;5343:12;5304:53;5382:6;5376:13;5408:4;5431:18;5468:2;5464;5461:10;5458:36;;;5474:18;;:::i;:::-;5520:2;5517:1;5513:10;5543:28;5567:2;5563;5559:11;5543:28;:::i;:::-;5605:15;;;5675;;;5671:24;;;5636:12;;;;5707:15;;;5704:35;;;5735:1;5732;5725:12;5704:35;5771:2;5763:6;5759:15;5748:26;;5783:1606;5799:6;5794:3;5791:15;5783:1606;;;5878:3;5872:10;5914:2;5901:11;5898:19;5895:109;;;5958:1;5987:2;5983;5976:14;5895:109;6027:24;;6074:4;-1:-1:-1;;6132:12:82;;;6128:21;;6124:30;-1:-1:-1;6121:123:82;;;6196:1;6226:3;6221;6214:16;6121:123;6270:22;;:::i;:::-;6334:2;6330;6326:11;6320:18;6351:33;6376:7;6351:33;:::i;:::-;6397:22;;6443:2;6487:12;;;6481:19;6465:14;;;6458:43;6536:11;;;6530:18;;6564:16;;;6561:109;;;6622:1;6652:3;6647;6640:16;6561:109;6702:8;6698:2;6694:17;6683:28;;6752:3;6747:2;6742:3;6738:12;6734:22;6724:123;;6799:1;6788:12;;6829:3;6824;6817:16;6724:123;6886:2;6881:3;6877:12;6871:19;6860:30;;6914:2;6909:3;6906:11;6903:37;;;6920:18;;:::i;:::-;6968:47;7011:2;7006;7001;6996:3;6992:12;6988:21;6984:30;6968:47;:::i;:::-;6953:62;;7044:3;7035:7;7028:20;7092:3;7086;7080;7075;7071:13;7067:23;7064:32;7061:125;;;7138:1;7168:3;7163;7156:16;7061:125;7199:72;7267:3;7262:2;7253:7;7249:16;7243:3;7238;7234:13;7199:72;:::i;:::-;7291:15;;7284:32;;;;7329:18;;-1:-1:-1;;5816:12:82;;;;7367;;;;5783:1606;;;7407:5;5190:2228;-1:-1:-1;;;;;;;;;5190:2228:82:o;7423:1541::-;7643:6;7651;7659;7667;7675;7683;7727:9;7718:7;7714:23;7757:3;7753:2;7749:12;7746:32;;;7774:1;7771;7764:12;7746:32;7797:37;7824:9;7797:37;:::i;:::-;7787:47;;7853:46;7895:2;7884:9;7880:18;7853:46;:::i;:::-;7843:56;-1:-1:-1;7933:4:82;-1:-1:-1;;7915:16:82;;7911:27;7908:47;;;7951:1;7948;7941:12;7908:47;;7977:22;;:::i;:::-;8044:2;8033:9;8029:18;8023:25;8079:1;8070:7;8067:14;8057:42;;8095:1;8092;8085:12;8057:42;8108:22;;8175:2;8160:18;;8154:25;8223:10;8210:24;;8198:37;;8188:65;;8249:1;8246;8239:12;8188:65;8280:2;8269:14;;8262:31;8325:49;8369:3;8354:19;;8325:49;:::i;:::-;8320:2;8313:5;8309:14;8302:73;8407:49;8451:3;8440:9;8436:19;8407:49;:::i;:::-;8402:2;8395:5;8391:14;8384:73;8490:50;8534:4;8523:9;8519:20;8490:50;:::i;:::-;8484:3;8473:15;;8466:75;8595:3;8580:19;;8574:26;8568:3;8557:15;;8550:51;8477:5;-1:-1:-1;8644:64:82;8700:7;8694:3;8679:19;;8644:64;:::i;:::-;8634:74;;8752:3;8741:9;8737:19;8731:26;8780:18;8772:6;8769:30;8766:50;;;8812:1;8809;8802:12;8766:50;8835:78;8905:7;8896:6;8885:9;8881:22;8835:78;:::i;:::-;8825:88;;;8953:3;8942:9;8938:19;8932:26;8922:36;;7423:1541;;;;;;;;:::o;8969:222::-;9034:9;;;9055:10;;;9052:133;;;9107:10;9102:3;9098:20;9095:1;9088:31;9142:4;9139:1;9132:15;9170:4;9167:1;9160:15;10012:127;10073:10;10068:3;10064:20;10061:1;10054:31;10104:4;10101:1;10094:15;10128:4;10125:1;10118:15;10423:276;10509:6;10562:2;10550:9;10541:7;10537:23;10533:32;10530:52;;;10578:1;10575;10568:12;10530:52;10610:9;10604:16;10649:1;10642:5;10639:12;10629:40;;10665:1;10662;10655:12;10704:267;10790:6;10843:2;10831:9;10822:7;10818:23;10814:32;10811:52;;;10859:1;10856;10849:12;10811:52;10891:9;10885:16;10910:31;10935:5;10910:31;:::i;11279:184::-;11349:6;11402:2;11390:9;11381:7;11377:23;11373:32;11370:52;;;11418:1;11415;11408:12;11370:52;-1:-1:-1;11441:16:82;;11279:184;-1:-1:-1;11279:184:82:o;14212:127::-;14273:10;14268:3;14264:20;14261:1;14254:31;14304:4;14301:1;14294:15;14328:4;14325:1;14318:15",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "IMMUTABLE_PERIOD()": "0edff0f1",
    "MAX_VOTING_REWARD()": "9e121c39",
    "MINTABLE_TOTAL_SUPPLY()": "0b53c60b",
    "VOTING_REWARD_DENOMINATOR()": "1d3b56fe",
    "acceptOwnership()": "79ba5097",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "assignProposalReward(address,uint256)": "37c79561",
    "balanceOf(address)": "70a08231",
    "burn(uint256)": "42966c68",
    "claimProposalReward(address,uint256)": "fda599b1",
    "decimals()": "313ce567",
    "decreaseAllowance(address,uint256)": "a457c2d7",
    "increaseAllowance(address,uint256)": "39509351",
    "mint(uint256)": "a0712d68",
    "mintedSupply()": "c1bd8cf9",
    "name()": "06fdde03",
    "owner()": "8da5cb5b",
    "pendingOwner()": "e30c3978",
    "proposalRewards(address,uint256)": "360aceb7",
    "renounceOwnership()": "715018a6",
    "setVotingReward(address,uint256)": "852f3945",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b",
    "votingRewards(address)": "a43daf6d"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerHasNotVoted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVotingReward\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintableSupplyExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposalNotExecuted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"ProposalRewardAlreadyAssigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposalRewardAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposalRewardNotAssigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposalSnapshotInImmutablePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VotingRewardNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroVotingContract\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"ProposalRewardAssigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"voterReward\",\"type\":\"uint256\"}],\"name\":\"ProposalRewardClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IMMUTABLE_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VOTING_REWARD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTABLE_TOTAL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VOTING_REWARD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"assignProposalReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"claimProposalReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintedSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingReward\",\"type\":\"uint256\"}],\"name\":\"setVotingReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"votingContract\",\"type\":\"address\"}],\"name\":\"votingRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is Ownable2Step, which means that the ownership transfer must be accepted by the new owner. The token is mintable and burnable by the owner.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"ProposalRewardAssigned(address,uint256,uint256)\":{\"params\":{\"proposalId\":\"The proposal id.\",\"reward\":\"The reward amount.\",\"votingContract\":\"The voting contract address.\"}},\"ProposalRewardClaimed(address,uint256,address,uint256)\":{\"params\":{\"proposalId\":\"The proposal id.\",\"voter\":\"The voter address.\",\"voterReward\":\"The voters reward amount.\",\"votingContract\":\"The voting contract address.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"assignProposalReward(address,uint256)\":{\"details\":\"The reward can be assigned only by the owner after the immutable period for an executed proposal. The reward is calculated from the current total supply.\",\"params\":{\"proposalId\":\"The proposal id.\",\"votingContract\":\"The voting contract address.\"}},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"params\":{\"amount\":\"The amount of tokens to burn.\"}},\"claimProposalReward(address,uint256)\":{\"details\":\"The reward can be claimed only if the caller has voted. It doesn't matter if the caller voted yes, no or abstained.\",\"params\":{\"proposalId\":\"The proposal id.\",\"votingContract\":\"The voting contract address.\"}},\"constructor\":{\"details\":\"The owner must be the PWN DAO.\",\"params\":{\"_owner\":\"The owner address.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"mint(uint256)\":{\"details\":\"The owner can mint tokens only until the `MINTABLE_TOTAL_SUPPLY` is reached. Newly minted tokens are automatically assigned to the caller.\",\"params\":{\"amount\":\"The amount of tokens to mint.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setVotingReward(address,uint256)\":{\"details\":\"The reward can be set only by the owner and cannot exceed `MAX_VOTING_REWARD`. The reward is calculated from the current total supply at the moment of assigning the reward.\",\"params\":{\"votingContract\":\"The voting contract address.\",\"votingReward\":\"The voting reward nominator. Passing 0 disables the reward.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"proposalRewards\":{\"details\":\"The voters reward is proportional to the amount of votes the voter had in the snapshot epoch.\"},\"votingRewards\":{\"details\":\"The reward cannot be set to more than `MAX_VOTING_REWARD` of the total supply. The reward is divided by `VOTING_REWARD_DENOMINATOR` to get the actual percentage.\"}},\"title\":\"PWN token contract.\",\"version\":1},\"userdoc\":{\"events\":{\"ProposalRewardAssigned(address,uint256,uint256)\":{\"notice\":\"Emitted when the owner assigns a reward to a governance proposal.\"},\"ProposalRewardClaimed(address,uint256,address,uint256)\":{\"notice\":\"Emitted when a voter claims his reward for voting in a proposal.\"}},\"kind\":\"user\",\"methods\":{\"IMMUTABLE_PERIOD()\":{\"notice\":\"The immutable period (in epochs) after which voting rewards can be set.\"},\"MAX_VOTING_REWARD()\":{\"notice\":\"The maximum voting reward nominator that can be set to a voting contract.\"},\"MINTABLE_TOTAL_SUPPLY()\":{\"notice\":\"The total supply of the token that can be minted by the owner.\"},\"VOTING_REWARD_DENOMINATOR()\":{\"notice\":\"The denominator of the voting reward.\"},\"assignProposalReward(address,uint256)\":{\"notice\":\"Assigns a reward to a governance proposal.\"},\"burn(uint256)\":{\"notice\":\"Burns tokens. It doesn't increase the number of tokens that can be minted by the owner.\"},\"claimProposalReward(address,uint256)\":{\"notice\":\"Claims the reward for voting in a proposal.\"},\"constructor\":{\"notice\":\"PWN token constructor.\"},\"mint(uint256)\":{\"notice\":\"Mints new tokens.\"},\"mintedSupply()\":{\"notice\":\"Amount of tokens already minted by the owner.\"},\"proposalRewards(address,uint256)\":{\"notice\":\"Assigned reward for voting in a proposal.\"},\"setVotingReward(address,uint256)\":{\"notice\":\"Sets the reward for voting in a proposal of a voting contract.\"},\"votingRewards(address)\":{\"notice\":\"Percentage of the total supply that can be assigned as a reward for voting in the voting contract.\"}},\"notice\":\"The token is the main governance token of the PWN DAO and is used as a reward for voting in proposals.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/PWN.sol\":\"PWN\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e\",\"dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q\"]},\"lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x1618ddebe73377660f6da71afcba35d5ac4c4600918b3a381d9c6f37eba613eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://666c8d7c62478b55e082f1835275b7acfc1595491998df6d67183ff2c70eab96\",\"dweb:/ipfs/QmVXmnXfxNaLhoX283dqyKJ8DJbF5thUd9sMuRoFpNMwr7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cac938788bc4be12101e59d45588b4e059579f4e61062e1cda8d6b06c0191b15\",\"dweb:/ipfs/QmV2JKCyjTVH3rkWNrfdJRhAT7tZ3usAN2XcnD4h53Mvih\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"src/PWN.sol\":{\"keccak256\":\"0x72bb9bcd405d3993f86351a1320b78a0c772b6cb0ee095553987b595fb370883\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://c2b33ed3e6f780a469cda95085a1f3c6f334d7dc79a75c951e1ede1dc3271ef0\",\"dweb:/ipfs/QmcAZ6DaeY45uYQ1BamH68Y1jwDX7u1HGogLan62PLiyix\"]},\"src/interfaces/IVotingContract.sol\":{\"keccak256\":\"0xcae933dc722c7e44d49742fa3f0f669298921c1e4f12b594a491ab7dfd588b47\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://8a61fb9f14e7630ed30fff0b6e4fc437d940d3617d5cf9c25a150849537955c5\",\"dweb:/ipfs/QmbbmC1c8PhvYxP9FNo9a4Y6Hbjan9fqyNjrRzzsAoAdMS\"]},\"src/lib/Error.sol\":{\"keccak256\":\"0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90\",\"dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.18+commit.87f61d96"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "CallerHasNotVoted"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidVotingReward"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MintableSupplyExceeded"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ProposalNotExecuted"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reward",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "ProposalRewardAlreadyAssigned"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ProposalRewardAlreadyClaimed"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ProposalRewardNotAssigned"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ProposalSnapshotInImmutablePeriod"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "VotingRewardNotSet"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ZeroVotingContract"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferStarted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "proposalId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "reward",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ProposalRewardAssigned",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "proposalId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "voter",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "voterReward",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ProposalRewardClaimed",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "IMMUTABLE_PERIOD",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MAX_VOTING_REWARD",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MINTABLE_TOTAL_SUPPLY",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "VOTING_REWARD_DENOMINATOR",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "proposalId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "assignProposalReward"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "proposalId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "claimProposalReward"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "subtractedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "decreaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "addedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "increaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "mintedSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pendingOwner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "proposalId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "proposalRewards",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "reward",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "votingReward",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setVotingReward"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "votingContract",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "votingRewards",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "reward",
              "type": "uint256"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "acceptOwnership()": {
            "details": "The new owner accepts the ownership transfer."
          },
          "allowance(address,address)": {
            "details": "See {IERC20-allowance}."
          },
          "approve(address,uint256)": {
            "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
          },
          "assignProposalReward(address,uint256)": {
            "details": "The reward can be assigned only by the owner after the immutable period for an executed proposal. The reward is calculated from the current total supply.",
            "params": {
              "proposalId": "The proposal id.",
              "votingContract": "The voting contract address."
            }
          },
          "balanceOf(address)": {
            "details": "See {IERC20-balanceOf}."
          },
          "burn(uint256)": {
            "params": {
              "amount": "The amount of tokens to burn."
            }
          },
          "claimProposalReward(address,uint256)": {
            "details": "The reward can be claimed only if the caller has voted. It doesn't matter if the caller voted yes, no or abstained.",
            "params": {
              "proposalId": "The proposal id.",
              "votingContract": "The voting contract address."
            }
          },
          "constructor": {
            "details": "The owner must be the PWN DAO.",
            "params": {
              "_owner": "The owner address."
            }
          },
          "decimals()": {
            "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
          },
          "decreaseAllowance(address,uint256)": {
            "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
          },
          "increaseAllowance(address,uint256)": {
            "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
          },
          "mint(uint256)": {
            "details": "The owner can mint tokens only until the `MINTABLE_TOTAL_SUPPLY` is reached. Newly minted tokens are automatically assigned to the caller.",
            "params": {
              "amount": "The amount of tokens to mint."
            }
          },
          "name()": {
            "details": "Returns the name of the token."
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "pendingOwner()": {
            "details": "Returns the address of the pending owner."
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
          },
          "setVotingReward(address,uint256)": {
            "details": "The reward can be set only by the owner and cannot exceed `MAX_VOTING_REWARD`. The reward is calculated from the current total supply at the moment of assigning the reward.",
            "params": {
              "votingContract": "The voting contract address.",
              "votingReward": "The voting reward nominator. Passing 0 disables the reward."
            }
          },
          "symbol()": {
            "details": "Returns the symbol of the token, usually a shorter version of the name."
          },
          "totalSupply()": {
            "details": "See {IERC20-totalSupply}."
          },
          "transfer(address,uint256)": {
            "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
          },
          "transferFrom(address,address,uint256)": {
            "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
          },
          "transferOwnership(address)": {
            "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "IMMUTABLE_PERIOD()": {
            "notice": "The immutable period (in epochs) after which voting rewards can be set."
          },
          "MAX_VOTING_REWARD()": {
            "notice": "The maximum voting reward nominator that can be set to a voting contract."
          },
          "MINTABLE_TOTAL_SUPPLY()": {
            "notice": "The total supply of the token that can be minted by the owner."
          },
          "VOTING_REWARD_DENOMINATOR()": {
            "notice": "The denominator of the voting reward."
          },
          "assignProposalReward(address,uint256)": {
            "notice": "Assigns a reward to a governance proposal."
          },
          "burn(uint256)": {
            "notice": "Burns tokens. It doesn't increase the number of tokens that can be minted by the owner."
          },
          "claimProposalReward(address,uint256)": {
            "notice": "Claims the reward for voting in a proposal."
          },
          "constructor": {
            "notice": "PWN token constructor."
          },
          "mint(uint256)": {
            "notice": "Mints new tokens."
          },
          "mintedSupply()": {
            "notice": "Amount of tokens already minted by the owner."
          },
          "proposalRewards(address,uint256)": {
            "notice": "Assigned reward for voting in a proposal."
          },
          "setVotingReward(address,uint256)": {
            "notice": "Sets the reward for voting in a proposal of a voting contract."
          },
          "votingRewards(address)": {
            "notice": "Percentage of the total supply that can be assigned as a reward for voting in the voting contract."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin/=lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/PWN.sol": "PWN"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218",
        "urls": [
          "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32",
          "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
        "keccak256": "0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c",
        "urls": [
          "bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e",
          "dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol": {
        "keccak256": "0x1618ddebe73377660f6da71afcba35d5ac4c4600918b3a381d9c6f37eba613eb",
        "urls": [
          "bzz-raw://666c8d7c62478b55e082f1835275b7acfc1595491998df6d67183ff2c70eab96",
          "dweb:/ipfs/QmVXmnXfxNaLhoX283dqyKJ8DJbF5thUd9sMuRoFpNMwr7"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
        "keccak256": "0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c",
        "urls": [
          "bzz-raw://cac938788bc4be12101e59d45588b4e059579f4e61062e1cda8d6b06c0191b15",
          "dweb:/ipfs/QmV2JKCyjTVH3rkWNrfdJRhAT7tZ3usAN2XcnD4h53Mvih"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305",
        "urls": [
          "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5",
          "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "keccak256": "0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca",
        "urls": [
          "bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd",
          "dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3",
        "urls": [
          "bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c",
          "dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS"
        ],
        "license": "MIT"
      },
      "src/PWN.sol": {
        "keccak256": "0x72bb9bcd405d3993f86351a1320b78a0c772b6cb0ee095553987b595fb370883",
        "urls": [
          "bzz-raw://c2b33ed3e6f780a469cda95085a1f3c6f334d7dc79a75c951e1ede1dc3271ef0",
          "dweb:/ipfs/QmcAZ6DaeY45uYQ1BamH68Y1jwDX7u1HGogLan62PLiyix"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IVotingContract.sol": {
        "keccak256": "0xcae933dc722c7e44d49742fa3f0f669298921c1e4f12b594a491ab7dfd588b47",
        "urls": [
          "bzz-raw://8a61fb9f14e7630ed30fff0b6e4fc437d940d3617d5cf9c25a150849537955c5",
          "dweb:/ipfs/QmbbmC1c8PhvYxP9FNo9a4Y6Hbjan9fqyNjrRzzsAoAdMS"
        ],
        "license": "GPL-3.0-only"
      },
      "src/lib/Error.sol": {
        "keccak256": "0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c",
        "urls": [
          "bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90",
          "dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto"
        ],
        "license": "GPL-3.0-only"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/PWN.sol",
    "id": 51454,
    "exportedSymbols": {
      "ERC20": [
        46403
      ],
      "Error": [
        52544
      ],
      "IVotingContract": [
        52279
      ],
      "Math": [
        49234
      ],
      "Ownable2Step": [
        44794
      ],
      "PWN": [
        51453
      ]
    },
    "nodeType": "SourceUnit",
    "src": "41:9799:52",
    "nodes": [
      {
        "id": 51014,
        "nodeType": "PragmaDirective",
        "src": "41:23:52",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".18"
        ]
      },
      {
        "id": 51016,
        "nodeType": "ImportDirective",
        "src": "66:88:52",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol",
        "file": "openzeppelin-contracts/contracts/access/Ownable2Step.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51454,
        "sourceUnit": 44795,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51015,
              "name": "Ownable2Step",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 44794,
              "src": "75:12:52",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51018,
        "nodeType": "ImportDirective",
        "src": "155:79:52",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51454,
        "sourceUnit": 46404,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51017,
              "name": "ERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46403,
              "src": "164:5:52",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51020,
        "nodeType": "ImportDirective",
        "src": "235:76:52",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
        "file": "openzeppelin-contracts/contracts/utils/math/Math.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51454,
        "sourceUnit": 49235,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51019,
              "name": "Math",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49234,
              "src": "244:4:52",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51022,
        "nodeType": "ImportDirective",
        "src": "313:67:52",
        "nodes": [],
        "absolutePath": "src/interfaces/IVotingContract.sol",
        "file": "./interfaces/IVotingContract.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51454,
        "sourceUnit": 52280,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51021,
              "name": "IVotingContract",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52279,
              "src": "322:15:52",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51024,
        "nodeType": "ImportDirective",
        "src": "381:40:52",
        "nodes": [],
        "absolutePath": "src/lib/Error.sol",
        "file": "./lib/Error.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51454,
        "sourceUnit": 52545,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51023,
              "name": "Error",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52544,
              "src": "390:5:52",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51453,
        "nodeType": "ContractDefinition",
        "src": "745:9094:52",
        "nodes": [
          {
            "id": 51033,
            "nodeType": "VariableDeclaration",
            "src": "1069:62:52",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 51030,
              "nodeType": "StructuredDocumentation",
              "src": "990:74:52",
              "text": "@notice The total supply of the token that can be minted by the owner."
            },
            "functionSelector": "0b53c60b",
            "mutability": "constant",
            "name": "MINTABLE_TOTAL_SUPPLY",
            "nameLocation": "1093:21:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51031,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1069:7:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3130305f3030305f303030653138",
              "id": 51032,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1117:14:52",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000000000000000000000_by_1",
                "typeString": "int_const 100000000000000000000000000"
              },
              "value": "100_000_000e18"
            },
            "visibility": "public"
          },
          {
            "id": 51037,
            "nodeType": "VariableDeclaration",
            "src": "1246:47:52",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 51034,
              "nodeType": "StructuredDocumentation",
              "src": "1156:85:52",
              "text": "@notice The maximum voting reward nominator that can be set to a voting contract."
            },
            "functionSelector": "9e121c39",
            "mutability": "constant",
            "name": "MAX_VOTING_REWARD",
            "nameLocation": "1270:17:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51035,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1246:7:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "313030",
              "id": 51036,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1290:3:52",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100_by_1",
                "typeString": "int_const 100"
              },
              "value": "100"
            },
            "visibility": "public"
          },
          {
            "id": 51041,
            "nodeType": "VariableDeclaration",
            "src": "1359:57:52",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 51038,
              "nodeType": "StructuredDocumentation",
              "src": "1305:49:52",
              "text": "@notice The denominator of the voting reward."
            },
            "functionSelector": "1d3b56fe",
            "mutability": "constant",
            "name": "VOTING_REWARD_DENOMINATOR",
            "nameLocation": "1383:25:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51039,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1359:7:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3130303030",
              "id": 51040,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1411:5:52",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "value": "10000"
            },
            "visibility": "public"
          },
          {
            "id": 51045,
            "nodeType": "VariableDeclaration",
            "src": "1510:45:52",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 51042,
              "nodeType": "StructuredDocumentation",
              "src": "1422:83:52",
              "text": "@notice The immutable period (in epochs) after which voting rewards can be set."
            },
            "functionSelector": "0edff0f1",
            "mutability": "constant",
            "name": "IMMUTABLE_PERIOD",
            "nameLocation": "1534:16:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51043,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1510:7:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3236",
              "id": 51044,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1553:2:52",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_26_by_1",
                "typeString": "int_const 26"
              },
              "value": "26"
            },
            "visibility": "public"
          },
          {
            "id": 51048,
            "nodeType": "VariableDeclaration",
            "src": "1636:27:52",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51046,
              "nodeType": "StructuredDocumentation",
              "src": "1574:57:52",
              "text": "@notice Amount of tokens already minted by the owner."
            },
            "functionSelector": "c1bd8cf9",
            "mutability": "mutable",
            "name": "mintedSupply",
            "nameLocation": "1651:12:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 51047,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1636:7:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 51053,
            "nodeType": "VariableDeclaration",
            "src": "1968:70:52",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51049,
              "nodeType": "StructuredDocumentation",
              "src": "1670:293:52",
              "text": "@notice Percentage of the total supply that can be assigned as a reward for voting in the voting contract.\n @dev The reward cannot be set to more than `MAX_VOTING_REWARD` of the total supply.\n The reward is divided by `VOTING_REWARD_DENOMINATOR` to get the actual percentage."
            },
            "functionSelector": "a43daf6d",
            "mutability": "mutable",
            "name": "votingRewards",
            "nameLocation": "2025:13:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 51052,
              "keyName": "votingContract",
              "keyNameLocation": "1984:14:52",
              "keyType": {
                "id": 51050,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1976:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1968:49:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "reward",
              "valueNameLocation": "2010:6:52",
              "valueType": {
                "id": 51051,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2002:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 51060,
            "nodeType": "StructDefinition",
            "src": "2090:109:52",
            "nodes": [],
            "canonicalName": "PWN.ProposalReward",
            "members": [
              {
                "constant": false,
                "id": 51055,
                "mutability": "mutable",
                "name": "reward",
                "nameLocation": "2130:6:52",
                "nodeType": "VariableDeclaration",
                "scope": 51060,
                "src": "2122:14:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 51054,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2122:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 51059,
                "mutability": "mutable",
                "name": "claimed",
                "nameLocation": "2185:7:52",
                "nodeType": "VariableDeclaration",
                "scope": 51060,
                "src": "2146:46:52",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 51058,
                  "keyName": "voter",
                  "keyNameLocation": "2162:5:52",
                  "keyType": {
                    "id": 51056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2154:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "2146:38:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueName": "claimed",
                  "valueNameLocation": "2176:7:52",
                  "valueType": {
                    "id": 51057,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2171:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ProposalReward",
            "nameLocation": "2097:14:52",
            "scope": 51453,
            "visibility": "public"
          },
          {
            "id": 51068,
            "nodeType": "VariableDeclaration",
            "src": "2369:110:52",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51061,
              "nodeType": "StructuredDocumentation",
              "src": "2204:160:52",
              "text": "@notice Assigned reward for voting in a proposal.\n @dev The voters reward is proportional to the amount of votes the voter had in the snapshot epoch."
            },
            "functionSelector": "360aceb7",
            "mutability": "mutable",
            "name": "proposalRewards",
            "nameLocation": "2464:15:52",
            "scope": 51453,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$_$",
              "typeString": "mapping(address => mapping(uint256 => struct PWN.ProposalReward))"
            },
            "typeName": {
              "id": 51067,
              "keyName": "votingContract",
              "keyNameLocation": "2385:14:52",
              "keyType": {
                "id": 51062,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2377:7:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2369:87:52",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$_$",
                "typeString": "mapping(address => mapping(uint256 => struct PWN.ProposalReward))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 51066,
                "keyName": "proposalId",
                "keyNameLocation": "2419:10:52",
                "keyType": {
                  "id": 51063,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2411:7:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "2403:52:52",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$",
                  "typeString": "mapping(uint256 => struct PWN.ProposalReward)"
                },
                "valueName": "reward",
                "valueNameLocation": "2448:6:52",
                "valueType": {
                  "id": 51065,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 51064,
                    "name": "ProposalReward",
                    "nameLocations": [
                      "2433:14:52"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 51060,
                    "src": "2433:14:52"
                  },
                  "referencedDeclaration": 51060,
                  "src": "2433:14:52",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                    "typeString": "struct PWN.ProposalReward"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 51077,
            "nodeType": "EventDefinition",
            "src": "2914:135:52",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 51069,
              "nodeType": "StructuredDocumentation",
              "src": "2689:220:52",
              "text": "@notice Emitted when the owner assigns a reward to a governance proposal.\n @param votingContract The voting contract address.\n @param proposalId The proposal id.\n @param reward The reward amount."
            },
            "eventSelector": "01b41864e51b7647b2303e079be028a4df8d5c9ae30e2a8855d46ba89dfc6e2a",
            "name": "ProposalRewardAssigned",
            "nameLocation": "2920:22:52",
            "parameters": {
              "id": 51076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51071,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "votingContract",
                  "nameLocation": "2968:14:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51077,
                  "src": "2952:30:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2952:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51073,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "proposalId",
                  "nameLocation": "3008:10:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51077,
                  "src": "2992:26:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51072,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2992:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51075,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "reward",
                  "nameLocation": "3036:6:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51077,
                  "src": "3028:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3028:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2942:106:52"
            }
          },
          {
            "id": 51088,
            "nodeType": "EventDefinition",
            "src": "3331:170:52",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 51078,
              "nodeType": "StructuredDocumentation",
              "src": "3055:271:52",
              "text": "@notice Emitted when a voter claims his reward for voting in a proposal.\n @param votingContract The voting contract address.\n @param proposalId The proposal id.\n @param voter The voter address.\n @param voterReward The voters reward amount."
            },
            "eventSelector": "e5877305879fe1f016eb4153551eb9b3d11786d817b00d1dc3b13a880d13bd94",
            "name": "ProposalRewardClaimed",
            "nameLocation": "3337:21:52",
            "parameters": {
              "id": 51087,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51080,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "votingContract",
                  "nameLocation": "3384:14:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51088,
                  "src": "3368:30:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51079,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3368:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51082,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "proposalId",
                  "nameLocation": "3424:10:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51088,
                  "src": "3408:26:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3408:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51084,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "voter",
                  "nameLocation": "3460:5:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51088,
                  "src": "3444:21:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3444:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51086,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "voterReward",
                  "nameLocation": "3483:11:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51088,
                  "src": "3475:19:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51085,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3475:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3358:142:52"
            }
          },
          {
            "id": 51103,
            "nodeType": "FunctionDefinition",
            "src": "3834:95:52",
            "nodes": [],
            "body": {
              "id": 51102,
              "nodeType": "Block",
              "src": "3886:43:52",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51099,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51091,
                        "src": "3915:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51098,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        44771
                      ],
                      "referencedDeclaration": 44771,
                      "src": "3896:18:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3896:26:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51101,
                  "nodeType": "ExpressionStatement",
                  "src": "3896:26:52"
                }
              ]
            },
            "documentation": {
              "id": 51089,
              "nodeType": "StructuredDocumentation",
              "src": "3710:119:52",
              "text": "@notice PWN token constructor.\n @dev The owner must be the PWN DAO.\n @param _owner The owner address."
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "hexValue": "50574e2044414f",
                    "id": 51094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3868:9:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_2d4e649783ed88678866d336e6737ca606a2171262989d51374a7ce4b425864c",
                      "typeString": "literal_string \"PWN DAO\""
                    },
                    "value": "PWN DAO"
                  },
                  {
                    "hexValue": "50574e",
                    "id": 51095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3879:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_becbc5e7d5b58d6f1c8ea79197877ea15b6d3f333b75c73ffc7ce124e395e163",
                      "typeString": "literal_string \"PWN\""
                    },
                    "value": "PWN"
                  }
                ],
                "id": 51096,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 51093,
                  "name": "ERC20",
                  "nameLocations": [
                    "3862:5:52"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 46403,
                  "src": "3862:5:52"
                },
                "nodeType": "ModifierInvocation",
                "src": "3862:23:52"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 51092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51091,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3854:6:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51103,
                  "src": "3846:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51090,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3846:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3845:16:52"
            },
            "returnParameters": {
              "id": 51097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3886:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 51135,
            "nodeType": "FunctionDefinition",
            "src": "4384:279:52",
            "nodes": [],
            "body": {
              "id": 51134,
              "nodeType": "Block",
              "src": "4433:230:52",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 51113,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 51111,
                        "name": "mintedSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51048,
                        "src": "4447:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 51112,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51106,
                        "src": "4462:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4447:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51114,
                      "name": "MINTABLE_TOTAL_SUPPLY",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51033,
                      "src": "4471:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4447:45:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51122,
                  "nodeType": "IfStatement",
                  "src": "4443:113:52",
                  "trueBody": {
                    "id": 51121,
                    "nodeType": "Block",
                    "src": "4494:62:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51116,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "4515:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51118,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4521:22:52",
                            "memberName": "MintableSupplyExceeded",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52479,
                            "src": "4515:28:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4515:30:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51120,
                        "nodeType": "RevertStatement",
                        "src": "4508:37:52"
                      }
                    ]
                  }
                },
                {
                  "id": 51127,
                  "nodeType": "UncheckedBlock",
                  "src": "4565:57:52",
                  "statements": [
                    {
                      "expression": {
                        "id": 51125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 51123,
                          "name": "mintedSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51048,
                          "src": "4589:12:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 51124,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51106,
                          "src": "4605:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4589:22:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 51126,
                      "nodeType": "ExpressionStatement",
                      "src": "4589:22:52"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 51129,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4637:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 51130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4641:6:52",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4637:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51131,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51106,
                        "src": "4649:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51128,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46220,
                      "src": "4631:5:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 51132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4631:25:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51133,
                  "nodeType": "ExpressionStatement",
                  "src": "4631:25:52"
                }
              ]
            },
            "documentation": {
              "id": 51104,
              "nodeType": "StructuredDocumentation",
              "src": "4138:241:52",
              "text": "@notice Mints new tokens.\n @dev The owner can mint tokens only until the `MINTABLE_TOTAL_SUPPLY` is reached.\n Newly minted tokens are automatically assigned to the caller.\n @param amount The amount of tokens to mint."
            },
            "functionSelector": "a0712d68",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51109,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51108,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "4423:9:52"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44630,
                  "src": "4423:9:52"
                },
                "nodeType": "ModifierInvocation",
                "src": "4423:9:52"
              }
            ],
            "name": "mint",
            "nameLocation": "4393:4:52",
            "parameters": {
              "id": 51107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51106,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4406:6:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51135,
                  "src": "4398:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51105,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4398:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4397:16:52"
            },
            "returnParameters": {
              "id": 51110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4433:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51148,
            "nodeType": "FunctionDefinition",
            "src": "4833:81:52",
            "nodes": [],
            "body": {
              "id": 51147,
              "nodeType": "Block",
              "src": "4872:42:52",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 51142,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4888:3:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 51143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4892:6:52",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4888:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51144,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51138,
                        "src": "4900:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51141,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46292,
                      "src": "4882:5:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 51145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4882:25:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51146,
                  "nodeType": "ExpressionStatement",
                  "src": "4882:25:52"
                }
              ]
            },
            "documentation": {
              "id": 51136,
              "nodeType": "StructuredDocumentation",
              "src": "4669:159:52",
              "text": "@notice Burns tokens.\n It doesn't increase the number of tokens that can be minted by the owner.\n @param amount The amount of tokens to burn."
            },
            "functionSelector": "42966c68",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burn",
            "nameLocation": "4842:4:52",
            "parameters": {
              "id": 51139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51138,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4855:6:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51148,
                  "src": "4847:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51137,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4847:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4846:16:52"
            },
            "returnParameters": {
              "id": 51140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4872:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51188,
            "nodeType": "FunctionDefinition",
            "src": "5543:358:52",
            "nodes": [],
            "body": {
              "id": 51187,
              "nodeType": "Block",
              "src": "5633:268:52",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51158,
                      "name": "votingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51151,
                      "src": "5647:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 51161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5673:1:52",
                          "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": 51160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5665:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51159,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5665:7:52",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5665:10:52",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5647:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51170,
                  "nodeType": "IfStatement",
                  "src": "5643:92:52",
                  "trueBody": {
                    "id": 51169,
                    "nodeType": "Block",
                    "src": "5677:58:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51164,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "5698:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5704:18:52",
                            "memberName": "ZeroVotingContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52481,
                            "src": "5698:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5698:26:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51168,
                        "nodeType": "RevertStatement",
                        "src": "5691:33:52"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51171,
                      "name": "votingReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51153,
                      "src": "5748:12:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51172,
                      "name": "MAX_VOTING_REWARD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51037,
                      "src": "5763:17:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5748:32:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51180,
                  "nodeType": "IfStatement",
                  "src": "5744:97:52",
                  "trueBody": {
                    "id": 51179,
                    "nodeType": "Block",
                    "src": "5782:59:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51174,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "5803:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5809:19:52",
                            "memberName": "InvalidVotingReward",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52499,
                            "src": "5803:25:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5803:27:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51178,
                        "nodeType": "RevertStatement",
                        "src": "5796:34:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 51185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51181,
                        "name": "votingRewards",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51053,
                        "src": "5850:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 51183,
                      "indexExpression": {
                        "id": 51182,
                        "name": "votingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51151,
                        "src": "5864:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5850:29:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51184,
                      "name": "votingReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51153,
                      "src": "5882:12:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5850:44:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 51186,
                  "nodeType": "ExpressionStatement",
                  "src": "5850:44:52"
                }
              ]
            },
            "documentation": {
              "id": 51149,
              "nodeType": "StructuredDocumentation",
              "src": "5123:415:52",
              "text": "@notice Sets the reward for voting in a proposal of a voting contract.\n @dev The reward can be set only by the owner and cannot exceed `MAX_VOTING_REWARD`.\n The reward is calculated from the current total supply at the moment of assigning the reward.\n @param votingContract The voting contract address.\n @param votingReward The voting reward nominator. Passing 0 disables the reward."
            },
            "functionSelector": "852f3945",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51156,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51155,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "5623:9:52"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44630,
                  "src": "5623:9:52"
                },
                "nodeType": "ModifierInvocation",
                "src": "5623:9:52"
              }
            ],
            "name": "setVotingReward",
            "nameLocation": "5552:15:52",
            "parameters": {
              "id": 51154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51151,
                  "mutability": "mutable",
                  "name": "votingContract",
                  "nameLocation": "5576:14:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51188,
                  "src": "5568:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5568:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51153,
                  "mutability": "mutable",
                  "name": "votingReward",
                  "nameLocation": "5600:12:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51188,
                  "src": "5592:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5592:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5567:46:52"
            },
            "returnParameters": {
              "id": 51157,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5633:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51304,
            "nodeType": "FunctionDefinition",
            "src": "6243:1453:52",
            "nodes": [],
            "body": {
              "id": 51303,
              "nodeType": "Block",
              "src": "6336:1360:52",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51198,
                      "name": "votingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51191,
                      "src": "6350:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 51201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6376:1:52",
                          "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": 51200,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6368:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6368:7:52",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6368:10:52",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6350:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51210,
                  "nodeType": "IfStatement",
                  "src": "6346:92:52",
                  "trueBody": {
                    "id": 51209,
                    "nodeType": "Block",
                    "src": "6380:58:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51204,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "6401:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6407:18:52",
                            "memberName": "ZeroVotingContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52481,
                            "src": "6401:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6401:26:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51208,
                        "nodeType": "RevertStatement",
                        "src": "6394:33:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51212
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51212,
                      "mutability": "mutable",
                      "name": "votingReward",
                      "nameLocation": "6455:12:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51303,
                      "src": "6447:20:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51211,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6447:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51216,
                  "initialValue": {
                    "baseExpression": {
                      "id": 51213,
                      "name": "votingRewards",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51053,
                      "src": "6470:13:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 51215,
                    "indexExpression": {
                      "id": 51214,
                      "name": "votingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51191,
                      "src": "6484:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6470:29:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6447:52:52"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51217,
                      "name": "votingReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51212,
                      "src": "6513:12:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 51218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6529:1:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6513:17:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51226,
                  "nodeType": "IfStatement",
                  "src": "6509:81:52",
                  "trueBody": {
                    "id": 51225,
                    "nodeType": "Block",
                    "src": "6532:58:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51220,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "6553:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51222,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6559:18:52",
                            "memberName": "VotingRewardNotSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52483,
                            "src": "6553:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6553:26:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51224,
                        "nodeType": "RevertStatement",
                        "src": "6546:33:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51229
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51229,
                      "mutability": "mutable",
                      "name": "proposalReward",
                      "nameLocation": "6681:14:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51303,
                      "src": "6658:37:52",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                        "typeString": "struct PWN.ProposalReward"
                      },
                      "typeName": {
                        "id": 51228,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51227,
                          "name": "ProposalReward",
                          "nameLocations": [
                            "6658:14:52"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 51060,
                          "src": "6658:14:52"
                        },
                        "referencedDeclaration": 51060,
                        "src": "6658:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                          "typeString": "struct PWN.ProposalReward"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51235,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 51230,
                        "name": "proposalRewards",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51068,
                        "src": "6698:15:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct PWN.ProposalReward storage ref))"
                        }
                      },
                      "id": 51232,
                      "indexExpression": {
                        "id": 51231,
                        "name": "votingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51191,
                        "src": "6714:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6698:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$",
                        "typeString": "mapping(uint256 => struct PWN.ProposalReward storage ref)"
                      }
                    },
                    "id": 51234,
                    "indexExpression": {
                      "id": 51233,
                      "name": "proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51193,
                      "src": "6730:10:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6698:43:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProposalReward_$51060_storage",
                      "typeString": "struct PWN.ProposalReward storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6658:83:52"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51236,
                        "name": "proposalReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51229,
                        "src": "6755:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                          "typeString": "struct PWN.ProposalReward storage pointer"
                        }
                      },
                      "id": 51237,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6770:6:52",
                      "memberName": "reward",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51055,
                      "src": "6755:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 51238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6780:1:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6755:26:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51248,
                  "nodeType": "IfStatement",
                  "src": "6751:122:52",
                  "trueBody": {
                    "id": 51247,
                    "nodeType": "Block",
                    "src": "6783:90:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 51243,
                                "name": "proposalReward",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51229,
                                "src": "6840:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                                  "typeString": "struct PWN.ProposalReward storage pointer"
                                }
                              },
                              "id": 51244,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6855:6:52",
                              "memberName": "reward",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 51055,
                              "src": "6840:21:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 51240,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "6804:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51242,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6810:29:52",
                            "memberName": "ProposalRewardAlreadyAssigned",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52489,
                            "src": "6804:35:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) pure"
                            }
                          },
                          "id": 51245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6804:58:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51246,
                        "nodeType": "RevertStatement",
                        "src": "6797:65:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    null,
                    51250,
                    51253,
                    null,
                    null,
                    null
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 51250,
                      "mutability": "mutable",
                      "name": "executed",
                      "nameLocation": "6924:8:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51303,
                      "src": "6919:13:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 51249,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6919:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 51253,
                      "mutability": "mutable",
                      "name": "proposalParameters",
                      "nameLocation": "6976:18:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51303,
                      "src": "6934:60:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProposalParameters_$52224_memory_ptr",
                        "typeString": "struct IVotingContract.ProposalParameters"
                      },
                      "typeName": {
                        "id": 51252,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51251,
                          "name": "IVotingContract.ProposalParameters",
                          "nameLocations": [
                            "6934:15:52",
                            "6950:18:52"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 52224,
                          "src": "6934:34:52"
                        },
                        "referencedDeclaration": 52224,
                        "src": "6934:34:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalParameters_$52224_storage_ptr",
                          "typeString": "struct IVotingContract.ProposalParameters"
                        }
                      },
                      "visibility": "internal"
                    },
                    null,
                    null,
                    null
                  ],
                  "id": 51260,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51258,
                        "name": "proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51193,
                        "src": "7054:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 51255,
                            "name": "votingContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51191,
                            "src": "7026:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 51254,
                          "name": "IVotingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52279,
                          "src": "7010:15:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IVotingContract_$52279_$",
                            "typeString": "type(contract IVotingContract)"
                          }
                        },
                        "id": 51256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7010:31:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IVotingContract_$52279",
                          "typeString": "contract IVotingContract"
                        }
                      },
                      "id": 51257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7042:11:52",
                      "memberName": "getProposal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52278,
                      "src": "7010:43:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$_t_bool_$_t_struct$_ProposalParameters_$52224_memory_ptr_$_t_struct$_Tally_$52231_memory_ptr_$_t_array$_t_struct$_Action_$52238_memory_ptr_$dyn_memory_ptr_$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (bool,bool,struct IVotingContract.ProposalParameters memory,struct IVotingContract.Tally memory,struct IVotingContract.Action memory[] memory,uint256)"
                      }
                    },
                    "id": 51259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7010:55:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_struct$_ProposalParameters_$52224_memory_ptr_$_t_struct$_Tally_$52231_memory_ptr_$_t_array$_t_struct$_Action_$52238_memory_ptr_$dyn_memory_ptr_$_t_uint256_$",
                      "typeString": "tuple(bool,bool,struct IVotingContract.ProposalParameters memory,struct IVotingContract.Tally memory,struct IVotingContract.Action memory[] memory,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6882:183:52"
                },
                {
                  "condition": {
                    "id": 51262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7132:9:52",
                    "subExpression": {
                      "id": 51261,
                      "name": "executed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51250,
                      "src": "7133:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51269,
                  "nodeType": "IfStatement",
                  "src": "7128:74:52",
                  "trueBody": {
                    "id": 51268,
                    "nodeType": "Block",
                    "src": "7143:59:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51263,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "7164:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7170:19:52",
                            "memberName": "ProposalNotExecuted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52491,
                            "src": "7164:25:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7164:27:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51267,
                        "nodeType": "RevertStatement",
                        "src": "7157:34:52"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51270,
                        "name": "proposalParameters",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51253,
                        "src": "7281:18:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalParameters_$52224_memory_ptr",
                          "typeString": "struct IVotingContract.ProposalParameters memory"
                        }
                      },
                      "id": 51271,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7300:13:52",
                      "memberName": "snapshotEpoch",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52221,
                      "src": "7281:32:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 51272,
                      "name": "IMMUTABLE_PERIOD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51045,
                      "src": "7317:16:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7281:52:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51280,
                  "nodeType": "IfStatement",
                  "src": "7277:175:52",
                  "trueBody": {
                    "id": 51279,
                    "nodeType": "Block",
                    "src": "7335:117:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51274,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "7400:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7406:33:52",
                            "memberName": "ProposalSnapshotInImmutablePeriod",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52485,
                            "src": "7400:39:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7400:41:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51278,
                        "nodeType": "RevertStatement",
                        "src": "7393:48:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51282
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51282,
                      "mutability": "mutable",
                      "name": "reward",
                      "nameLocation": "7499:6:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51303,
                      "src": "7491:14:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51281,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7491:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51290,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 51285,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45901,
                          "src": "7520:11:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 51286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7520:13:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51287,
                        "name": "votingReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51212,
                        "src": "7535:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51288,
                        "name": "VOTING_REWARD_DENOMINATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51041,
                        "src": "7549:25:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 51283,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49234,
                        "src": "7508:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$49234_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 51284,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7513:6:52",
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48582,
                      "src": "7508:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 51289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7508:67:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7491:84:52"
                },
                {
                  "expression": {
                    "id": 51295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 51291,
                        "name": "proposalReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51229,
                        "src": "7585:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                          "typeString": "struct PWN.ProposalReward storage pointer"
                        }
                      },
                      "id": 51293,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7600:6:52",
                      "memberName": "reward",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51055,
                      "src": "7585:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51294,
                      "name": "reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51282,
                      "src": "7609:6:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7585:30:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 51296,
                  "nodeType": "ExpressionStatement",
                  "src": "7585:30:52"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51298,
                        "name": "votingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51191,
                        "src": "7654:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51299,
                        "name": "proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51193,
                        "src": "7670:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51300,
                        "name": "reward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51282,
                        "src": "7682:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51297,
                      "name": "ProposalRewardAssigned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51077,
                      "src": "7631:22:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 51301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7631:58:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51302,
                  "nodeType": "EmitStatement",
                  "src": "7626:63:52"
                }
              ]
            },
            "documentation": {
              "id": 51189,
              "nodeType": "StructuredDocumentation",
              "src": "5907:331:52",
              "text": "@notice Assigns a reward to a governance proposal.\n @dev The reward can be assigned only by the owner after the immutable period for an executed proposal.\n The reward is calculated from the current total supply.\n @param votingContract The voting contract address.\n @param proposalId The proposal id."
            },
            "functionSelector": "37c79561",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51196,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51195,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "6326:9:52"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44630,
                  "src": "6326:9:52"
                },
                "nodeType": "ModifierInvocation",
                "src": "6326:9:52"
              }
            ],
            "name": "assignProposalReward",
            "nameLocation": "6252:20:52",
            "parameters": {
              "id": 51194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51191,
                  "mutability": "mutable",
                  "name": "votingContract",
                  "nameLocation": "6281:14:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51304,
                  "src": "6273:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6273:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51193,
                  "mutability": "mutable",
                  "name": "proposalId",
                  "nameLocation": "6305:10:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51304,
                  "src": "6297:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51192,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6297:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6272:44:52"
            },
            "returnParameters": {
              "id": 51197,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6336:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51452,
            "nodeType": "FunctionDefinition",
            "src": "8001:1835:52",
            "nodes": [],
            "body": {
              "id": 51451,
              "nodeType": "Block",
              "src": "8083:1753:52",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51312,
                      "name": "votingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51307,
                      "src": "8097:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 51315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8123:1:52",
                          "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": 51314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8115:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51313,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8115:7:52",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8115:10:52",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8097:28:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51324,
                  "nodeType": "IfStatement",
                  "src": "8093:92:52",
                  "trueBody": {
                    "id": 51323,
                    "nodeType": "Block",
                    "src": "8127:58:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51318,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "8148:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8154:18:52",
                            "memberName": "ZeroVotingContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52481,
                            "src": "8148:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8148:26:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51322,
                        "nodeType": "RevertStatement",
                        "src": "8141:33:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51327,
                      "mutability": "mutable",
                      "name": "proposalReward",
                      "nameLocation": "8268:14:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "8245:37:52",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                        "typeString": "struct PWN.ProposalReward"
                      },
                      "typeName": {
                        "id": 51326,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51325,
                          "name": "ProposalReward",
                          "nameLocations": [
                            "8245:14:52"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 51060,
                          "src": "8245:14:52"
                        },
                        "referencedDeclaration": 51060,
                        "src": "8245:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                          "typeString": "struct PWN.ProposalReward"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51333,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 51328,
                        "name": "proposalRewards",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51068,
                        "src": "8285:15:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct PWN.ProposalReward storage ref))"
                        }
                      },
                      "id": 51330,
                      "indexExpression": {
                        "id": 51329,
                        "name": "votingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51307,
                        "src": "8301:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8285:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProposalReward_$51060_storage_$",
                        "typeString": "mapping(uint256 => struct PWN.ProposalReward storage ref)"
                      }
                    },
                    "id": 51332,
                    "indexExpression": {
                      "id": 51331,
                      "name": "proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51309,
                      "src": "8317:10:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8285:43:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProposalReward_$51060_storage",
                      "typeString": "struct PWN.ProposalReward storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8245:83:52"
                },
                {
                  "assignments": [
                    51335
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51335,
                      "mutability": "mutable",
                      "name": "assignedReward",
                      "nameLocation": "8346:14:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "8338:22:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51334,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8338:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51338,
                  "initialValue": {
                    "expression": {
                      "id": 51336,
                      "name": "proposalReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51327,
                      "src": "8363:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                        "typeString": "struct PWN.ProposalReward storage pointer"
                      }
                    },
                    "id": 51337,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8378:6:52",
                    "memberName": "reward",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 51055,
                    "src": "8363:21:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8338:46:52"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51339,
                      "name": "assignedReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51335,
                      "src": "8398:14:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 51340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8416:1:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8398:19:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51348,
                  "nodeType": "IfStatement",
                  "src": "8394:90:52",
                  "trueBody": {
                    "id": 51347,
                    "nodeType": "Block",
                    "src": "8419:65:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51342,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "8440:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8446:25:52",
                            "memberName": "ProposalRewardNotAssigned",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52497,
                            "src": "8440:31:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8440:33:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51346,
                        "nodeType": "RevertStatement",
                        "src": "8433:40:52"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    null,
                    null,
                    51353,
                    51356,
                    null,
                    null
                  ],
                  "declarations": [
                    null,
                    null,
                    {
                      "constant": false,
                      "id": 51353,
                      "mutability": "mutable",
                      "name": "proposalParameters",
                      "nameLocation": "8573:18:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "8531:60:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProposalParameters_$52224_memory_ptr",
                        "typeString": "struct IVotingContract.ProposalParameters"
                      },
                      "typeName": {
                        "id": 51352,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51351,
                          "name": "IVotingContract.ProposalParameters",
                          "nameLocations": [
                            "8531:15:52",
                            "8547:18:52"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 52224,
                          "src": "8531:34:52"
                        },
                        "referencedDeclaration": 52224,
                        "src": "8531:34:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalParameters_$52224_storage_ptr",
                          "typeString": "struct IVotingContract.ProposalParameters"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 51356,
                      "mutability": "mutable",
                      "name": "tally",
                      "nameLocation": "8622:5:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "8593:34:52",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Tally_$52231_memory_ptr",
                        "typeString": "struct IVotingContract.Tally"
                      },
                      "typeName": {
                        "id": 51355,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51354,
                          "name": "IVotingContract.Tally",
                          "nameLocations": [
                            "8593:15:52",
                            "8609:5:52"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 52231,
                          "src": "8593:21:52"
                        },
                        "referencedDeclaration": 52231,
                        "src": "8593:21:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tally_$52231_storage_ptr",
                          "typeString": "struct IVotingContract.Tally"
                        }
                      },
                      "visibility": "internal"
                    },
                    null,
                    null
                  ],
                  "id": 51363,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51361,
                        "name": "proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51309,
                        "src": "8686:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 51358,
                            "name": "votingContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51307,
                            "src": "8658:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 51357,
                          "name": "IVotingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52279,
                          "src": "8642:15:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IVotingContract_$52279_$",
                            "typeString": "type(contract IVotingContract)"
                          }
                        },
                        "id": 51359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8642:31:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IVotingContract_$52279",
                          "typeString": "contract IVotingContract"
                        }
                      },
                      "id": 51360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8674:11:52",
                      "memberName": "getProposal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52278,
                      "src": "8642:43:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$_t_bool_$_t_struct$_ProposalParameters_$52224_memory_ptr_$_t_struct$_Tally_$52231_memory_ptr_$_t_array$_t_struct$_Action_$52238_memory_ptr_$dyn_memory_ptr_$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (bool,bool,struct IVotingContract.ProposalParameters memory,struct IVotingContract.Tally memory,struct IVotingContract.Action memory[] memory,uint256)"
                      }
                    },
                    "id": 51362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8642:55:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_struct$_ProposalParameters_$52224_memory_ptr_$_t_struct$_Tally_$52231_memory_ptr_$_t_array$_t_struct$_Action_$52238_memory_ptr_$dyn_memory_ptr_$_t_uint256_$",
                      "typeString": "tuple(bool,bool,struct IVotingContract.ProposalParameters memory,struct IVotingContract.Tally memory,struct IVotingContract.Action memory[] memory,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8493:204:52"
                },
                {
                  "assignments": [
                    51365
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51365,
                      "mutability": "mutable",
                      "name": "voter",
                      "nameLocation": "8758:5:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "8750:13:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 51364,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8750:7:52",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51368,
                  "initialValue": {
                    "expression": {
                      "id": 51366,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "8766:3:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 51367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8770:6:52",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "8766:10:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8750:26:52"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_VoteOption_$52206",
                      "typeString": "enum IVotingContract.VoteOption"
                    },
                    "id": 51379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 51373,
                          "name": "proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51309,
                          "src": "8836:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 51374,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51365,
                          "src": "8848:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 51370,
                              "name": "votingContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51307,
                              "src": "8806:14:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 51369,
                            "name": "IVotingContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52279,
                            "src": "8790:15:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IVotingContract_$52279_$",
                              "typeString": "type(contract IVotingContract)"
                            }
                          },
                          "id": 51371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8790:31:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IVotingContract_$52279",
                            "typeString": "contract IVotingContract"
                          }
                        },
                        "id": 51372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8822:13:52",
                        "memberName": "getVoteOption",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 52256,
                        "src": "8790:45:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_enum$_VoteOption_$52206_$",
                          "typeString": "function (uint256,address) view external returns (enum IVotingContract.VoteOption)"
                        }
                      },
                      "id": 51375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8790:64:52",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_VoteOption_$52206",
                        "typeString": "enum IVotingContract.VoteOption"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 51376,
                          "name": "IVotingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52279,
                          "src": "8858:15:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IVotingContract_$52279_$",
                            "typeString": "type(contract IVotingContract)"
                          }
                        },
                        "id": 51377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8874:10:52",
                        "memberName": "VoteOption",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 52206,
                        "src": "8858:26:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_VoteOption_$52206_$",
                          "typeString": "type(enum IVotingContract.VoteOption)"
                        }
                      },
                      "id": 51378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "8885:4:52",
                      "memberName": "None",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52202,
                      "src": "8858:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_VoteOption_$52206",
                        "typeString": "enum IVotingContract.VoteOption"
                      }
                    },
                    "src": "8790:99:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51386,
                  "nodeType": "IfStatement",
                  "src": "8786:162:52",
                  "trueBody": {
                    "id": 51385,
                    "nodeType": "Block",
                    "src": "8891:57:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51380,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "8912:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8918:17:52",
                            "memberName": "CallerHasNotVoted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52493,
                            "src": "8912:23:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8912:25:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51384,
                        "nodeType": "RevertStatement",
                        "src": "8905:32:52"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "baseExpression": {
                      "expression": {
                        "id": 51387,
                        "name": "proposalReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51327,
                        "src": "9019:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                          "typeString": "struct PWN.ProposalReward storage pointer"
                        }
                      },
                      "id": 51388,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9034:7:52",
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51059,
                      "src": "9019:22:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 51390,
                    "indexExpression": {
                      "id": 51389,
                      "name": "voter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51365,
                      "src": "9042:5:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9019:29:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51397,
                  "nodeType": "IfStatement",
                  "src": "9015:103:52",
                  "trueBody": {
                    "id": 51396,
                    "nodeType": "Block",
                    "src": "9050:68:52",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51391,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "9071:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9077:28:52",
                            "memberName": "ProposalRewardAlreadyClaimed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52495,
                            "src": "9071:34:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9071:36:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51395,
                        "nodeType": "RevertStatement",
                        "src": "9064:43:52"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 51404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "expression": {
                          "id": 51398,
                          "name": "proposalReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51327,
                          "src": "9177:14:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProposalReward_$51060_storage_ptr",
                            "typeString": "struct PWN.ProposalReward storage pointer"
                          }
                        },
                        "id": 51401,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9192:7:52",
                        "memberName": "claimed",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 51059,
                        "src": "9177:22:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 51402,
                      "indexExpression": {
                        "id": 51400,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51365,
                        "src": "9200:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9177:29:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 51403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9209:4:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9177:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51405,
                  "nodeType": "ExpressionStatement",
                  "src": "9177:36:52"
                },
                {
                  "assignments": [
                    51407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51407,
                      "mutability": "mutable",
                      "name": "voterVotes",
                      "nameLocation": "9390:10:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "9382:18:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51406,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9382:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51418,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51414,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51365,
                        "src": "9478:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 51415,
                          "name": "proposalParameters",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51353,
                          "src": "9485:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProposalParameters_$52224_memory_ptr",
                            "typeString": "struct IVotingContract.ProposalParameters memory"
                          }
                        },
                        "id": 51416,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9504:13:52",
                        "memberName": "snapshotEpoch",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 52221,
                        "src": "9485:32:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 51409,
                                "name": "votingContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51307,
                                "src": "9419:14:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 51408,
                              "name": "IVotingContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52279,
                              "src": "9403:15:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IVotingContract_$52279_$",
                                "typeString": "type(contract IVotingContract)"
                              }
                            },
                            "id": 51410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9403:31:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IVotingContract_$52279",
                              "typeString": "contract IVotingContract"
                            }
                          },
                          "id": 51411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9435:14:52",
                          "memberName": "getVotingToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 52245,
                          "src": "9403:46:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IVotes_$44872_$",
                            "typeString": "function () view external returns (contract IVotes)"
                          }
                        },
                        "id": 51412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9403:48:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IVotes_$44872",
                          "typeString": "contract IVotes"
                        }
                      },
                      "id": 51413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9465:12:52",
                      "memberName": "getPastVotes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44833,
                      "src": "9403:74:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 51417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9403:115:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9382:136:52"
                },
                {
                  "assignments": [
                    51420
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51420,
                      "mutability": "mutable",
                      "name": "totalVotes",
                      "nameLocation": "9536:10:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "9528:18:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51419,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9528:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51429,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 51425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 51421,
                          "name": "tally",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51356,
                          "src": "9549:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Tally_$52231_memory_ptr",
                            "typeString": "struct IVotingContract.Tally memory"
                          }
                        },
                        "id": 51422,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9555:7:52",
                        "memberName": "abstain",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 52226,
                        "src": "9549:13:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 51423,
                          "name": "tally",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51356,
                          "src": "9565:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Tally_$52231_memory_ptr",
                            "typeString": "struct IVotingContract.Tally memory"
                          }
                        },
                        "id": 51424,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9571:3:52",
                        "memberName": "yes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 52228,
                        "src": "9565:9:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9549:25:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 51426,
                        "name": "tally",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51356,
                        "src": "9577:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tally_$52231_memory_ptr",
                          "typeString": "struct IVotingContract.Tally memory"
                        }
                      },
                      "id": 51427,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9583:2:52",
                      "memberName": "no",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52230,
                      "src": "9577:8:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9549:36:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9528:57:52"
                },
                {
                  "assignments": [
                    51431
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51431,
                      "mutability": "mutable",
                      "name": "voterReward",
                      "nameLocation": "9603:11:52",
                      "nodeType": "VariableDeclaration",
                      "scope": 51451,
                      "src": "9595:19:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51430,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9595:7:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51438,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51434,
                        "name": "assignedReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51335,
                        "src": "9629:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51435,
                        "name": "voterVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51407,
                        "src": "9645:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51436,
                        "name": "totalVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51420,
                        "src": "9657:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 51432,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49234,
                        "src": "9617:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$49234_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 51433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9622:6:52",
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48582,
                      "src": "9617:11:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 51437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9617:51:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9595:73:52"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51440,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51365,
                        "src": "9725:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51441,
                        "name": "voterReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51431,
                        "src": "9732:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51439,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46220,
                      "src": "9719:5:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 51442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9719:25:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51443,
                  "nodeType": "ExpressionStatement",
                  "src": "9719:25:52"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51445,
                        "name": "votingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51307,
                        "src": "9782:14:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51446,
                        "name": "proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51309,
                        "src": "9798:10:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 51447,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51365,
                        "src": "9810:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51448,
                        "name": "voterReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51431,
                        "src": "9817:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51444,
                      "name": "ProposalRewardClaimed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51088,
                      "src": "9760:21:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,address,uint256)"
                      }
                    },
                    "id": 51449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9760:69:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51450,
                  "nodeType": "EmitStatement",
                  "src": "9755:74:52"
                }
              ]
            },
            "documentation": {
              "id": 51305,
              "nodeType": "StructuredDocumentation",
              "src": "7702:294:52",
              "text": "@notice Claims the reward for voting in a proposal.\n @dev The reward can be claimed only if the caller has voted.\n It doesn't matter if the caller voted yes, no or abstained.\n @param votingContract The voting contract address.\n @param proposalId The proposal id."
            },
            "functionSelector": "fda599b1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimProposalReward",
            "nameLocation": "8010:19:52",
            "parameters": {
              "id": 51310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51307,
                  "mutability": "mutable",
                  "name": "votingContract",
                  "nameLocation": "8038:14:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51452,
                  "src": "8030:22:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51306,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8030:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51309,
                  "mutability": "mutable",
                  "name": "proposalId",
                  "nameLocation": "8062:10:52",
                  "nodeType": "VariableDeclaration",
                  "scope": 51452,
                  "src": "8054:18:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8054:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8029:44:52"
            },
            "returnParameters": {
              "id": 51311,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8083:0:52"
            },
            "scope": 51453,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 51026,
              "name": "Ownable2Step",
              "nameLocations": [
                "761:12:52"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 44794,
              "src": "761:12:52"
            },
            "id": 51027,
            "nodeType": "InheritanceSpecifier",
            "src": "761:12:52"
          },
          {
            "baseName": {
              "id": 51028,
              "name": "ERC20",
              "nameLocations": [
                "775:5:52"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 46403,
              "src": "775:5:52"
            },
            "id": 51029,
            "nodeType": "InheritanceSpecifier",
            "src": "775:5:52"
          }
        ],
        "canonicalName": "PWN",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 51025,
          "nodeType": "StructuredDocumentation",
          "src": "423:322:52",
          "text": "@title PWN token contract.\n @notice The token is the main governance token of the PWN DAO and is used\n as a reward for voting in proposals.\n @dev This contract is Ownable2Step, which means that the ownership transfer\n must be accepted by the new owner.\n The token is mintable and burnable by the owner."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          51453,
          46403,
          46506,
          46481,
          44794,
          44711,
          47993
        ],
        "name": "PWN",
        "nameLocation": "754:3:52",
        "scope": 51454,
        "usedErrors": [
          52479,
          52481,
          52483,
          52485,
          52489,
          52491,
          52493,
          52495,
          52497,
          52499
        ]
      }
    ],
    "license": "GPL-3.0-only"
  },
  "id": 52
}