[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "contract TwabController", "name": "twabController_", "type": "address" }, { "internalType": "contract IERC20", "name": "vault_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "delegatee", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "lockUntil", "type": "uint96" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" } ], "name": "DelegateeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": false, "internalType": "uint96", "name": "lockUntil", "type": "uint96" }, { "indexed": true, "internalType": "address", "name": "delegatee", "type": "address" }, { "indexed": false, "internalType": "contract Delegation", "name": "delegation", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" } ], "name": "DelegationCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DelegationFunded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DelegationFundedFromStake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "representative", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "set", "type": "bool" } ], "name": "RepresentativeSet", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "TransferredDelegation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract TwabController", "name": "twabController", "type": "address" } ], "name": "TwabControllerSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IERC20", "name": "vault", "type": "address" } ], "name": "VaultSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "VaultSharesStaked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "VaultSharesUnstaked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "slot", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "WithdrewDelegationToStake", "type": "event" }, { "inputs": [], "name": "MAX_LOCK", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" } ], "name": "computeDelegationAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "address", "name": "_delegatee", "type": "address" }, { "internalType": "uint96", "name": "_lockDuration", "type": "uint96" } ], "name": "createDelegation", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "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": [], "name": "delegationInstance", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "fundDelegation", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "fundDelegationFromStake", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" } ], "name": "getDelegation", "outputs": [ { "internalType": "contract Delegation", "name": "delegation", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "lockUntil", "type": "uint256" }, { "internalType": "bool", "name": "wasCreated", "type": "bool" } ], "stateMutability": "view", "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": "address", "name": "_delegator", "type": "address" }, { "internalType": "address", "name": "_representative", "type": "address" } ], "name": "isRepresentativeOf", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct PermitAndMulticall.Signature", "name": "_permitSignature", "type": "tuple" }, { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" } ], "name": "permitAndMulticall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_representative", "type": "address" }, { "internalType": "bool", "name": "_set", "type": "bool" } ], "name": "setRepresentative", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "stake", "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": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "transferDelegationTo", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "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": [], "name": "twabController", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "address", "name": "_delegatee", "type": "address" }, { "internalType": "uint96", "name": "_lockDuration", "type": "uint96" } ], "name": "updateDelegatee", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegator", "type": "address" }, { "internalType": "uint256", "name": "_slot", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdrawDelegationToStake", "outputs": [ { "internalType": "contract Delegation", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" } ]
60c06040523480156200001157600080fd5b506040516200344638038062003446833981016040819052620000349162000379565b838360036200004483826200049e565b5060046200005382826200049e565b50505060405162000064906200028a565b604051809103906000f08015801562000081573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392909216918217905560405163909f1cad60e01b81526000600482015263909f1cad90602401600060405180830381600087803b158015620000d957600080fd5b505af1158015620000ee573d6000803e3d6000fd5b5050506001600160a01b03831690506200014f5760405162461bcd60e51b815260206004820152601f60248201527f54442f74776162436f6e74726f6c6c65722d6e6f742d7a65726f2d616464720060448201526064015b60405180910390fd5b6001600160a01b038116620001a75760405162461bcd60e51b815260206004820152601660248201527f54442f7661756c742d6e6f742d7a65726f2d6164647200000000000000000000604482015260640162000146565b6001600160a01b0382811660a0819052908216608081905260405163455b2b4360e11b8152600481019190915260016024820152638ab6568690604401600060405180830381600087803b158015620001ff57600080fd5b505af115801562000214573d6000803e3d6000fd5b50506040516001600160a01b03851692507f8af2b1f4522d792f5417527eec7690797bca267d34f7c4b95ec5dbc2ddc506e19150600090a26040516001600160a01b038216907fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce61590600090a2505050506200056a565b6106ba8062002d8c83390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002c057600080fd5b81516001600160401b0380821115620002dd57620002dd62000298565b604051601f8301601f19908116603f0116810190828211818310171562000308576200030862000298565b81604052838152602092508660208588010111156200032657600080fd5b600091505b838210156200034a57858201830151818301840152908201906200032b565b6000602085830101528094505050505092915050565b6001600160a01b03811681146200037657600080fd5b50565b600080600080608085870312156200039057600080fd5b84516001600160401b0380821115620003a857600080fd5b620003b688838901620002ae565b95506020870151915080821115620003cd57600080fd5b50620003dc87828801620002ae565b9350506040850151620003ef8162000360565b6060860151909250620004028162000360565b939692955090935050565b600181811c908216806200042257607f821691505b6020821081036200044357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000499576000816000526020600020601f850160051c81016020861015620004745750805b601f850160051c820191505b81811015620004955782815560010162000480565b5050505b505050565b81516001600160401b03811115620004ba57620004ba62000298565b620004d281620004cb84546200040d565b8462000449565b602080601f8311600181146200050a5760008415620004f15750858301515b600019600386901b1c1916600185901b17855562000495565b600085815260208120601f198616915b828110156200053b578886015182559484019460019091019084016200051a565b50858210156200055a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516127a8620005e4600039600081816103eb01528181610d02015261172e0152600081816104a5015281816104ce015281816105d00152818161077401528181610b9101528181610c3301528181610ccf01528181610d9101528181610ee2015281816116be0152611b8301526127a86000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638b4b4ec911610104578063adc9772e116100a2578063dd62ed3e11610071578063dd62ed3e1461046a578063e18fa6eb1461047d578063e7880ae114610490578063fbfa77cf146104a357600080fd5b8063adc9772e146103d6578063b0812d7b146103e9578063c2a672e01461040f578063ca40edf11461042257600080fd5b8063982b1f2f116100de578063982b1f2f1461037d578063a457c2d714610390578063a9059cbb146103a3578063ac9650d8146103b657600080fd5b80638b4b4ec91461032657806390ab08851461033957806395d89b411461037557600080fd5b80635f66501111610171578063666f7af61161014b578063666f7af6146102c45780636c59f295146102d757806370a08231146102ea578063889de8051461031357600080fd5b80635f6650111461027c57806363fc611f146102a757806365a5d5f0146102ba57600080fd5b806318160ddd116101ad57806318160ddd1461022a57806323b872dd1461023c578063313ce5671461024f578063395093511461026957600080fd5b806306452792146101d457806306fdde03146101e9578063095ea7b314610207575b600080fd5b6101e76101e2366004612088565b6104c9565b005b6101f16104fc565b6040516101fe919061213e565b60405180910390f35b61021a610215366004612166565b61058e565b60405190151581526020016101fe565b6002545b6040519081526020016101fe565b61021a61024a366004612192565b6105a8565b6102576105cc565b60405160ff90911681526020016101fe565b61021a610277366004612166565b610655565b61028f61028a3660046121d3565b610677565b6040516001600160a01b0390911681526020016101fe565b60055461028f906001600160a01b031681565b61022e62ed4e0081565b61028f6102d23660046121d3565b6106fb565b61028f6102e536600461221d565b6107e2565b61022e6102f8366004612270565b6001600160a01b031660009081526020819052604090205490565b61028f61032136600461221d565b6108fd565b61028f61033436600461228d565b6109ac565b61021a6103473660046122c6565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6101f1610a16565b6101e761038b36600461230d565b610a25565b61021a61039e366004612166565b610adf565b61021a6103b1366004612166565b610b5a565b6103c96103c436600461233b565b610b68565b6040516101fe919061237d565b6101e76103e4366004612166565b610b7b565b7f000000000000000000000000000000000000000000000000000000000000000061028f565b6101e761041d366004612166565b610c0a565b610435610430366004612166565b610c97565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a0016101fe565b61022e6104783660046122c6565b610e7e565b61028f61048b3660046121d3565b610ea9565b61028f61049e366004612166565b610f4f565b7f000000000000000000000000000000000000000000000000000000000000000061028f565b6104f67f000000000000000000000000000000000000000000000000000000000000000085858585610f5b565b50505050565b60606003805461050b906123e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610537906123e1565b80156105845780601f1061055957610100808354040283529160200191610584565b820191906000526020600020905b81548152906001019060200180831161056757829003601f168201915b5050505050905090565b60003361059c81858561101b565b60019150505b92915050565b6000336105b685828561113f565b6105c18585856111b3565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610650919061242a565b905090565b60003361059c8185856106688383610e7e565b6106729190612447565b61101b565b600061068284611357565b600061068e85856113d6565b905061069b8130856113ea565b6106a5858461140c565b336001600160a01b031684866001600160a01b03167f6862a473baa6176f1c866c69aa93da8508d7afc71b52dddc9d5e8b0bb7aab6f4866040516106eb91815260200190565b60405180910390a4949350505050565b60006001600160a01b0384166107505760405162461bcd60e51b81526020600482015260156024820152742a2217b23633ba3916b737ba16bd32b93796b0b23960591b60448201526064015b60405180910390fd5b610759826114c4565b600061076585856113d6565b905061079c6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338386611508565b336001600160a01b031684866001600160a01b03167f383183291bd9a7fb8bd9c7c86c5013a89d1490c9f4e486da279804b83729a1dc866040516106eb91815260200190565b60006107ed85611357565b6107f683611573565b610808826001600160601b03166115c1565b600061081486866113d6565b905061081f81611607565b4283016001600160601b038416156108945760405163ac2293af60e01b81526001600160601b03821660048201526001600160a01b0383169063ac2293af90602401600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b505050505b61089e82866116b8565b604080516001600160601b03831681523360208201526001600160a01b03808816928992918b16917ffd96a87f22afea1e17a7117a4923f1499a1c1eb2bd7c492caf07f3a3c38ade6f910160405180910390a45090505b949350505050565b600061090885611357565b61091183611573565b610923826001600160601b03166115c1565b428201600061093b610935888861175a565b836117a1565b905061094781866116b8565b604080516001600160601b03841681526001600160a01b03838116602083015233828401529151878316928992908b16917f5533acb96061e404278604d3df68397263be1d4b9df394136a2968802633d8a59181900360600190a49695505050505050565b60006109b782611829565b60006109c333866113d6565b90506109d08184866113ea565b826001600160a01b031685336001600160a01b03167f622b7da8a20026f1176ccc7ec0a635a4544a67e99b0125018e3d89b888ce8ebe876040516106eb91815260200190565b60606004805461050b906123e1565b6001600160a01b038216610a725760405162461bcd60e51b81526020600482015260146024820152732a2217b932b816b737ba16bd32b93796b0b2323960611b6044820152606401610747565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f50062a33e55b9f3dfcf05fbf1356b7c92313796cfb8526cdee5a497fcbb8cc3391015b60405180910390a35050565b60003381610aed8286610e7e565b905083811015610b4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610747565b6105c1828686840361101b565b60003361059c8185856111b3565b6060610b748383611875565b9392505050565b610b84816114c4565b610bb96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611508565b610bc3828261140c565b816001600160a01b03167f42efdd3f01ecbb0dd89f08e8c2d72f0c4a6f6494a9a4bd769556e4ac6089966882604051610bfe91815260200190565b60405180910390a25050565b610c1382611829565b610c1c816114c4565b610c263382611964565b610c5a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611a96565b6040518181526001600160a01b0383169033907f39eb344492cba85f71213b46e684ab6b06d09d7e1d2308c361fa81550545ec9390602001610ad3565b6000806000806000610ca987876113d6565b94506001600160a01b0385163b15156040516316bef07560e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015287811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063b5f783a890604401602060405180830381865afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190612468565b6040516370a0823160e01b81526001600160a01b0387811660048301529195507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190612485565b92508015610e7457846001600160a01b0316633c78929e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e68919061249e565b6001600160601b031691505b9295509295909350565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610eb484611357565b610ebd826114c4565b6000610ec985856113d6565b9050610ed58584611964565b610f096001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168285611a96565b336001600160a01b031684866001600160a01b03167fb1968721eeb35d2206c8aa91805bc908019965ff4cff13c158f89956fb8e9248866040516106eb91815260200190565b6000610b7483836113d6565b6001600160a01b03851663d505accf3330878735610f7f60408a0160208b016124bb565b604080516001600160e01b031960e089901b1681526001600160a01b0396871660048201529590941660248601526044850192909252606484015260ff16608483015286013560a4820152606086013560c482015260e401600060405180830381600087803b158015610ff157600080fd5b505af1158015611005573d6000803e3d6000fd5b505050506110138282611875565b505050505050565b6001600160a01b03831661107d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610747565b6001600160a01b0382166110de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610747565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061114b8484610e7e565b905060001981146104f657818110156111a65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610747565b6104f6848484840361101b565b6001600160a01b0383166112175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610747565b6001600160a01b0382166112795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610747565b6001600160a01b038316600090815260208190526040902054818110156112f15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610747565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f6565b6001600160a01b03811633148061139157506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b6113d35760405162461bcd60e51b8152602060048201526013602482015272054442f6e6f742d646c6774722d6f722d72657606c1b6044820152606401610747565b50565b6000610b746113e5848461175a565b611ac6565b6113f3816114c4565b6113fc83611607565b611407838383611b32565b505050565b6001600160a01b0382166114625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610747565b80600260008282546114749190612447565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ad3565b600081116113d35760405162461bcd60e51b815260206004820152601160248201527054442f616d6f756e742d67742d7a65726f60781b6044820152606401610747565b6040516001600160a01b03808516602483015283166044820152606481018290526104f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ba8565b6001600160a01b0381166113d35760405162461bcd60e51b81526020600482015260156024820152742a2217b23633ba16b737ba16bd32b93796b0b2323960591b6044820152606401610747565b62ed4e008111156113d35760405162461bcd60e51b815260206004820152601060248201526f54442f6c6f636b2d746f6f2d6c6f6e6760801b6044820152606401610747565b806001600160a01b0316633c78929e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611669919061249e565b6001600160601b03164210156113d35760405162461bcd60e51b815260206004820152601460248201527315110bd9195b1959d85d1a5bdb8b5b1bd8dad95960621b6044820152606401610747565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663455b2b4360e11b90811790915290611753847f000000000000000000000000000000000000000000000000000000000000000083611c7d565b5050505050565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b60055460009081906117bc906001600160a01b031685611d7a565b60405163909f1cad60e01b81526001600160601b03851660048201529091506001600160a01b0382169063909f1cad90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b50929695505050505050565b6001600160a01b0381166113d35760405162461bcd60e51b81526020600482015260136024820152722a2217ba3796b737ba16bd32b93796b0b2323960691b6044820152606401610747565b60608160008167ffffffffffffffff811115611893576118936124d8565b6040519080825280602002602001820160405280156118c657816020015b60608152602001906001900390816118b15790505b50905060005b8281101561195b57611936308787848181106118ea576118ea6124ee565b90506020028101906118fc9190612504565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e1792505050565b828281518110611948576119486124ee565b60209081029190910101526001016118cc565b50949350505050565b6001600160a01b0382166119c45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610747565b6001600160a01b03821660009081526020819052604090205481811015611a385760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610747565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261140790849063a9059cbb60e01b9060640161153c565b6005546040513060388201526f5af43d82803e903d91602b57fd5bf3ff60248201526001600160a01b039091166014820152733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101206000906105a2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b90811790915290611013857f000000000000000000000000000000000000000000000000000000000000000083611c7d565b6000611bfd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e3c9092919063ffffffff16565b9050805160001480611c1e575080806020019051810190611c1e919061254b565b6114075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610747565b60408051600180825281830190925260609160009190816020015b604080518082019091526000815260606020820152815260200190600190039081611c985790505090506040518060400160405280856001600160a01b031681526020018481525081600081518110611cf357611cf36124ee565b602090810291909101015260405163de9443bf60e01b81526001600160a01b0386169063de9443bf90611d2a908490600401612568565b6000604051808303816000875af1158015611d49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d719190810190612618565b95945050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166105a25760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610747565b6060610b74838360405180606001604052806027815260200161274c60279139611e4b565b60606108f58484600085611ec3565b6060600080856001600160a01b031685604051611e68919061272f565b600060405180830381855af49150503d8060008114611ea3576040519150601f19603f3d011682016040523d82523d6000602084013e611ea8565b606091505b5091509150611eb986838387611f9e565b9695505050505050565b606082471015611f245760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610747565b600080866001600160a01b03168587604051611f40919061272f565b60006040518083038185875af1925050503d8060008114611f7d576040519150601f19603f3d011682016040523d82523d6000602084013e611f82565b606091505b5091509150611f9387838387611f9e565b979650505050505050565b6060831561200d578251600003612006576001600160a01b0385163b6120065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610747565b50816108f5565b6108f583838151156120225781518083602001fd5b8060405162461bcd60e51b8152600401610747919061213e565b60008083601f84011261204e57600080fd5b50813567ffffffffffffffff81111561206657600080fd5b6020830191508360208260051b850101111561208157600080fd5b9250929050565b60008060008084860360c081121561209f57600080fd5b853594506080601f19820112156120b557600080fd5b5060208501925060a085013567ffffffffffffffff8111156120d657600080fd5b6120e28782880161203c565b95989497509550505050565b60005b838110156121095781810151838201526020016120f1565b50506000910152565b6000815180845261212a8160208601602086016120ee565b601f01601f19169290920160200192915050565b602081526000610b746020830184612112565b6001600160a01b03811681146113d357600080fd5b6000806040838503121561217957600080fd5b823561218481612151565b946020939093013593505050565b6000806000606084860312156121a757600080fd5b83356121b281612151565b925060208401356121c281612151565b929592945050506040919091013590565b6000806000606084860312156121e857600080fd5b83356121f381612151565b95602085013595506040909401359392505050565b6001600160601b03811681146113d357600080fd5b6000806000806080858703121561223357600080fd5b843561223e81612151565b935060208501359250604085013561225581612151565b9150606085013561226581612208565b939692955090935050565b60006020828403121561228257600080fd5b8135610b7481612151565b6000806000606084860312156122a257600080fd5b833592506020840135915060408401356122bb81612151565b809150509250925092565b600080604083850312156122d957600080fd5b82356122e481612151565b915060208301356122f481612151565b809150509250929050565b80151581146113d357600080fd5b6000806040838503121561232057600080fd5b823561232b81612151565b915060208301356122f4816122ff565b6000806020838503121561234e57600080fd5b823567ffffffffffffffff81111561236557600080fd5b6123718582860161203c565b90969095509350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156123d457603f198886030184526123c2858351612112565b945092850192908501906001016123a6565b5092979650505050505050565b600181811c908216806123f557607f821691505b60208210810361241557634e487b7160e01b600052602260045260246000fd5b50919050565b60ff811681146113d357600080fd5b60006020828403121561243c57600080fd5b8151610b748161241b565b808201808211156105a257634e487b7160e01b600052601160045260246000fd5b60006020828403121561247a57600080fd5b8151610b7481612151565b60006020828403121561249757600080fd5b5051919050565b6000602082840312156124b057600080fd5b8151610b7481612208565b6000602082840312156124cd57600080fd5b8135610b748161241b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261251b57600080fd5b83018035915067ffffffffffffffff82111561253657600080fd5b60200191503681900382131561208157600080fd5b60006020828403121561255d57600080fd5b8151610b74816122ff565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156125d957888303603f19018552815180516001600160a01b031684528701518784018790526125c687850182612112565b9588019593505090860190600101612591565b509098975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612610576126106124d8565b604052919050565b6000602080838503121561262b57600080fd5b825167ffffffffffffffff8082111561264357600080fd5b8185019150601f86601f84011261265957600080fd5b82518281111561266b5761266b6124d8565b8060051b61267a8682016125e7565b918252848101860191868101908a84111561269457600080fd5b87870192505b83831015612721578251868111156126b25760008081fd5b8701603f81018c136126c45760008081fd5b888101516040888211156126da576126da6124d8565b6126eb828901601f19168c016125e7565b8281528e828486010111156127005760008081fd5b61270f838d83018487016120ee565b8552505050918701919087019061269a565b9a9950505050505050505050565b600082516127418184602087016120ee565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204817a1298717325d5bbee7d7cf172e3594801d85a0097a4634d78cf99aa272b464736f6c63430008180033608060405234801561001057600080fd5b5061069a806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633c78929e14610051578063909f1cad14610088578063ac2293af1461009d578063de9443bf146100b0575b600080fd5b60005461006b90600160a01b90046001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b61009b610096366004610386565b6100d0565b005b61009b6100ab366004610386565b610144565b6100c36100be3660046103b6565b6101be565b60405161007f919061047b565b6000546001600160a01b03161561012e5760405162461bcd60e51b815260206004820152601760248201527f44656c65676174696f6e2f616c72656164792d696e697400000000000000000060448201526064015b60405180910390fd5b6001600160601b0316600160a01b023317600055565b6000546001600160a01b031633146101965760405162461bcd60e51b81526020600482015260156024820152742232b632b3b0ba34b7b717b7b7363c96b7bbb732b960591b6044820152606401610125565b600080546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b6000546060906001600160a01b031633146102135760405162461bcd60e51b81526020600482015260156024820152742232b632b3b0ba34b7b717b7b7363c96b7bbb732b960591b6044820152606401610125565b8160008167ffffffffffffffff81111561022f5761022f6104df565b60405190808252806020026020018201604052801561026257816020015b606081526020019060019003908161024d5790505b5060408051808201909152600081526060602082015290915060005b838110156102ec57868682818110610298576102986104f5565b90506020028101906102aa919061050b565b6102b390610585565b91506102c7826000015183602001516102f7565b8382815181106102d9576102d96104f5565b602090810291909101015260010161027e565b509095945050505050565b6060600080846001600160a01b0316600085604051610316919061063f565b60006040518083038185875af1925050503d8060008114610353576040519150601f19603f3d011682016040523d82523d6000602084013e610358565b606091505b509150915081819061037d5760405162461bcd60e51b81526004016101259190610651565b50949350505050565b60006020828403121561039857600080fd5b81356001600160601b03811681146103af57600080fd5b9392505050565b600080602083850312156103c957600080fd5b823567ffffffffffffffff808211156103e157600080fd5b818501915085601f8301126103f557600080fd5b81358181111561040457600080fd5b8660208260051b850101111561041957600080fd5b60209290920196919550909350505050565b60005b8381101561044657818101518382015260200161042e565b50506000910152565b6000815180845261046781602086016020860161042b565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156104d257603f198886030184526104c085835161044f565b945092850192908501906001016104a4565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261052157600080fd5b9190910192915050565b6040805190810167ffffffffffffffff8111828210171561054e5761054e6104df565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561057d5761057d6104df565b604052919050565b60006040823603121561059757600080fd5b61059f61052b565b82356001600160a01b03811681146105b657600080fd5b815260208381013567ffffffffffffffff808211156105d457600080fd5b9085019036601f8301126105e757600080fd5b8135818111156105f9576105f96104df565b61060b601f8201601f19168501610554565b9150808252368482850101111561062157600080fd5b80848401858401376000908201840152918301919091525092915050565b6000825161052181846020870161042b565b6020815260006103af602083018461044f56fea2646970667358221220ddff944179ffb48e934b4c6f88da8806a9468be64b94e9f45c86c0bd593d4fb564736f6c63430008180033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e6e86a136aa9a45d11d8a5169f9fdf57704db5ca00000000000000000000000002dda5914b78f0751fdf5bbe2050efabd95dff46000000000000000000000000000000000000000000000000000000000000001c5374616b6564205072697a65205772617070656420426974636f696e00000000000000000000000000000000000000000000000000000000000000000000000873746b7057425443000000000000000000000000000000000000000000000000