@venusprotocol/governance-contracts
Version:
### Prerequisites
733 lines • 73.5 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "GovernorAlpha2",
"sourceName": "contracts/legacy/GovernorAlpha2.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "timelock_",
"type": "address"
},
{
"internalType": "address",
"name": "xvs_",
"type": "address"
},
{
"internalType": "address",
"name": "guardian_",
"type": "address"
},
{
"internalType": "uint256",
"name": "lastProposalId_",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "ProposalCanceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "proposer",
"type": "address"
},
{
"indexed": false,
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "string[]",
"name": "signatures",
"type": "string[]"
},
{
"indexed": false,
"internalType": "bytes[]",
"name": "calldatas",
"type": "bytes[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startBlock",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endBlock",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "ProposalCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "ProposalExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "eta",
"type": "uint256"
}
],
"name": "ProposalQueued",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "voter",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "support",
"type": "bool"
},
{
"indexed": false,
"internalType": "uint256",
"name": "votes",
"type": "uint256"
}
],
"name": "VoteCast",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "BALLOT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "DOMAIN_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "__abdicate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "__acceptAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newPendingAdmin",
"type": "address"
},
{
"internalType": "uint256",
"name": "eta",
"type": "uint256"
}
],
"name": "__executeSetTimelockPendingAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newPendingAdmin",
"type": "address"
},
{
"internalType": "uint256",
"name": "eta",
"type": "uint256"
}
],
"name": "__queueSetTimelockPendingAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "cancel",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "support",
"type": "bool"
}
],
"name": "castVote",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "support",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "castVoteBySig",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "execute",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "getActions",
"outputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "signatures",
"type": "string[]"
},
{
"internalType": "bytes[]",
"name": "calldatas",
"type": "bytes[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"internalType": "address",
"name": "voter",
"type": "address"
}
],
"name": "getReceipt",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "hasVoted",
"type": "bool"
},
{
"internalType": "bool",
"name": "support",
"type": "bool"
},
{
"internalType": "uint96",
"name": "votes",
"type": "uint96"
}
],
"internalType": "struct GovernorAlpha2.Receipt",
"name": "",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "guardian",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "latestProposalIds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "proposalCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "proposalMaxOperations",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "proposalThreshold",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "proposals",
"outputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "address",
"name": "proposer",
"type": "address"
},
{
"internalType": "uint256",
"name": "eta",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "startBlock",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endBlock",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "forVotes",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "againstVotes",
"type": "uint256"
},
{
"internalType": "bool",
"name": "canceled",
"type": "bool"
},
{
"internalType": "bool",
"name": "executed",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "signatures",
"type": "string[]"
},
{
"internalType": "bytes[]",
"name": "calldatas",
"type": "bytes[]"
},
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "propose",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "queue",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "quorumVotes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "state",
"outputs": [
{
"internalType": "enum GovernorAlpha2.ProposalState",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "timelock",
"outputs": [
{
"internalType": "contract TimelockInterface",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "votingDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "votingPeriod",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "xvs",
"outputs": [
{
"internalType": "contract XVSInterface",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b50604051620039003803806200390083398101604081905262000034916200009a565b600080546001600160a01b03199081166001600160a01b03968716179091556001805482169486169490941790935560028054909316919093161790556003556200013e565b8051620000878162000119565b92915050565b8051620000878162000133565b60008060008060808587031215620000b157600080fd5b6000620000bf87876200007a565b9450506020620000d2878288016200007a565b9350506040620000e5878288016200007a565b9250506060620000f8878288016200008d565b91505092959194509250565b60006001600160a01b03821662000087565b90565b620001248162000104565b81146200013057600080fd5b50565b620001248162000116565b6137b2806200014e6000396000f3fe60806040526004361061019c5760003560e01c80634634c61f116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610463578063deaaa7cc14610483578063e23a9a5214610498578063fe0d94c1146104c55761019c565b8063d33219b414610419578063da35c6641461042e578063da95691a146104435761019c565b80637bdbe4d0116100c65780637bdbe4d0146103ba57806391500671146103cf578063b58131b0146103ef578063b9a61961146104045761019c565b80634634c61f146103635780634e79ed3c14610383578063760fbc13146103a55761019c565b806321f43e42116101595780633932abb1116101335780633932abb1146102df5780633e4f49e6146102f457806340e58ee514610321578063452a9320146103415761019c565b806321f43e421461027a57806324bc1a641461029a578063328dd982146102af5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde031461020157806315373e3d1461022357806317977c611461024557806320606b7014610265575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612444565b6104d8565b6040516101d69998979695949392919061355d565b60405180910390f35b3480156101eb57600080fd5b506101f4610531565b6040516101d6919061328a565b34801561020d57600080fd5b50610216610539565b6040516101d69190613346565b34801561022f57600080fd5b5061024361023e366004612492565b610569565b005b34801561025157600080fd5b506101f4610260366004612287565b610578565b34801561027157600080fd5b506101f461058a565b34801561028657600080fd5b506102436102953660046122ad565b6105a1565b3480156102a657600080fd5b506101f4610688565b3480156102bb57600080fd5b506102cf6102ca366004612444565b610696565b6040516101d6949392919061323d565b3480156102eb57600080fd5b506101f4610925565b34801561030057600080fd5b5061031461030f366004612444565b61092a565b6040516101d69190613338565b34801561032d57600080fd5b5061024361033c366004612444565b610aac565b34801561034d57600080fd5b50610356610d15565b6040516101d691906130e7565b34801561036f57600080fd5b5061024361037e3660046124c2565b610d24565b34801561038f57600080fd5b50610398610eb8565b6040516101d6919061332a565b3480156103b157600080fd5b50610243610ec7565b3480156103c657600080fd5b506101f4610f03565b3480156103db57600080fd5b506102436103ea3660046122ad565b610f08565b3480156103fb57600080fd5b506101f4610fdd565b34801561041057600080fd5b50610243610feb565b34801561042557600080fd5b50610398611070565b34801561043a57600080fd5b506101f461107f565b34801561044f57600080fd5b506101f461045e3660046122e7565b611085565b34801561046f57600080fd5b5061024361047e366004612444565b6114a7565b34801561048f57600080fd5b506101f4611711565b3480156104a457600080fd5b506104b86104b3366004612462565b61171d565b6040516101d691906134a7565b6102436104d3366004612444565b61178c565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b620151805b90565b6040518060400160405280601481526020017356656e757320476f7665726e6f7220416c70686160601b81525081565b610574338383611951565b5050565b60056020526000908152604090205481565b604051610596906130d1565b604051809103902081565b6002546001600160a01b031633146105d45760405162461bcd60e51b81526004016105cb90613387565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f918391906105fe9087906020016130e7565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161062d9493929190613110565b600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610683919081019061240f565b505050565b697f0e10af47c1c700000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561071857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106fa575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561076a57602002820191906000526020600020905b815481526020019060010190808311610756575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561083d5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b505050505081526020019060010190610792565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561090f5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108fb5780601f106108d0576101008083540402835291602001916108fb565b820191906000526020600020905b8154815290600101906020018083116108de57829003601f168201915b505050505081526020019060010190610864565b5050505090509450945094509450509193509193565b600190565b6000816003541015801561093e5750600082115b61095a5760405162461bcd60e51b81526004016105cb90613397565b6000828152600460205260409020600b81015460ff161561097f576002915050610aa7565b80600701544311610994576000915050610aa7565b806008015443116109a9576001915050610aa7565b80600a015481600901541115806109ca57506109c3610688565b8160090154105b156109d9576003915050610aa7565b60028101546109ec576004915050610aa7565b600b810154610100900460ff1615610a08576007915050610aa7565b6002810154600054604080516360d143f160e11b81529051610a9193926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610a5457600080fd5b505afa158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8c91908101906123f1565b611b1a565b4210610aa1576006915050610aa7565b60059150505b919050565b6000610ab78261092a565b90506007816007811115610ac757fe5b1415610ae55760405162461bcd60e51b81526004016105cb90613467565b60008281526004602052604090206002546001600160a01b0316331480610bb05750610b0f610fdd565b60018054838201546001600160a01b039182169263782d6fe19290911690610b38904390611b46565b6040518363ffffffff1660e01b8152600401610b5592919061315f565b60206040518083038186803b158015610b6d57600080fd5b505afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ba5919081019061252a565b6001600160601b0316105b610bcc5760405162461bcd60e51b81526004016105cb906133f7565b600b8101805460ff1916600117905560005b6003820154811015610cd8576000546003830180546001600160a01b039092169163591fcdfe919084908110610c1057fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3857fe5b9060005260206000200154856005018581548110610c5257fe5b90600052602060002001866006018681548110610c6b57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610c9a9594939291906131fc565b600060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505060019092019150610bde9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d08919061328a565b60405180910390a1505050565b6002546001600160a01b031681565b6000604051610d32906130d1565b60408051918290038220828201909152601482527356656e757320476f7665726e6f7220416c70686160601b6020909201919091527fe7831129eb24a15f1f8f822483f1d64bd3e968215bb4c81d28d0d3ca9310a835610d90611b6e565b30604051602001610da49493929190613298565b6040516020818303038152906040528051906020012090506000604051610dca906130dc565b604051908190038120610de391899089906020016132cd565b60405160208183030381529060405280519060200120905060008282604051602001610e109291906130a0565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e4d94939291906132f5565b6020604051602081039080840390855afa158015610e6f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ea25760405162461bcd60e51b81526004016105cb90613457565b610ead818a8a611951565b505050505050505050565b6001546001600160a01b031681565b6002546001600160a01b03163314610ef15760405162461bcd60e51b81526004016105cb90613497565b600280546001600160a01b0319169055565b601e90565b6002546001600160a01b03163314610f325760405162461bcd60e51b81526004016105cb906133b7565b600080546040516001600160a01b0390911691633a66f90191839190610f5c9087906020016130e7565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610f8b9493929190613110565b602060405180830381600087803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061068391908101906123f1565b693f870857a3e0e380000090565b6002546001600160a01b031633146110155760405162461bcd60e51b81526004016105cb90613357565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b600061108f610fdd565b600180546001600160a01b03169063782d6fe19033906110b0904390611b46565b6040518363ffffffff1660e01b81526004016110cd9291906130f5565b60206040518083038186803b1580156110e557600080fd5b505afa1580156110f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061111d919081019061252a565b6001600160601b0316116111435760405162461bcd60e51b81526004016105cb90613447565b84518651148015611155575083518651145b8015611162575082518651145b61117e5760405162461bcd60e51b81526004016105cb906133e7565b855161119c5760405162461bcd60e51b81526004016105cb90613437565b6111a4610f03565b865111156111c45760405162461bcd60e51b81526004016105cb906133c7565b3360009081526005602052604090205480156112415760006111e58261092a565b905060018160078111156111f557fe5b14156112135760405162461bcd60e51b81526004016105cb90613407565b600081600781111561122157fe5b141561123f5760405162461bcd60e51b81526004016105cb90613427565b505b600061124f43610a8c610925565b9050600061125f82610a8c610531565b6003805460010190559050611272611cd1565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611355929190611d46565b5060808201518051611371916004840191602090910190611dab565b5060a0820151805161138d916005840191602090910190611df2565b5060c082015180516113a9916006840191602090910190611e4b565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516005600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161148f999897969594939291906134b5565b60405180910390a15193505050505b95945050505050565b60046114b28261092a565b60078111156114bd57fe5b146114da5760405162461bcd60e51b81526004016105cb90613367565b600081815260046020818152604080842084548251630d48571f60e31b8152925191959461152f9442946001600160a01b0390931693636a42b8f8938084019390829003018186803b158015610a5457600080fd5b905060005b60038301548110156116d7576116cf83600301828154811061155257fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061157a57fe5b906000526020600020015485600501848154811061159457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116225780601f106115f757610100808354040283529160200191611622565b820191906000526020600020905b81548152906001019060200180831161160557829003601f168201915b505050505086600601858154811061163657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116c45780601f10611699576101008083540402835291602001916116c4565b820191906000526020600020905b8154815290600101906020018083116116a757829003601f168201915b505050505086611b72565b600101611534565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d0890859084906135e3565b604051610596906130dc565b611725611ea4565b5060008281526004602090815260408083206001600160a01b0385168452600c018252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046001600160601b0316918101919091525b92915050565b60056117978261092a565b60078111156117a257fe5b146117bf5760405162461bcd60e51b81526004016105cb90613377565b6000818152600460205260408120600b8101805461ff001916610100179055905b6003820154811015611915576000546004830180546001600160a01b0390921691630825f38f91908490811061181257fe5b906000526020600020015484600301848154811061182c57fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061185457fe5b906000526020600020015486600501868154811061186e57fe5b9060005260206000200187600601878154811061188757fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016118b69594939291906131fc565b6000604051808303818588803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261190c919081019061240f565b506001016117e0565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611945919061328a565b60405180910390a15050565b600161195c8361092a565b600781111561196757fe5b146119845760405162461bcd60e51b81526004016105cb90613477565b60008281526004602090815260408083206001600160a01b0387168452600c8101909252909120805460ff16156119cd5760405162461bcd60e51b81526004016105cb906133a7565b600154600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611a03918a9160040161315f565b60206040518083038186803b158015611a1b57600080fd5b505afa158015611a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a53919081019061252a565b90508315611a7c57611a728360090154826001600160601b0316611b1a565b6009840155611a99565b611a9383600a0154826001600160601b0316611b1a565b600a8401555b8154600160ff199091161761ff00191661010085151502176dffffffffffffffffffffffff00001916620100006001600160601b038316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611b0a90889088908890869061316d565b60405180910390a1505050505050565b600082820183811015611b3f5760405162461bcd60e51b81526004016105cb906133d7565b9392505050565b600082821115611b685760405162461bcd60e51b81526004016105cb90613487565b50900390565b4690565b6000546040516001600160a01b039091169063f2b0653790611ba090889088908890889088906020016131a2565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611bd2919061328a565b60206040518083038186803b158015611bea57600080fd5b505afa158015611bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c2291908101906123d3565b15611c3f5760405162461bcd60e51b81526004016105cb90613417565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611c7790889088908890889088906004016131a2565b602060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cc991908101906123f1565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611d9b579160200282015b82811115611d9b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d66565b50611da7929150611ec4565b5090565b828054828255906000526020600020908101928215611de6579160200282015b82811115611de6578251825591602001919060010190611dcb565b50611da7929150611ee8565b828054828255906000526020600020908101928215611e3f579160200282015b82811115611e3f5782518051611e2f918491602090910190611f02565b5091602001919060010190611e12565b50611da7929150611f6f565b828054828255906000526020600020908101928215611e98579160200282015b82811115611e985782518051611e88918491602090910190611f02565b5091602001919060010190611e6b565b50611da7929150611f92565b604080516060810182526000808252602082018190529181019190915290565b61053691905b80821115611da75780546001600160a01b0319168155600101611eca565b61053691905b80821115611da75760008155600101611eee565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f4357805160ff1916838001178555611de6565b82800160010185558215611de65791820182811115611de6578251825591602001919060010190611dcb565b61053691905b80821115611da7576000611f898282611fb5565b50600101611f75565b61053691905b80821115611da7576000611fac8282611fb5565b50600101611f98565b50805460018160011615610100020316600290046000825580601f10611fdb5750611ff9565b601f016020900490600052602060002090810190611ff99190611ee8565b50565b803561178681613737565b600082601f83011261201857600080fd5b813561202b61202682613618565b6135f1565b9150818183526020840193506020810190508385602084028201111561205057600080fd5b60005b8381101561207c57816120668882611ffc565b8452506020928301929190910190600101612053565b5050505092915050565b600082601f83011261209757600080fd5b81356120a561202682613618565b81815260209384019390925082018360005b8381101561207c57813586016120cd88826121dc565b84525060209283019291909101906001016120b7565b600082601f8301126120f457600080fd5b813561210261202682613618565b81815260209384019390925082018360005b8381101561207c578135860161212a88826121dc565b8452506020928301929190910190600101612114565b600082601f83011261215157600080fd5b813561215f61202682613618565b9150818183526020840193506020810190508385602084028201111561218457600080fd5b60005b8381101561207c578161219a88826121c6565b8452506020928301929190910190600101612187565b80356117868161374b565b80516117868161374b565b803561178681613754565b805161178681613754565b600082601f8301126121ed57600080fd5b81356121fb61202682613639565b9150808252602083016020830185838301111561221757600080fd5b6122228382846136eb565b50505092915050565b600082601f83011261223c57600080fd5b815161224a61202682613639565b9150808252602083016020830185838301111561226657600080fd5b6122228382846136f7565b80356117868161375d565b805161178681613766565b60006020828403121561229957600080fd5b60006122a58484611ffc565b949350505050565b600080604083850312156122c057600080fd5b60006122cc8585611ffc565b92505060206122dd858286016121c6565b9150509250929050565b600080600080600060a086880312156122ff57600080fd5b853567ffffffffffffffff81111561231657600080fd5b61232288828901612007565b955050602086013567ffffffffffffffff81111561233f57600080fd5b61234b88828901612140565b945050604086013567ffffffffffffffff81111561236857600080fd5b612374888289016120e3565b935050606086013567ffffffffffffffff81111561239157600080fd5b61239d88828901612086565b925050608086013567ffffffffffffffff8111156123ba57600080fd5b6123c6888289016121dc565b9150509295509295909350565b6000602082840312156123e557600080fd5b60006122a584846121bb565b60006020828403121561240357600080fd5b60006122a584846121d1565b60006020828403121561242157600080fd5b815167ffffffffffffffff81111561243857600080fd5b6122a58482850161222b565b60006020828403121561245657600080fd5b60006122a584846121c6565b6000806040838503121561247557600080fd5b600061248185856121c6565b92505060206122dd85828601611ffc565b600080604083850312156124a557600080fd5b60006124b185856121c6565b92505060206122dd858286016121b0565b600080600080600060a086880312156124da57600080fd5b60006124e688886121c6565b95505060206124f7888289016121b0565b945050604061250888828901612271565b9350506060612519888289016121c6565b92505060806123c6888289016121c6565b60006020828403121561253c57600080fd5b60006122a5848461227c565b60006125548383612583565b505060200190565b6000611b3f8383612725565b6000612554838361270b565b61257d816136b8565b82525050565b61257d81613680565b600061259782613673565b6125a18185613677565b93506125ac83613661565b8060005b838110156125da5781516125c48882612548565b97506125cf83613661565b9250506001016125b0565b509495945050505050565b60006125f082613673565b6125fa8185613677565b93508360208202850161260c85613661565b8060005b858110156126465784840389528151612629858261255c565b945061263483613661565b60209a909a0199925050600101612610565b5091979650505050505050565b600061265e82613673565b6126688185613677565b93508360208202850161267a85613661565b8060005b858110156126465784840389528151612697858261255c565b94506126a283613661565b60209a909a019992505060010161267e565b60006126bf82613673565b6126c98185613677565b93506126d483613661565b8060005b838110156125da5781516126ec8882612568565b97506126f783613661565b9250506001016126d8565b61257d8161368b565b61257d81610536565b61257d61272082610536565b610536565b600061273082613673565b61273a8185613677565b935061274a8185602086016136f7565b61275381613723565b9093019392505050565b60008154600181166000811461277a57600181146127a0576127df565b607f600283041661278b8187613677565b60ff19841681529550506020850192506127df565b600282046127ae8187613677565b95506127b985613667565b60005b828110156127d8578154888201526001909101906020016127bc565b8701945050505b505092915050565b61257d816136bf565b61257d816136ca565b61257d816136d5565b600061280f603983613677565b7f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736581527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015260400192915050565b600061286e604483613677565b7f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b60006128da604583613677565b7f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000612947600283610aa7565b61190160f01b815260020192915050565b6000612965604c83613677565b7f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c81527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060208201526b33b7bb1033bab0b93234b0b760a11b604082015260600192915050565b60006129d9601883613677565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000815260200192915050565b6000612a12602983613677565b7f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000612a5d602d83613677565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722081526c185b1c9958591e481d9bdd1959609a1b602082015260400192915050565b6000612aac604a83613677565b7f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6381527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6020820152693b1033bab0b93234b0b760b11b604082015260600192915050565b6000612b1e602883613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000612b68601183613677565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000612b95604383610aa7565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000612c00602783610aa7565b7f42616c6c6f742875696e743235362070726f706f73616c49642c626f6f6c20738152667570706f72742960c81b602082015260270192915050565b6000612c49604483613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000612cb5602f83613677565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000612d06603883613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20666f756e6420616e81527f20616c7265616479206163746976652070726f706f73616c0000000000000000602082015260400192915050565b6000612d65604483613677565b7f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207081527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746020820152632065746160e01b604082015260600192915050565b6000612dd1603983613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20666f756e6420616e81527f20616c72656164792070656e64696e672070726f706f73616c00000000000000602082015260400192915050565b6000612e30602c83613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000612e7e603f83613677565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000612edd602f83613677565b7f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000612f2e603683613677565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000612f86602a83613677565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67815269081a5cc818db1bdcd95960b21b602082015260400192915050565b6000612fd2601583613677565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b6000613003603683613677565b7f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465815275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b602082015260400192915050565b8051606083019061305f8482612702565b5060208201516130726020850182612702565b50604082015161106a6040850182613097565b61257d816136a6565b61257d816136e0565b61257d816136ac565b60006130ab8261293a565b91506130b78285612714565b6020820191506130c78284612714565b5060200192915050565b600061178682612b88565b600061178682612bf3565b602081016117868284612583565b604081016131038285612574565b611b3f602083018461270b565b60a0810161311e8287612583565b61312b60208301866127f9565b818103604083015261313c816129cc565b905081810360608301526131508185612725565b905061149e608083018461270b565b604081016131038285612583565b6080810161317b8287612583565b613188602083018661270b565b6131956040830185612702565b61149e606083018461308e565b60a081016131b08288612583565b6131bd602083018761270b565b81810360408301526131cf8186612725565b905081810360608301526131e38185612725565b90506131f2608083018461270b565b9695505050505050565b60a0810161320a8288612583565b613217602083018761270b565b8181036040830152613229818661275d565b905081810360608301526131e3818561275d565b6080808252810161324e818761258c565b9050818103602083015261326281866126b4565b905081810360408301526132768185612653565b905081810360608301526131f281846125e5565b60208101611786828461270b565b608081016132a6828761270b565b6132b3602083018661270b565b6132c0604083018561270b565b61149e6060830184612583565b606081016132db828661270b565b6132e8602083018561270b565b6122a56040830184612702565b60808101613303828761270b565b6133106020830186613085565b61331d604083018561270b565b61149e606083018461270b565b6020810161178682846127e7565b6020810161178682846127f0565b60208082528101611b3f8184612725565b6020808252810161178681612802565b6020808252810161178681612861565b60208082528101611786816128cd565b6020808252810161178681612958565b6020808252810161178681612a05565b6020808252810161178681612a50565b6020808252810161178681612a9f565b6020808252810161178681612b11565b6020808252810161178681612b5b565b6020808252810161178681612c3c565b6020808252810161178681612ca8565b6020808252810161178681612cf9565b6020808252810161178681612d58565b6020808252810161178681612dc4565b6020808252810161178681612e23565b6020808252810161178681612e71565b6020808252810161178681612ed0565b6020808252810161178681612f21565b6020808252810161178681612f79565b6020808252810161178681612fc5565b6020808252810161178681612ff6565b60608101611786828461304e565b61012081016134c4828c61270b565b6134d1602083018b612574565b81810360408301526134e3818a61258c565b905081810360608301526134f781896126b4565b9050818103608083015261350b8188612653565b905081810360a083015261351f81876125e5565b905061352e60c083018661270b565b61353b60e083018561270b565b81810361010083015261354e8184612725565b9b9a5050505050505050505050565b610120810161356c828c61270b565b613579602083018b612583565b613586604083018a61270b565b613593606083018961270b565b6135a0608083018861270b565b6135ad60a083018761270b565b6135ba60c083018661270b565b6135c760e0830185612702565b6135d5610100830184612702565b9a9950505050505050505050565b60408101613103828561270b565b60405181810167ffffffffffffffff8111828210171561361057600080fd5b604052919050565b600067ffffffffffffffff82111561362f57600080fd5b5060209081020190565b600067ffffffffffffffff82111561365057600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b60006117868261369a565b151590565b80610aa78161372d565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611786825b600061178682613680565b600061178682613690565b600061178682610536565b6000611786826136ac565b82818337506000910152565b60005b838110156137125781810151838201526020016136fa565b8381111561106a5750506000910152565b601f01601f191690565b60088110611ff957fe5b61374081613680565b8114611ff957600080fd5b6137408161368b565b61374081610536565b613740816136a6565b613740816136ac56fea365627a7a723158207f38f50b758a0cd02b132f85ab02ee93607bd6a484127f51150619e00769e4726c6578706572696d656e74616cf564736f6c63430005100040",
"deployedBytecode": "0x60806040526004361061019c5760003560e01c80634634c61f116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610463578063deaaa7cc14610483578063e23a9a5214610498578063fe0d94c1146104c55761019c565b8063d33219b414610419578063da35c6641461042e578063da95691a146104435761019c565b80637bdbe4d0116100c65780637bdbe4d0146103ba57806391500671146103cf578063b58131b0146103ef578063b9a61961146104045761019c565b80634634c61f146103635780634e79ed3c14610383578063760fbc13146103a55761019c565b806321f43e42116101595780633932abb1116101335780633932abb1146102df5780633e4f49e6146102f457806340e58ee514610321578063452a9320146103415761019c565b806321f43e421461027a57806324bc1a641461029a578063328dd982146102af5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde031461020157806315373e3d1461022357806317977c611461024557806320606b7014610265575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612444565b6104d8565b6040516101d69998979695949392919061355d565b60405180910390f35b3480156101eb57600080fd5b506101f4610531565b6040516101d6919061328a565b34801561020d57600080fd5b50610216610539565b6040516101d69190613346565b34801561022f57600080fd5b5061024361023e366004612492565b610569565b005b34801561025157600080fd5b506101f4610260366004612287565b610578565b34801561027157600080fd5b506101f461058a565b34801561028657600080fd5b506102436102953660046122ad565b6105a1565b3480156102a657600080fd5b506101f4610688565b3480156102bb57600080fd5b506102cf6102ca366004612444565b610696565b6040516101d6949392919061323d565b3480156102eb57600080fd5b506101f4610925565b34801561030057600080fd5b5061031461030f366004612444565b61092a565b6040516101d69190613338565b34801561032d57600080fd5b5061024361033c366004612444565b610aac565b34801561034d57600080fd5b50610356610d15565b6040516101d691906130e7565b34801561036f57600080fd5b5061024361037e3660046124c2565b610d24565b34801561038f57600080fd5b50610398610eb8565b6040516101d6919061332a565b3480156103b157600080fd5b50610243610ec7565b3480156103c657600080fd5b506101f4610f03565b3480156103db57600080fd5b506102436103ea3660046122ad565b610f08565b3480156103fb57600080fd5b506101f4610fdd565b34801561041057600080fd5b50610243610feb565b34801561042557600080fd5b50610398611070565b34801561043a57600080fd5b506101f461107f565b34801561044f57600080fd5b506101f461045e3660046122e7565b611085565b34801561046f57600080fd5b5061024361047e366004612444565b6114a7565b34801561048f57600080fd5b506101f4611711565b3480156104a457600080fd5b506104b86104b3366004612462565b61171d565b6040516101d691906134a7565b6102436104d3366004612444565b61178c565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b620151805b90565b6040518060400160405280601481526020017356656e757320476f7665726e6f7220416c70686160601b81525081565b610574338383611951565b5050565b60056020526000908152604090205481565b604051610596906130d1565b604051809103902081565b6002546001600160a01b031633146105d45760405162461bcd60e51b81526004016105cb90613387565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f918391906105fe9087906020016130e7565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161062d9493929190613110565b600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610683919081019061240f565b505050565b697f0e10af47c1c700000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561071857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106fa575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561076a57602002820191906000526020600020905b815481526020019060010190808311610756575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561083d5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b505050505081526020019060010190610792565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561090f5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108fb5780601f106108d0576101008083540402835291602001916108fb565b820191906000526020600020905b8154815290600101906020018083116108de57829003601f168201915b505050505081526020019060010190610864565b5050505090509450945094509450509193509193565b600190565b6000816003541015801561093e5750600082115b61095a5760405162461bcd60e51b81526004016105cb90613397565b6000828152600460205260409020600b81015460ff161561097f576002915050610aa7565b80600701544311610994576000915050610aa7565b806008015443116109a9576001915050610aa7565b80600a015481600901541115806109ca57506109c3610688565b8160090154105b156109d95760039150