@daostack/arc-experimental
Version:
A platform for building DAOs
791 lines • 77.9 kB
JSON
{
"contractName": "Controller",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_globalConstraint",
"type": "address"
},
{
"indexed": false,
"internalType": "enum GlobalConstraintInterface.CallPhase",
"name": "_when",
"type": "uint8"
}
],
"name": "AddGlobalConstraint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "BurnReputation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "MintReputation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "MintTokens",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_scheme",
"type": "address"
}
],
"name": "RegisterScheme",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_globalConstraint",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "_isPre",
"type": "bool"
}
],
"name": "RemoveGlobalConstraint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_scheme",
"type": "address"
}
],
"name": "UnregisterScheme",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_oldController",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_newController",
"type": "address"
}
],
"name": "UpgradeController",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_globalConstraint",
"type": "address"
}
],
"name": "addGlobalConstraint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "avatar",
"outputs": [
{
"internalType": "contract Avatar",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_from",
"type": "address"
}
],
"name": "burnReputation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_externalToken",
"type": "address"
},
{
"internalType": "address",
"name": "_spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "externalTokenApproval",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_externalToken",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "externalTokenTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_externalToken",
"type": "address"
},
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "externalTokenTransferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_contract",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "genericCall",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "globalConstraintsCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "globalConstraintsPost",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "globalConstraintsPre",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "globalConstraintsRegisterPost",
"outputs": [
{
"internalType": "bool",
"name": "isRegistered",
"type": "bool"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "globalConstraintsRegisterPre",
"outputs": [
{
"internalType": "bool",
"name": "isRegistered",
"type": "bool"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract Avatar",
"name": "_avatar",
"type": "address"
},
{
"internalType": "address",
"name": "initialScheme",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_globalConstraint",
"type": "address"
}
],
"name": "isGlobalConstraintRegistered",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_scheme",
"type": "address"
}
],
"name": "isSchemeRegistered",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_metaData",
"type": "string"
}
],
"name": "metaData",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
}
],
"name": "mintReputation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
}
],
"name": "mintTokens",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "nativeReputation",
"outputs": [
{
"internalType": "contract Reputation",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nativeToken",
"outputs": [
{
"internalType": "contract DAOToken",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "newController",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_scheme",
"type": "address"
},
{
"internalType": "bytes4",
"name": "_permissions",
"type": "bytes4"
}
],
"name": "registerScheme",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_globalConstraint",
"type": "address"
}
],
"name": "removeGlobalConstraint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "schemesPermissions",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amountInWei",
"type": "uint256"
},
{
"internalType": "address payable",
"name": "_to",
"type": "address"
}
],
"name": "sendEther",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_key",
"type": "string"
},
{
"internalType": "string",
"name": "_value",
"type": "string"
}
],
"name": "setDBValue",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_scheme",
"type": "address"
}
],
"name": "unregisterScheme",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unregisterSelf",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newController",
"type": "address"
}
],
"name": "upgradeController",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50613bbf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806381d064c411610104578063b9c2ee82116100a2578063ddbfcc6b11610071578063ddbfcc6b14610781578063dea9e24d146107ad578063e1758bd8146107d9578063e8c98b22146107e1576101cf565b8063b9c2ee82146106d8578063cb16d4a2146106fe578063d5210f601461072a578063dab0efff1461074b576101cf565b806389ae1c90116100de57806389ae1c90146105a05780639c9c7326146105a8578063ab751f7114610666578063b756d5a21461069c576101cf565b806381d064c4146104c957806384da77f5146104ef578063890ac46c14610532576101cf565b8063488b3814116101715780635f30e5811161014b5780635f30e5811461044f578063653915e5146104755780636bafaa591461049b578063814784f6146104a3576101cf565b8063488b3814146103eb5780635aef7de6146104115780635d1da8cb14610419576101cf565b80633a02263c116101ad5780633a02263c1461035457806341443cea146103785780634422d3721461039e578063485cc955146103bb576101cf565b806310c5b328146101d4578063177eebb0146102145780632bf1645814610255575b600080fd5b610200600480360360408110156101ea57600080fd5b50803590602001356001600160a01b03166107fe565b604080519115158252519081900360200190f35b61023a6004803603602081101561022a57600080fd5b50356001600160a01b0316610b0a565b60408051921515835260208301919091528051918290030190f35b6102d36004803603606081101561026b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111600160201b831117156102c857600080fd5b919350915035610b29565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61035c610f0e565b604080516001600160a01b039092168252519081900360200190f35b6102006004803603602081101561038e57600080fd5b50356001600160a01b0316610f1d565b61035c600480360360208110156103b457600080fd5b5035610f62565b6103e9600480360360408110156103d157600080fd5b506001600160a01b0381358116916020013516610f89565b005b6102006004803603602081101561040157600080fd5b50356001600160a01b031661119d565b61035c611586565b6102006004803603604081101561042f57600080fd5b5080356001600160a01b031690602001356001600160e01b031916611595565b6102006004803603602081101561046557600080fd5b50356001600160a01b03166118f7565b6102006004803603602081101561048b57600080fd5b50356001600160a01b0316611ba8565b610200611ed0565b61023a600480360360208110156104b957600080fd5b50356001600160a01b0316611f2f565b610200600480360360208110156104df57600080fd5b50356001600160a01b0316611f4e565b6105156004803603602081101561050557600080fd5b50356001600160a01b0316611f59565b604080516001600160e01b03199092168252519081900360200190f35b6102006004803603602081101561054857600080fd5b810190602081018135600160201b81111561056257600080fd5b82018360208201111561057457600080fd5b803590602001918460018302840111600160201b8311171561059557600080fd5b509092509050611f6e565b61035c612085565b610200600480360360408110156105be57600080fd5b810190602081018135600160201b8111156105d857600080fd5b8201836020820111156105ea57600080fd5b803590602001918460018302840111600160201b8311171561060b57600080fd5b919390929091602081019035600160201b81111561062857600080fd5b82018360208201111561063a57600080fd5b803590602001918460018302840111600160201b8311171561065b57600080fd5b509092509050612094565b6102006004803603606081101561067c57600080fd5b506001600160a01b038135811691602081013590911690604001356121ca565b610200600480360360808110156106b257600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356124b2565b610200600480360360208110156106ee57600080fd5b50356001600160a01b03166127a3565b6102006004803603604081101561071457600080fd5b50803590602001356001600160a01b0316612d9e565b610732613061565b6040805192835260208301919091528051918290030190f35b6102006004803603606081101561076157600080fd5b506001600160a01b0381358116916020810135909116906040013561306b565b6102006004803603604081101561079757600080fd5b50803590602001356001600160a01b0316613342565b610200600480360360408110156107c357600080fd5b50803590602001356001600160a01b031661364a565b61035c613952565b61035c600480360360208110156107f757600080fd5b5035613961565b3360009081526033602052604081205460e01b600160e01b90811614610859576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b696d696e74546f6b656e7360b01b60005b603854811015610952576038818154811061088157fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156108df57600080fd5b505af11580156108f3573d6000803e3d6000fd5b505050506040513d602081101561090957600080fd5b505161094a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b60010161086a565b6040805186815290516001600160a01b0386169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3603554604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b505192505060005b603954811015610b025760398181548110610a3157fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d6020811015610ab957600080fd5b5051610afa576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101610a1a565b505092915050565b603a602052600090815260409020805460019091015460ff9091169082565b3360009081526033602052604081205460609060e01b600160e41b90811614610b99576040805162461bcd60e51b815260206004820152601e60248201527f73656e646572206973206e6f7420612047656e6572696320536368656d650000604482015290519081900360640190fd5b6a19d95b995c9a58d0d85b1b60aa1b60005b603854811015610c935760388181548110610bc257fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506040513d6020811015610c4a57600080fd5b5051610c8b576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101610bab565b60345460405163057e2c8b60e31b81526001600160a01b038a81166004830190815260448301899052606060248401908152606484018b90529190931692632bf16458928c928c928c928c9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610d2157600080fd5b505af1158015610d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610d5e57600080fd5b815160208301805160405192949293830192919084600160201b821115610d8457600080fd5b908301906020820185811115610d9957600080fd5b8251600160201b811182820188101715610db257600080fd5b82525081516020918201929091019080838360005b83811015610ddf578181015183820152602001610dc7565b50505050905090810190601f168015610e0c5780820380516001836020036101000a031916815260200191505b50604052505050935093505060005b603954811015610f035760398181548110610e3257fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610e9057600080fd5b505af1158015610ea4573d6000803e3d6000fd5b505050506040513d6020811015610eba57600080fd5b5051610efb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101610e1b565b505094509492505050565b6037546001600160a01b031681565b6001600160a01b0381166000908152603a602052604081205460ff1680610f5c57506001600160a01b0382166000908152603b602052604090205460ff165b92915050565b60388181548110610f6f57fe5b6000918252602090912001546001600160a01b0316905081565b600054610100900460ff1680610fa25750610fa261396e565b80610fb0575060005460ff16155b610feb5760405162461bcd60e51b815260040180806020018281038252602e815260200180613ad8602e913960400191505060405180910390fd5b600054610100900460ff16158015611016576000805460ff1961ff0019909116610100171660011790555b603480546001600160a01b0319166001600160a01b03858116919091179182905560408051631c2eb17b60e31b81529051929091169163e1758bd891600480820192602092909190829003018186803b15801561107257600080fd5b505afa158015611086573d6000803e3d6000fd5b505050506040513d602081101561109c57600080fd5b5051603580546001600160a01b0319166001600160a01b039283161790556034546040805163089ae1c960e41b8152905191909216916389ae1c90916004808301926020929190829003018186803b1580156110f757600080fd5b505afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051603680546001600160a01b039283166001600160a01b03199091161790558216600081815260336020526040808220805463ffffffff1916601f1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a38015611198576000805461ff00191690555b505050565b3360009081526033602052604081205460e01b600160e21b908116146111f45760405162461bcd60e51b8152600401808060200182810382526025815260200180613a936025913960400191505060405180910390fd5b6111fc61399d565b600080846001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b505050506040513d602081101561126457600080fd5b5051905060008082600281111561127757fe5b148061128e5750600282600281111561128c57fe5b145b156113c4576001600160a01b0386166000908152603a60209081526040918290208251808401909352805460ff161580158452600190910154918301919091529094506113c4576001603880549050038460200151101561136b576038805460001981019081106112fb57fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603885602001518154811061132d57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603a905260409020600101555b603880548061137657fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603a905260408120805460ff1916815560019081019190915590505b60018260028111156113d257fe5b14806113e9575060028260028111156113e757fe5b145b1561151f576001600160a01b0386166000908152603b60209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061151f57600160398054905003846020015110156114c65760398054600019810190811061145657fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603985602001518154811061148857fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603b905260409020600101555b60398054806114d157fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603b905260408120805460ff1916815560019081019190915590505b801561157d5760208401516001600160a01b038716907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561156557fe5b60408051938452911460208301528051918290030190a25b95945050505050565b6034546001600160a01b031681565b3360009081526033602052604081205460e01b600160e11b908116146115ec5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a4e6025913960400191505060405180910390fd5b6d7265676973746572536368656d6560901b60005b6038548110156116e9576038818154811061161857fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561167657600080fd5b505af115801561168a573d6000803e3d6000fd5b505050506040513d60208110156116a057600080fd5b50516116e1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101611601565b6001600160a01b0385166000908152603360205260408082205433835291205460e091821b9186831891901b1916601f60e01b16156117595760405162461bcd60e51b81526004018080602001828103825260248152602001806139b56024913960400191505060405180910390fd5b3360009081526033602052604090205460e01b198116601f60e01b16156117b15760405162461bcd60e51b81526004018080602001828103825260248152602001806139b56024913960400191505060405180910390fd5b6001600160a01b038616600081815260336020526040808220805463ffffffff1916600160e01b8a1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a360019350505060005b603954811015610b02576039818154811061182657fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b50516118ef576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b60010161180f565b3360009081526033602052604081205460e01b600160e21b9081161461194e5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a936025913960400191505060405180910390fd5b6000826001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b505050506040513d60208110156119b557600080fd5b5051905060008160028111156119c757fe5b14806119de575060028160028111156119dc57fe5b145b15611a86576001600160a01b0383166000908152603a602052604090205460ff16611a865760388054600180820183557f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619990910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603a905291209251835460ff1916901515178355519101555b6001816002811115611a9457fe5b1480611aab57506002816002811115611aa957fe5b145b15611b53576001600160a01b0383166000908152603b602052604090205460ff16611b535760398054600180820183557fdc16fef70f8d5ddbc01ee3d903d1e69c18a3c7be080eb86a81e0578814ee58d390910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603b905291209251835460ff1916901515178355519101555b826001600160a01b03167fbe8cc209a3d881fa6ea5b12c6a389bbea620f5f0c1bcc2955a7961d0c5846ead8260405180826002811115611b8f57fe5b815260200191505060405180910390a250600192915050565b3360009081526033602052604081205460e01b600160e11b90811614611bff5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a4e6025913960400191505060405180910390fd5b6f756e7265676973746572536368656d6560801b60005b603854811015611cfe5760388181548110611c2d57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050506040513d6020811015611cb557600080fd5b5051611cf6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101611c16565b611d0784613974565b611d145760009250611ddd565b33600090815260336020526040808220546001600160a01b038716835291205460e091821b19911b16601f60e01b1615611d7f5760405162461bcd60e51b8152600401808060200182810382526027815260200180613b636027913960400191505060405180910390fd5b6040516001600160a01b0385169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b0384166000908152603360205260409020805463ffffffff19169055600192505b5060005b603954811015611ec95760398181548110611df857fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b505050506040513d6020811015611e8057600080fd5b5051611ec1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101611de1565b5050919050565b6000611edb33613974565b611ee757506000611f2c565b33600081815260336020526040808220805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a35060015b90565b603b602052600090815260409020805460019091015460ff9091169082565b6000610f5c82613974565b60336020526000908152604090205460e01b81565b3360009081526033602052604081205460e01b600160e41b90811614611fdb576040805162461bcd60e51b815260206004820152601f60248201527f73656e646572206973206e6f742061204d6574614461746120536368656d6500604482015290519081900360640190fd5b603454604051632242b11b60e21b8152602060048201908152602482018590526001600160a01b039092169163890ac46c91869186918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b50519392505050565b6036546001600160a01b031681565b3360009081526033602052604081205460e01b600160e01b908116146120ef576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b60345460408051634e4e399360e11b815260048101918252604481018790526001600160a01b0390921691639c9c73269188918891889188919081906024810190606401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b505195945050505050565b3360009081526033602052604081205460e01b600160e01b90811614612225576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b603854811015612331576038818154811061226057fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156122be57600080fd5b505af11580156122d2573d6000803e3d6000fd5b505050506040513d60208110156122e857600080fd5b5051612329576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101612249565b6034546040805163ab751f7160e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163ab751f719160648083019260209291908290030181600087803b15801561238f57600080fd5b505af11580156123a3573d6000803e3d6000fd5b505050506040513d60208110156123b957600080fd5b505192505060005b6039548110156124a957603981815481106123d857fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561243657600080fd5b505af115801561244a573d6000803e3d6000fd5b505050506040513d602081101561246057600080fd5b50516124a1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b6001016123c1565b50509392505050565b3360009081526033602052604081205460e01b600160e01b9081161461250d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b603854811015612619576038818154811061254857fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156125a657600080fd5b505af11580156125ba573d6000803e3d6000fd5b505050506040513d60208110156125d057600080fd5b5051612611576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101612531565b60345460408051635bab6ad160e11b81526001600160a01b038a8116600483015289811660248301528881166044830152606482018890529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60208110156126a957600080fd5b505192505060005b60395481101561279957603981815481106126c857fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561272657600080fd5b505af115801561273a573d6000803e3d6000fd5b505050506040513d602081101561275057600080fd5b5051612791576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b6001016126b1565b5050949350505050565b3360009081526033602052604081205460e01b600160e31b90811614612810576040805162461bcd60e51b815260206004820152601d60248201527f73656e646572206973206e6f7420557067726164696e67536368656d65000000604482015290519081900360640190fd5b6037546001600160a01b0316156128585760405162461bcd60e51b8152600401808060200182810382526024815260200180613b066024913960400191505060405180910390fd5b6001600160a01b0382166128b3576040805162461bcd60e51b815260206004820152601a60248201527f6e657720636f6e74726f6c6c65722063616e6e6f742062652030000000000000604482015290519081900360640190fd5b603780546001600160a01b0319166001600160a01b038481169182179092556034546040805163f2fde38b60e01b815260048101939093525192169163f2fde38b9160248082019260009290919082900301818387803b15801561291657600080fd5b505af115801561292a573d6000803e3d6000fd5b50505050816001600160a01b0316603460009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561298657600080fd5b505afa15801561299a573d6000803e3d6000fd5b505050506040513d60208110156129b057600080fd5b50516001600160a01b0316146129f75760405162461bcd60e51b8152600401808060200182810382526039815260200180613b2a6039913960400191505060405180910390fd5b60355460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612a3b57600080fd5b505afa158015612a4f573d6000803e3d6000fd5b505050506040513d6020811015612a6557600080fd5b50516001600160a01b03161415612ba5576035546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612ac457600080fd5b505af1158015612ad8573d6000803e3d6000fd5b50505050816001600160a01b0316603560009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3457600080fd5b505afa158015612b48573d6000803e3d6000fd5b505050506040513d6020811015612b5e57600080fd5b50516001600160a01b031614612ba55760405162461bcd60e51b8152600401808060200182810382526038815260200180613a166038913960400191505060405180910390fd5b60365460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612be957600080fd5b505afa158015612bfd573d6000803e3d6000fd5b505050506040513d6020811015612c1357600080fd5b50516001600160a01b03161415612d53576036546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612c7257600080fd5b505af1158015612c86573d6000803e3d6000fd5b50505050816001600160a01b0316603660009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce257600080fd5b505afa158015612cf6573d6000803e3d6000fd5b505050506040513d6020811015612d0c57600080fd5b50516001600160a01b031614612d535760405162461bcd60e51b815260040180806020018281038252603d8152602001806139d9603d913960400191505060405180910390fd5b603754604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a2506001919050565b3360009081526033602052604081205460e01b600160e01b90811614612df9576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b6839b2b73222ba3432b960b91b60005b603854811015612ef15760388181548110612e2057fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015612e7e57600080fd5b505af1158015612e92573d6000803e3d6000fd5b505050506040513d6020811015612ea857600080fd5b5051612ee9576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101612e09565b6034546040805163658b6a5160e11b8152600481018890526001600160a01b0387811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b505192505060005b603954811015610b025760398181548110612f9057fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015612fee57600080fd5b505af1158015613002573d6000803e3d6000fd5b505050506040513d602081101561301857600080fd5b5051613059576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101612f79565b6038546039549091565b3360009081526033602052604081205460e01b600160e01b908116146130c6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6038548110156131ca57603881815481106130f957fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561315757600080fd5b505af115801561316b573d6000803e3d6000fd5b505050506040513d602081101561318157600080fd5b50516131c2576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b6001016130e2565b6034546040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561322857600080fd5b505af115801561323c573d6000803e3d6000fd5b505050506040513d602081101561325257600080fd5b505192505060005b6039548110156124a9576039818154811061327157fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156132cf57600080fd5b505af11580156132e3573d6000803e3d6000fd5b505050506040513d60208110156132f957600080fd5b505161333a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b60010161325a565b3360009081526033602052604081205460e01b600160e01b9081161461339d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b6d313ab9372932b83aba30ba34b7b760911b60005b60385481101561349a57603881815481106133c957fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561342757600080fd5b505af115801561343b573d6000803e3d6000fd5b505050506040513d602081101561345157600080fd5b5051613492576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b6001016133b2565b6040805186815290516001600160a01b0386169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360365460408051632770a7eb60e21b81526001600160a01b0387811660048301526024820189905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561353057600080fd5b505af1158015613544573d6000803e3d6000fd5b505050506040513d602081101561355a57600080fd5b505192505060005b603954811015610b02576039818154811061357957fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156135d757600080fd5b505af11580156135eb573d6000803e3d6000fd5b505050506040513d602081101561360157600080fd5b5051613642576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b600101613562565b3360009081526033602052604081205460e01b600160e01b908116146136a5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ab8833981519152604482015290519081900360640190fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b6038548110156137a257603881815481106136d157fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561372f57600080fd5b505af1158015613743573d6000803e3d6000fd5b505050506040513d602081101561375957600080fd5b505161379a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b6001016136ba565b6040805186815290516001600160a01b0386169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3603654604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b15801561383857600080fd5b505af115801561384c573d6000803e3d6000fd5b505050506040513d602081101561386257600080fd5b505192505060005b603954811015610b02576039818154811061388157fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156138df57600080fd5b505af11580156138f3573d6000803e3d6000fd5b505050506040513d602081101561390957600080fd5b505161394a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a73833981519152604482015290519081900360640190fd5b60010161386a565b6035546001600160a01b031681565b60398181548110610f6f57fe5b303b1590565b6001600160a01b03811660009081526033602052604090205460e01b600160e01b161515919050565b60408051808201909152600080825260208201529056fe73656e64657220756e6175746f72697a6520746f20726567697374657220736368656d656661696c656420746f207472616e736665722072657075746174696f6e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c65726661696c656420746f207472616e7366657220746f6b656e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20726567697374657220736368656d656e6f7420616c6c6f77656420627920676c6f62616c436f6e73747261696e740073656e646572206973206e6f7420676c6f62616c436f6e73747261696e7420736368656d6573656e646572206973206e6f74207265676973746572656420736368656d6500436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65647468697320636f6e74726f6c6c65722077617320616c72656164792075706772616465646661696c656420746f207472616e7366657220617661746172206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20756e726567697374657220736368656d65a26469706673582212206b2015d9aa8c5a2b408929f409432d78d4a7ef3cd13eab59329938781f24d71164736f6c634300060c0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806381d064c411610104578063b9c2ee82116100a2578063ddbfcc6b11610071578063ddbfcc6b14610781578063dea9e24d146107ad578063e1758bd8146107d9578063e8c98b22146107e1576101cf565b8063b9c2ee82146106d8578063cb16d4a2146106fe578063d5210f601461072a578063dab0efff1461074b576101cf565b806389ae1c90116100de57806389ae1c90146105a05780639c9c7326146105a8578063ab751f7114610666578063b756d5a21461069c576101cf565b806381d064c4146104c957806384da77f5146104ef578063890ac46c14610532576101cf565b8063488b3814116101715780635f30e5811161014b5780635f30e5811461044f578063653915e5146104755780636bafaa591461049b578063814784f6146104a3576101cf565b8063488b3814146103eb5780635aef7de6146104115780635d1da8cb14610419576101cf565b80633a02263c116101ad5780633a02263c1461035457806341443cea146103785780634422d3721461039e578063485cc955146103bb576101cf565b806310c5b328146101d4578063177eebb0146102145780632bf1645814610255575b600080fd5b610200600480360360408110156101ea57600080fd5b50803590602001356001600160a01b03166107fe565b604080519115158252519081900360200190f35b61023a6004803603602081101561022a57600080fd5b50356001600160a01b0316610b0a565b60408051921515835260208301919091528051918290030190f35b6102d36004803603606081101561026b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111600160201b831117156102c857600080fd5b919350915035610b29565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61035c610f0e565b604080516001600160a01b039092168252519081900360200190f35b6102006004803603602081101561038e57600080fd5b50356001600160a01b0316610f1d565b61035c600480360360208110156103b457600080fd5b5035610f62565b6103e9600480360360408110156103d157600080fd5b506001600160a01b0381358116916020013516610f89565b005b6102006004803603602081101561040157600080fd5b50356001600160a01b031661119d565b61035c611586565b6102006004803603604081101561042f57600080fd5b5080356001600160a01b031690602001356001600160e01b031916611595565b6102006004803603602081101561046557600080fd5b50356001600160a01b03166118f7565b6102006004803603602081101561048b57600080fd5b50356001600160a01b0316611ba8565b610200611ed0565b61023a600480360360208110156104b957600080fd5b50356001600160a01b0316611f2f565b610200600480360360208110156104df57600080fd5b50356001600160a01b0316611f4e565b6105156004803603602081101561050557600080fd5b50356001600160a01b0316611f59565b604080516001600160e01b03199092168252519081900360200190f35b6102006004803603602081101561054857600080fd5b810190602081018135600160201b81111561056257600080fd5b82018360208201111561057457600080fd5b80