1 tx
26 calls
constructor
constructor(address _token, uint256 timelockDelay, address canceller, uint48 _votingDelay, uint32 _votingPeriod, uint256 _proposalThreshold)
functions
CANCELLER_ROLE
viewfunction CANCELLER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EXECUTOR_ROLE
viewfunction EXECUTOR_ROLE() view returns (bytes32)
getMinDelay
viewfunction getMinDelay() view returns (uint256)
getOperationState
viewfunction getOperationState(bytes32 id) view returns (uint8)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTimestamp
viewfunction getTimestamp(bytes32 id) view returns (uint256)
governor
viewfunction governor() view returns (address)
hashOperation
purefunction hashOperation(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt) pure returns (bytes32)
hashOperationBatch
purefunction hashOperationBatch(address[] targets, uint256[] values, bytes[] payloads, bytes32 predecessor, bytes32 salt) pure returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isOperation
viewfunction isOperation(bytes32 id) view returns (bool)
isOperationDone
viewfunction isOperationDone(bytes32 id) view returns (bool)
isOperationPending
viewfunction isOperationPending(bytes32 id) view returns (bool)
isOperationReady
viewfunction isOperationReady(bytes32 id) view returns (bool)
PROPOSER_ROLE
viewfunction PROPOSER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
cancel
nonpayablefunction cancel(bytes32 id)
execute
payablefunction execute(address target, uint256 value, bytes payload, bytes32 predecessor, bytes32 salt) payable
executeBatch
payablefunction executeBatch(address[] targets, uint256[] values, bytes[] payloads, bytes32 predecessor, bytes32 salt) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
schedule
nonpayablefunction schedule(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt, uint256 delay)
scheduleBatch
nonpayablefunction scheduleBatch(address[] targets, uint256[] values, bytes[] payloads, bytes32 predecessor, bytes32 salt, uint256 delay)
updateDelay
nonpayablefunction updateDelay(uint256 newDelay)
events
CallExecuted
event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data)
CallSalt
event CallSalt(bytes32 indexed id, bytes32 salt)
CallScheduled
event CallScheduled(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data, bytes32 predecessor, uint256 delay)
Cancelled
event Cancelled(bytes32 indexed id)
MinDelayChange
event MinDelayChange(uint256 oldDuration, uint256 newDuration)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
FailedInnerCall
error FailedInnerCall()
TimelockInsufficientDelay
error TimelockInsufficientDelay(uint256 delay, uint256 minDelay)
TimelockInvalidOperationLength
error TimelockInvalidOperationLength(uint256 targets, uint256 payloads, uint256 values)
TimelockUnauthorizedCaller
error TimelockUnauthorizedCaller(address caller)
TimelockUnexecutedPredecessor
error TimelockUnexecutedPredecessor(bytes32 predecessorId)
TimelockUnexpectedOperationState
error TimelockUnexpectedOperationState(bytes32 operationId, bytes32 expectedStates)
creation bytecode
0x608060405234801562000010575f80fd5b5060405162006e6c38038062006e6c83398101604081905262000033916200035d565b604080515f808252602082018181528284019093528792906200005781306200028b565b506001600160a01b038116156200007657620000745f826200028b565b505b5f5b8351811015620000f157620000be5f8051602062006e0c833981519152858381518110620000aa57620000aa620003e5565b60200260200101516200028b60201b60201c565b50620000e75f8051602062006e4c833981519152858381518110620000aa57620000aa620003e5565b5060010162000078565b505f5b82518110156200013057620001265f8051602062006e2c833981519152848381518110620000aa57620000aa620003e5565b50600101620000f4565b506002849055604080515f8152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1505050508530848484604051620001869062000337565b6001600160a01b03958616815294909316602085015265ffffffffffff909116604084015263ffffffff166060830152608082015260a001604051809103905ff080158015620001d8573d5f803e3d5ffd5b50600380546001600160a01b0319166001600160a01b0392909216918217905562000213905f8051602062006e0c833981519152906200028b565b506003546200023b905f8051602062006e4c833981519152906001600160a01b03166200028b565b5060035462000263905f8051602062006e2c833981519152906001600160a01b03166200028b565b506200027e5f8051602062006e4c833981519152856200028b565b50505050505050620003f9565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166200032e575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620002e53390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000331565b505f5b92915050565b61503b8062001dd183390190565b6001600160a01b03811681146200035a575f80fd5b50565b5f805f805f8060c0878903121562000373575f80fd5b8651620003808162000345565b6020880151604089015191975095506200039a8162000345565b606088015190945065ffffffffffff81168114620003b6575f80fd5b608088015190935063ffffffff81168114620003d0575f80fd5b8092505060a087015190509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b6119ca80620004075f395ff3fe6080604052600436106101bd575f3560e01c80637958004c116100f2578063b1c5f42711610092578063d547741f11610062578063d547741f14610588578063e38335e5146105a7578063f23a6e61146105ba578063f27a0c92146105e5575f80fd5b8063b1c5f427146104f4578063bc197c8114610513578063c4d252f51461053e578063d45c44351461055d575f80fd5b80638f61f4f5116100cd5780638f61f4f51461045c57806391d148541461048f578063a217fddf146104ae578063b08e51c0146104c1575f80fd5b80637958004c146103f25780638065657f1461041e5780638f2a0bb01461043d575f80fd5b8063248a9ca31161015d57806331d507501161013857806331d507501461037657806336568abe14610395578063584b153e146103b457806364d62353146103d3575f80fd5b8063248a9ca31461030a5780632ab0f529146103385780632f2ff15d14610357575f80fd5b80630c340a24116101985780630c340a241461025e578063134008d31461029557806313bc9f20146102a8578063150b7a02146102c7575f80fd5b806301d5062a146101c857806301ffc9a7146101e957806307bd02651461021d575f80fd5b366101c457005b5f80fd5b3480156101d3575f80fd5b506101e76101e23660046111a5565b6105f9565b005b3480156101f4575f80fd5b50610208610203366004611213565b6106cd565b60405190151581526020015b60405180910390f35b348015610228575f80fd5b506102507fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610214565b348015610269575f80fd5b5060035461027d906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b6101e76102a336600461123a565b6106dd565b3480156102b3575f80fd5b506102086102c23660046112a0565b61078f565b3480156102d2575f80fd5b506102f16102e1366004611366565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610214565b348015610315575f80fd5b506102506103243660046112a0565b5f9081526020819052604090206001015490565b348015610343575f80fd5b506102086103523660046112a0565b6107b4565b348015610362575f80fd5b506101e76103713660046113c9565b6107bc565b348015610381575f80fd5b506102086103903660046112a0565b6107e6565b3480156103a0575f80fd5b506101e76103af3660046113c9565b61080a565b3480156103bf575f80fd5b506102086103ce3660046112a0565b610842565b3480156103de575f80fd5b506101e76103ed3660046112a0565b610887565b3480156103fd575f80fd5b5061041161040c3660046112a0565b6108fa565b6040516102149190611407565b348015610429575f80fd5b5061025061043836600461123a565b610942565b348015610448575f80fd5b506101e761045736600461146d565b610980565b348015610467575f80fd5b506102507fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561049a575f80fd5b506102086104a93660046113c9565b610b0c565b3480156104b9575f80fd5b506102505f81565b3480156104cc575f80fd5b506102507ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104ff575f80fd5b5061025061050e366004611515565b610b34565b34801561051e575f80fd5b506102f161052d366004611631565b63bc197c8160e01b95945050505050565b348015610549575f80fd5b506101e76105583660046112a0565b610b78565b348015610568575f80fd5b506102506105773660046112a0565b5f9081526001602052604090205490565b348015610593575f80fd5b506101e76105a23660046113c9565b610c22565b6101e76105b5366004611515565b610c46565b3480156105c5575f80fd5b506102f16105d43660046116d3565b63f23a6e6160e01b95945050505050565b3480156105f0575f80fd5b50600254610250565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161062381610dc7565b5f610632898989898989610942565b905061063e8184610dd4565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516106799695949392919061175a565b60405180910390a383156106c257807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516106b991815260200190565b60405180910390a25b505050505050505050565b5f6106d782610e65565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610708815f610b0c565b610716576107168133610e89565b5f610725888888888888610942565b90506107318185610ec6565b61073d88888888610f14565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516107749493929190611796565b60405180910390a361078581610f88565b5050505050505050565b5f60025b61079c836108fa565b60038111156107ad576107ad6113f3565b1492915050565b5f6003610793565b5f828152602081905260409020600101546107d681610dc7565b6107e08383610fb3565b50505050565b5f806107f1836108fa565b6003811115610802576108026113f3565b141592915050565b6001600160a01b03811633146108335760405163334bd91960e11b815260040160405180910390fd5b61083d8282611042565b505050565b5f8061084d836108fa565b90506001816003811115610863576108636113f3565b14806108805750600281600381111561087e5761087e6113f3565b145b9392505050565b333081146108b85760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b60025460408051918252602082018490527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150600255565b5f81815260016020526040812054805f0361091757505f92915050565b600181036109285750600392915050565b428111156109395750600192915050565b50600292915050565b5f86868686868660405160200161095e9695949392919061175a565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc16109aa81610dc7565b88871415806109b95750888514155b156109eb576040516001624fcdef60e01b03198152600481018a905260248101869052604481018890526064016108af565b5f6109fc8b8b8b8b8b8b8b8b610b34565b9050610a088184610dd4565b5f5b8a811015610abd5780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a4757610a476117c7565b9050602002016020810190610a5c91906117db565b8d8d86818110610a6e57610a6e6117c7565b905060200201358c8c87818110610a8757610a876117c7565b9050602002810190610a9991906117f4565b8c8b604051610aad9695949392919061175a565b60405180910390a3600101610a0a565b508315610aff57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610af691815260200190565b60405180910390a25b5050505050505050505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8888888888888888604051602001610b549897969594939291906118c7565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610ba281610dc7565b610bab82610842565b610be75781610bba60026110ab565b610bc460016110ab565b604051635ead8eb560e01b815260048101939093521760248201526044016108af565b5f828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b5f82815260208190526040902060010154610c3c81610dc7565b6107e08383611042565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c71815f610b0c565b610c7f57610c7f8133610e89565b8786141580610c8e5750878414155b15610cc0576040516001624fcdef60e01b031981526004810189905260248101859052604481018790526064016108af565b5f610cd18a8a8a8a8a8a8a8a610b34565b9050610cdd8185610ec6565b5f5b89811015610db1575f8b8b83818110610cfa57610cfa6117c7565b9050602002016020810190610d0f91906117db565b90505f8a8a84818110610d2457610d246117c7565b905060200201359050365f8a8a86818110610d4157610d416117c7565b9050602002810190610d5391906117f4565b91509150610d6384848484610f14565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d9a9493929190611796565b60405180910390a350505050806001019050610cdf565b50610dbb81610f88565b50505050505050505050565b610dd18133610e89565b50565b610ddd826107e6565b15610e0e5781610dec5f6110ab565b604051635ead8eb560e01b8152600481019290925260248201526044016108af565b5f610e1860025490565b905080821015610e4557604051635433660960e01b815260048101839052602481018290526044016108af565b610e4f8242611966565b5f93845260016020526040909320929092555050565b5f6001600160e01b03198216630271189760e51b14806106d757506106d7826110cd565b610e938282610b0c565b610ec25760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108af565b5050565b610ecf8261078f565b610ede5781610dec60026110ab565b8015801590610ef35750610ef1816107b4565b155b15610ec25760405163121534c360e31b8152600481018290526024016108af565b5f80856001600160a01b0316858585604051610f31929190611985565b5f6040518083038185875af1925050503d805f8114610f6b576040519150601f19603f3d011682016040523d82523d5f602084013e610f70565b606091505b5091509150610f7f8282611101565b50505050505050565b610f918161078f565b610fa05780610dec60026110ab565b5f90815260016020819052604090912055565b5f610fbe8383610b0c565b61103b575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610ff33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106d7565b505f6106d7565b5f61104d8383610b0c565b1561103b575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106d7565b5f8160038111156110be576110be6113f3565b600160ff919091161b92915050565b5f6001600160e01b03198216637965db0b60e01b14806106d757506301ffc9a760e01b6001600160e01b03198316146106d7565b606082611116576111118261111d565b6106d7565b50806106d7565b80511561112d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461115c575f80fd5b919050565b5f8083601f840112611171575f80fd5b5081356001600160401b03811115611187575f80fd5b60208301915083602082850101111561119e575f80fd5b9250929050565b5f805f805f805f60c0888a0312156111bb575f80fd5b6111c488611146565b96506020880135955060408801356001600160401b038111156111e5575f80fd5b6111f18a828b01611161565b989b979a50986060810135976080820135975060a09091013595509350505050565b5f60208284031215611223575f80fd5b81356001600160e01b031981168114610880575f80fd5b5f805f805f8060a0878903121561124f575f80fd5b61125887611146565b95506020870135945060408701356001600160401b03811115611279575f80fd5b61128589828a01611161565b979a9699509760608101359660809091013595509350505050565b5f602082840312156112b0575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156112f3576112f36112b7565b604052919050565b5f82601f83011261130a575f80fd5b81356001600160401b03811115611323576113236112b7565b611336601f8201601f19166020016112cb565b81815284602083860101111561134a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611379575f80fd5b61138285611146565b935061139060208601611146565b92506040850135915060608501356001600160401b038111156113b1575f80fd5b6113bd878288016112fb565b91505092959194509250565b5f80604083850312156113da575f80fd5b823591506113ea60208401611146565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061142757634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8083601f84011261143d575f80fd5b5081356001600160401b03811115611453575f80fd5b6020830191508360208260051b850101111561119e575f80fd5b5f805f805f805f805f60c08a8c031215611485575f80fd5b89356001600160401b038082111561149b575f80fd5b6114a78d838e0161142d565b909b50995060208c01359150808211156114bf575f80fd5b6114cb8d838e0161142d565b909950975060408c01359150808211156114e3575f80fd5b506114f08c828d0161142d565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b5f805f805f805f8060a0898b03121561152c575f80fd5b88356001600160401b0380821115611542575f80fd5b61154e8c838d0161142d565b909a50985060208b0135915080821115611566575f80fd5b6115728c838d0161142d565b909850965060408b013591508082111561158a575f80fd5b506115978b828c0161142d565b999c989b509699959896976060870135966080013595509350505050565b5f82601f8301126115c4575f80fd5b813560206001600160401b038211156115df576115df6112b7565b8160051b6115ee8282016112cb565b9283528481018201928281019087851115611607575f80fd5b83870192505b848310156116265782358252918301919083019061160d565b979650505050505050565b5f805f805f60a08688031215611645575f80fd5b61164e86611146565b945061165c60208701611146565b935060408601356001600160401b0380821115611677575f80fd5b61168389838a016115b5565b94506060880135915080821115611698575f80fd5b6116a489838a016115b5565b935060808801359150808211156116b9575f80fd5b506116c6888289016112fb565b9150509295509295909350565b5f805f805f60a086880312156116e7575f80fd5b6116f086611146565b94506116fe60208701611146565b9350604086013592506060860135915060808601356001600160401b03811115611726575f80fd5b6116c6888289016112fb565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201525f61178160a083018688611732565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201525f6117bd606083018486611732565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156117eb575f80fd5b61088082611146565b5f808335601e19843603018112611809575f80fd5b8301803591506001600160401b03821115611822575f80fd5b60200191503681900382131561119e575f80fd5b5f838385526020808601955060208560051b830101845f5b878110156118ba57848303601f19018952813536889003601e19018112611873575f80fd5b870184810190356001600160401b0381111561188d575f80fd5b80360382131561189b575f80fd5b6118a6858284611732565b9a86019a945050509083019060010161184e565b5090979650505050505050565b60a080825281018890525f8960c08301825b8b811015611907576001600160a01b036118f284611146565b168252602092830192909101906001016118d9565b5083810360208501528881526001600160fb1b03891115611926575f80fd5b8860051b9150818a6020830137018281036020908101604085015261194e9082018789611836565b60608401959095525050608001529695505050505050565b808201808211156106d757634e487b7160e01b5f52601160045260245ffd5b818382375f910190815291905056fea2646970667358221220064af6915fedf298b0bc3262ec7c18820ffba74fb2acccf9a1c57a5551400cbd64736f6c6343000818003361018060405234801562000011575f80fd5b506040516200503b3803806200503b833981016040819052620000349162000464565b83858484846040518060400160405280600e81526020016d2320a6a2bab9a3b7bb32b93737b960911b8152508062000071620001f460201b60201c565b6200007d825f6200020f565b610120526200008e8160016200020f565b61014052815160208084019190912060e052815190820120610100524660a0526200011b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052600362000132828262000582565b506200014090508362000247565b6200014b82620002ad565b620001568162000352565b5050506001600160a01b031661016052620001718162000393565b50600e80546001600160a01b0319166001600160a01b03871617905560405185906200019d906200043e565b6001600160a01b039091168152602001604051809103905ff080158015620001c7573d5f803e3d5ffd5b50600f80546001600160a01b0319166001600160a01b039290921691909117905550620006c09350505050565b6040805180820190915260018152603160f81b602082015290565b5f6020835110156200022e576200022683620003fc565b905062000241565b816200023b848262000582565b5060ff90505b92915050565b6008546040805165ffffffffffff928316815291831660208301527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a16008805465ffffffffffff191665ffffffffffff92909216919091179055565b8063ffffffff165f03620002db5760405163f1cfbf0560e01b81525f60048201526024015b60405180910390fd5b6008546040805163ffffffff66010000000000009093048316815291831660208301527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a16008805463ffffffff90921666010000000000000263ffffffff60301b19909216919091179055565b60075460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600755565b600c54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80829050601f8151111562000429578260405163305a27a960e01b8152600401620002d291906200064e565b805162000436826200069c565b179392505050565b61023f8062004dfc83390190565b6001600160a01b038116811462000461575f80fd5b50565b5f805f805f60a0868803121562000479575f80fd5b855162000486816200044c565b602087015190955062000499816200044c565b604087015190945065ffffffffffff81168114620004b5575f80fd5b606087015190935063ffffffff81168114620004cf575f80fd5b80925050608086015190509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200050d57607f821691505b6020821081036200052c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200057d57805f5260205f20601f840160051c81016020851015620005595750805b601f840160051c820191505b818110156200057a575f815560010162000565565b50505b505050565b81516001600160401b038111156200059e576200059e620004e4565b620005b681620005af8454620004f8565b8462000532565b602080601f831160018114620005ec575f8415620005d45750858301515b5f19600386901b1c1916600185901b17855562000646565b5f85815260208120601f198616915b828110156200061c57888601518255948401946001909101908401620005fb565b50858210156200063a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602080835283518060208501525f5b818110156200067c578581018301518582016040015282016200065e565b505f604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200052c575f1960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051610160516146cb620007315f395f8181610a91015281816112c30152818161177d01526123f701525f6123c401525f61239801525f612aab01525f612a8301525f6129de01525f612a0801525f612a3201526146cb5ff3fe6080604052600436106102f6575f3560e01c806384b0196e11610189578063c59057e4116100d8578063e540d01d11610092578063f23a6e611161006d578063f23a6e6114610a45578063f8ce560a14610a64578063fc0c546a14610a83578063fe0d94c114610ab5575f80fd5b8063e540d01d146109e8578063eb9019d414610a07578063ece40cc114610a26575f80fd5b8063c59057e414610901578063d33219b414610920578063da35c6641461093d578063dd4e2ba514610951578063ddf0b00914610996578063deaaa7cc146109b5575f80fd5b8063ab58fb8e11610143578063bc197c811161011e578063bc197c8114610893578063c01f9e37146108b2578063c26c12eb146108d1578063c28bc2fa146108ee575f80fd5b8063ab58fb8e1461082a578063b077415814610860578063b58131b01461087f575f80fd5b806384b0196e1461075c5780638ff262e31461078357806391ddadf4146107a25780639a802a6d146107cd578063a890c910146107ec578063a9a952941461080b575f80fd5b806340e58ee51161024557806356781388116101ff57806379051887116101da57806379051887146106cb5780637b3c71d3146106ea5780637d5e81e2146107095780637ecebe0014610728575f80fd5b8063567813881461066e5780635b8d0e0d1461068d5780635f398a14146106ac575f80fd5b806340e58ee5146105585780634385963214610577578063452115d6146105bf5780634bf5d7e9146105de578063544ffc9c146105f257806354fd4d5014610645575f80fd5b806316e9eaec116102b05780632e82db941161028b5780632e82db94146104b55780632fe3e261146104e55780633932abb1146105185780633e4f49e61461052c575f80fd5b806316e9eaec146104545780632656227d146104835780632d63f69314610496575f80fd5b806301ffc9a71461033157806302a251a31461036557806306fdde0314610390578063143489d0146103b1578063150b7a02146103fd578063160cbed714610435575f80fd5b3661032d5730610304610ac8565b6001600160a01b03161461032b57604051637485328f60e11b815260040160405180910390fd5b005b5f80fd5b34801561033c575f80fd5b5061035061034b3660046135ab565b610ae0565b60405190151581526020015b60405180910390f35b348015610370575f80fd5b50600854600160301b900463ffffffff165b60405190815260200161035c565b34801561039b575f80fd5b506103a4610b31565b60405161035c919061361f565b3480156103bc575f80fd5b506103e56103cb366004613631565b5f908152600460205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161035c565b348015610408575f80fd5b5061041c61041736600461371f565b610bc1565b6040516001600160e01b0319909116815260200161035c565b348015610440575f80fd5b5061038261044f3660046138ee565b610c03565b34801561045f575f80fd5b5061047361046e366004613631565b610ccf565b60405161035c9493929190613a41565b6103826104913660046138ee565b610ece565b3480156104a1575f80fd5b506103826104b0366004613631565b611036565b3480156104c0575f80fd5b506104d46104cf366004613631565b611056565b60405161035c959493929190613a8b565b3480156104f0575f80fd5b506103827f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81181565b348015610523575f80fd5b506103826110a0565b348015610537575f80fd5b5061054b610546366004613631565b6110b2565b60405161035c9190613b10565b348015610563575f80fd5b5061032b610572366004613631565b6110bc565b348015610582575f80fd5b50610350610591366004613b1e565b5f8281526009602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156105ca575f80fd5b506103826105d93660046138ee565b611253565b3480156105e9575f80fd5b506103a46112bf565b3480156105fd575f80fd5b5061062a61060c366004613631565b5f908152600960205260409020805460018201546002909201549092565b6040805193845260208401929092529082015260600161035c565b348015610650575f80fd5b506040805180820190915260018152603160f81b60208201526103a4565b348015610679575f80fd5b50610382610688366004613b5c565b61137f565b348015610698575f80fd5b506103826106a7366004613bca565b6113a6565b3480156106b7575f80fd5b506103826106c6366004613c7c565b611502565b3480156106d6575f80fd5b5061032b6106e5366004613d0c565b611555565b3480156106f5575f80fd5b50610382610704366004613d27565b611569565b348015610714575f80fd5b50610382610723366004613d7c565b6115af565b348015610733575f80fd5b50610382610742366004613e28565b6001600160a01b03165f9081526002602052604090205490565b348015610767575f80fd5b50610770611669565b60405161035c9796959493929190613e43565b34801561078e575f80fd5b5061038261079d366004613eb2565b6116ab565b3480156107ad575f80fd5b506107b661177a565b60405165ffffffffffff909116815260200161035c565b3480156107d8575f80fd5b506103826107e7366004613eff565b611801565b3480156107f7575f80fd5b5061032b610806366004613e28565b61180d565b348015610816575f80fd5b50610350610825366004613631565b61181e565b348015610835575f80fd5b50610382610844366004613631565b5f9081526004602052604090206001015465ffffffffffff1690565b34801561086b575f80fd5b5061032b61087a366004613e28565b611826565b34801561088a575f80fd5b506103826118a2565b34801561089e575f80fd5b5061041c6108ad366004613f53565b6118ac565b3480156108bd575f80fd5b506103826108cc366004613631565b6118ef565b3480156108dc575f80fd5b50600f546001600160a01b03166103e5565b61032b6108fc366004613fdf565b611931565b34801561090c575f80fd5b5061038261091b3660046138ee565b6119ad565b34801561092b575f80fd5b50600c546001600160a01b03166103e5565b348015610948575f80fd5b50600a54610382565b34801561095c575f80fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e908201526103a4565b3480156109a1575f80fd5b5061032b6109b0366004613631565b6119e6565b3480156109c0575f80fd5b506103827ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d781565b3480156109f3575f80fd5b5061032b610a0236600461401e565b611b78565b348015610a12575f80fd5b50610382610a21366004614041565b611b89565b348015610a31575f80fd5b5061032b610a40366004613631565b611baf565b348015610a50575f80fd5b5061041c610a5f36600461406b565b611bc0565b348015610a6f575f80fd5b50610382610a7e366004613631565b611c03565b348015610a8e575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e5565b61032b610ac3366004613631565b611c6e565b5f610adb600c546001600160a01b031690565b905090565b5f6001600160e01b031982166332a2ad4360e11b1480610b1057506001600160e01b03198216630271189760e51b145b80610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610b40906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906140ce565b8015610bb75780601f10610b8e57610100808354040283529160200191610bb7565b820191905f5260205f20905b815481529060010190602001808311610b9a57829003601f168201915b5050505050905090565b5f30610bcb610ac8565b6001600160a01b031614610bf257604051637485328f60e11b815260040160405180910390fd5b50630a85bd0160e11b949350505050565b5f80610c11868686866119ad565b9050610c2681610c216004611e00565b611e22565b505f610c358288888888611e5f565b905065ffffffffffff811615610cac575f82815260046020908152604091829020600101805465ffffffffffff191665ffffffffffff85169081179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a1610cc5565b604051634844252360e11b815260040160405180910390fd5b5095945050505050565b5f818152600b602090815260408083208151815460a0948102820185019093526080810183815260609586958695919485949390928492849190840182828015610d4057602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d22575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610d9657602002820191905f5260205f20905b815481526020019060010190808311610d82575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020015f905b82821015610e6b578382905f5260205f20018054610de0906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c906140ce565b8015610e575780601f10610e2e57610100808354040283529160200191610e57565b820191905f5260205f20905b815481529060010190602001808311610e3a57829003601f168201915b505050505081526020019060010190610dc3565b505050508152602001600382015481525050905080606001515f801b03610ead57604051636ad0607560e01b8152600481018790526024015b60405180910390fd5b80516020820151604083015160609093015191989097509195509350915050565b5f80610edc868686866119ad565b9050610efc81610eec6005611e00565b610ef66004611e00565b17611e22565b505f818152600460205260409020805460ff60f01b1916600160f01b17905530610f24610ac8565b6001600160a01b031614610fad575f5b8651811015610fab57306001600160a01b0316878281518110610f5957610f59614106565b60200260200101516001600160a01b031603610fa357610fa3858281518110610f8457610f84614106565b6020026020010151805190602001206005611e6d90919063ffffffff16565b600101610f34565b505b610fba8187878787611edd565b30610fc3610ac8565b6001600160a01b031614158015610fef57506005546001600160801b03808216600160801b9092041614155b15610ff9575f6005555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906020015b60405180910390a195945050505050565b5f90815260046020526040902054600160a01b900465ffffffffffff1690565b5f60608060605f80600a878154811061107157611071614106565b905f5260205f20015490505f805f8061108985610ccf565b979e929d50909b5099509497509395505050505050565b5f610adb60085465ffffffffffff1690565b5f610b2b82611ef1565b5f818152600b60209081526040918290208054835181840281018401909452808452909261124e929091849183018282801561111f57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611101575b50505050508260010180548060200260200160405190810160405280929190818152602001828054801561117057602002820191905f5260205f20905b81548152602001906001019080831161115c575b505050505083600201805480602002602001604051908101604052809291908181526020015f905b82821015611240578382905f5260205f200180546111b5906140ce565b80601f01602080910402602001604051908101604052809291908181526020018280546111e1906140ce565b801561122c5780601f106112035761010080835404028352916020019161122c565b820191905f5260205f20905b81548152906001019060200180831161120f57829003601f168201915b505050505081526020019060010190611198565b505050508460030154611253565b505050565b5f80611261868686866119ad565b905061127081610c215f611e00565b505f818152600460205260409020546001600160a01b031633146112a95760405163233d98e360e01b8152336004820152602401610ea4565b6112b58686868661202a565b9695505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634bf5d7e96040518163ffffffff1660e01b81526004015f60405180830381865afa92505050801561133e57506040513d5f823e601f3d908101601f1916820160405261133b919081019061411a565b60015b61137a575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b5f8033905061139e84828560405180602001604052805f815250612040565b949350505050565b5f80611487876114817f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118c8c8c6113f98e6001600160a01b03165f90815260026020526040902080546001810190915590565b8d8d604051611409929190614182565b60405180910390208c805190602001206040516020016114669796959493929190968752602087019590955260ff9390931660408601526001600160a01b03919091166060850152608084015260a083015260c082015260e00190565b60405160208183030381529060405280519060200120612061565b8561208d565b9050806114b2576040516394ab6c0760e01b81526001600160a01b0388166004820152602401610ea4565b6114f589888a89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92506120e2915050565b9998505050505050505050565b5f8033905061154a87828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92506120e2915050565b979650505050505050565b61155d6121bc565b61156681612235565b50565b5f803390506112b586828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061204092505050565b5f336115bb818461229b565b6115e35760405163d9b3955760e01b81526001600160a01b0382166004820152602401610ea4565b5f6116098260016115f261177a565b6115fc91906141a5565b65ffffffffffff16611b89565b90505f6116146118a2565b90508082101561165057604051636121770b60e11b81526001600160a01b03841660048201526024810183905260448101829052606401610ea4565b61165d8888888887612383565b98975050505050505050565b5f6060805f805f606061167a612391565b6116826123bd565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f80611735846114817ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78989896116fe8b6001600160a01b03165f90815260026020526040902080546001810190915590565b60408051602081019690965285019390935260ff90911660608401526001600160a01b0316608083015260a082015260c001611466565b905080611760576040516394ab6c0760e01b81526001600160a01b0385166004820152602401610ea4565b6112b586858760405180602001604052805f815250612040565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156117f5575060408051601f3d908101601f191682019092526117f2918101906141cb565b60015b61137a57610adb6123ea565b5f61139e8484846123f4565b6118156121bc565b61156681612487565b5f6001610b2b565b600c546001600160a01b031633146118805760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792074696d656c6f636b2063616e2063616c6c207468697300000000006044820152606401610ea4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610adb60075490565b5f306118b6610ac8565b6001600160a01b0316146118dd57604051637485328f60e11b815260040160405180910390fd5b5063bc197c8160e01b95945050505050565b5f8181526004602052604081205461192390600160d01b810463ffffffff1690600160a01b900465ffffffffffff166141e6565b65ffffffffffff1692915050565b6119396121bc565b5f80856001600160a01b0316858585604051611956929190614182565b5f6040518083038185875af1925050503d805f8114611990576040519150601f19603f3d011682016040523d82523d5f602084013e611995565b606091505b50915091506119a482826124f0565b50505050505050565b5f848484846040516020016119c59493929190613a41565b60408051601f19818403018152919052805160209091012095945050505050565b5f818152600b60209081526040918290208054835181840281018401909452808452909261124e9290918491830182828015611a4957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611a2b575b505050505082600101805480602002602001604051908101604052809291908181526020018280548015611a9a57602002820191905f5260205f20905b815481526020019060010190808311611a86575b505050505083600201805480602002602001604051908101604052809291908181526020015f905b82821015611b6a578382905f5260205f20018054611adf906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0b906140ce565b8015611b565780601f10611b2d57610100808354040283529160200191611b56565b820191905f5260205f20905b815481529060010190602001808311611b3957829003601f168201915b505050505081526020019060010190611ac2565b505050508460030154610c03565b611b806121bc565b6115668161250c565b5f611ba88383611ba360408051602081019091525f815290565b6123f4565b9392505050565b611bb76121bc565b611566816125a8565b5f30611bca610ac8565b6001600160a01b031614611bf157604051637485328f60e11b815260040160405180910390fd5b5063f23a6e6160e01b95945050505050565b600f54604051637c672b0560e11b8152600481018390525f916001600160a01b03169063f8ce560a90602401602060405180830381865afa158015611c4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2b9190614205565b5f818152600b60209081526040918290208054835181840281018401909452808452909261124e9290918491830182828015611cd157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611cb3575b505050505082600101805480602002602001604051908101604052809291908181526020018280548015611d2257602002820191905f5260205f20905b815481526020019060010190808311611d0e575b505050505083600201805480602002602001604051908101604052809291908181526020015f905b82821015611df2578382905f5260205f20018054611d67906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611d93906140ce565b8015611dde5780601f10611db557610100808354040283529160200191611dde565b820191905f5260205f20905b815481529060010190602001808311611dc157829003601f168201915b505050505081526020019060010190611d4a565b505050508460030154610ece565b5f816007811115611e1357611e13613adc565b600160ff919091161b92915050565b5f80611e2d846110b2565b90505f83611e3a83611e00565b1603611ba8578381846040516331b75e4d60e01b8152600401610ea49392919061421c565b5f6112b586868686866125e9565b81546001600160801b03600160801b820481169181166001830190911603611ea857604051638acb5f2760e01b815260040160405180910390fd5b6001600160801b038082165f90815260018086016020526040909120939093558354919092018216600160801b029116179055565b611eea858585858561277a565b5050505050565b5f80611efc8361280a565b90506005816007811115611f1257611f12613adc565b14611f1d5792915050565b5f838152600d60205260409081902054600c549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa158015611f73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f97919061423e565b15611fa6575060059392505050565b600c54604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015611fed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612011919061423e565b15612020575060079392505050565b5060029392505050565b5f6120378585858561293b565b95945050505050565b5f6120378585858561205c60408051602081019091525f815290565b6120e2565b5f610b2b61206d6129d2565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f61209a8585612afb565b5090925090505f8160038111156120b3576120b3613adc565b1480156120d15750856001600160a01b0316826001600160a01b0316145b806112b557506112b5868686612b44565b5f6120f186610c216001611e00565b505f6121068661210089611036565b856123f4565b90506121158787878487612c1a565b82515f0361216957856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48887848860405161215c949392919061425d565b60405180910390a26112b5565b856001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871288878488886040516121aa959493929190614284565b60405180910390a29695505050505050565b336121c5610ac8565b6001600160a01b0316146121ee576040516347096e4760e01b8152336004820152602401610ea4565b306121f7610ac8565b6001600160a01b031614612233575f8036604051612216929190614182565b604051809103902090505b8061222c6005612d14565b0361222157505b565b6008546040805165ffffffffffff928316815291831660208301527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a16008805465ffffffffffff191665ffffffffffff92909216919091179055565b80515f9060348110156122b2576001915050610b2b565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b146122e557600192505050610b2b565b5f806122f26028856142bd565b90505b83811015612362575f8061232888848151811061231457612314614106565b01602001516001600160f81b031916612d90565b91509150816123405760019650505050505050610b2b565b8060ff166004856001600160a01b0316901b17935050508060010190506122f5565b50856001600160a01b0316816001600160a01b031614935050505092915050565b5f6112b58686868686612e20565b6060610adb7f00000000000000000000000000000000000000000000000000000000000000005f612ef9565b6060610adb7f00000000000000000000000000000000000000000000000000000000000000006001612ef9565b5f610adb43612fa2565b5f7f0000000000000000000000000000000000000000000000000000000000000000604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a890604401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139e9190614205565b600c54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6060826125055761250082612fd8565b610b2b565b5080610b2b565b8063ffffffff165f036125345760405163f1cfbf0560e01b81525f6004820152602401610ea4565b6008546040805163ffffffff600160301b9093048316815291831660208301527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a16008805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b60075460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600755565b5f80600c5f9054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561263b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265f9190614205565b90505f3060601b6bffffffffffffffffffffffff19168418600c5460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f427906126b0908a908a908a905f9088906004016142d0565b602060405180830381865afa1580156126cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ef9190614205565b5f898152600d602052604080822092909255600c5491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091612739918b918b918b919088908a9060040161431d565b5f604051808303815f87803b158015612750575f80fd5b505af1158015612762573d5f803e3d5ffd5b5050505061165d82426127759190614374565b612fa2565b600c546001600160a01b031663e38335e5348686865f3060601b6bffffffffffffffffffffffff191688186040518763ffffffff1660e01b81526004016127c59594939291906142d0565b5f604051808303818588803b1580156127dc575f80fd5b505af11580156127ee573d5f803e3d5ffd5b5050505f9687525050600d602052505060408320929092555050565b5f818152600460205260408120805460ff600160f01b8204811691600160f81b900416811561283e57506007949350505050565b801561284f57506002949350505050565b5f61285986611036565b9050805f0361287e57604051636ad0607560e01b815260048101879052602401610ea4565b5f61288761177a565b65ffffffffffff1690508082106128a457505f9695505050505050565b5f6128ae886118ef565b90508181106128c557506001979650505050505050565b6128ce88613001565b15806128ed57505f888152600960205260409020805460019091015411155b1561290057506003979650505050505050565b5f8881526004602052604090206001015465ffffffffffff165f0361292d57506004979650505050505050565b506005979650505050505050565b5f8061294986868686613037565b5f818152600d60205260409020549091508015610cc557600c5460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f5906024015f604051808303815f87803b1580156129a3575f80fd5b505af11580156129b5573d5f803e3d5ffd5b5050505f838152600d602052604081205550509050949350505050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a2a57507f000000000000000000000000000000000000000000000000000000000000000046145b15612a5457507f000000000000000000000000000000000000000000000000000000000000000090565b610adb604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f805f8351604103612b32576020840151604085015160608601515f1a612b24888285856130e6565b955095509550505050612b3d565b505081515f91506002905b9250925092565b5f805f856001600160a01b03168585604051602401612b64929190614387565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251612b99919061439f565b5f60405180830381855afa9150503d805f8114612bd1576040519150601f19603f3d011682016040523d82523d5f602084013e612bd6565b606091505b5091509150818015612bea57506020815110155b80156112b557508051630b135d3f60e11b90612c0f9083016020908101908401614205565b149695505050505050565b5f8581526009602090815260408083206001600160a01b0388168452600381019092529091205460ff1615612c6d576040516371c6af4960e01b81526001600160a01b0386166004820152602401610ea4565b6001600160a01b0385165f9081526003820160205260409020805460ff1916600117905560ff8416612cb65782815f015f828254612cab9190614374565b90915550612d0c9050565b5f1960ff851601612cd45782816001015f828254612cab9190614374565b60011960ff851601612cf35782816002015f828254612cab9190614374565b6040516303599be160e11b815260040160405180910390fd5b505050505050565b80545f906001600160801b0380821691600160801b9004168103612d4b576040516375e52f4f60e01b815260040160405180910390fd5b6001600160801b038181165f908152600185810160205260408220805492905585546fffffffffffffffffffffffffffffffff19169301909116919091179092555090565b5f8060f883901c602f81118015612daa5750603a8160ff16105b15612dbf57600194602f199091019350915050565b8060ff166040108015612dd5575060478160ff16105b15612dea576001946036199091019350915050565b8060ff166060108015612e00575060678160ff16105b15612e15576001946056199091019350915050565b505f93849350915050565b5f80612e2f87878787876131ae565b600a80546001810182555f9182527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801829055604080516080810182528a815260208181018b90528183018a90528851898201206060830152848452600b8152919092208251805194955092939092612eac92849291019061345c565b506020828101518051612ec592600185019201906134bb565b5060408201518051612ee19160028401916020909101906134f4565b50606091909101516003909101559695505050505050565b606060ff8314612f1357612f0c836133c8565b9050610b2b565b818054612f1f906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054612f4b906140ce565b8015612f965780601f10612f6d57610100808354040283529160200191612f96565b820191905f5260205f20905b815481529060010190602001808311612f7957829003601f168201915b50505050509050610b2b565b5f65ffffffffffff821115612fd4576040516306dfcc6560e41b81526030600482015260248101839052604401610ea4565b5090565b805115612fe85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f818152600960205260408120600281015460018201546130229190614374565b61302e610a7e85611036565b11159392505050565b5f80613045868686866119ad565b9050613093816130556007611e00565b61305f6006611e00565b6130696002611e00565b60016130766007826143ba565b6130819060026144b3565b61308b91906142bd565b181818611e22565b505f818152600460205260409081902080546001600160f81b0316600160f81b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110259083815260200190565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561311f57505f915060039050826131a4565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613170573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661319b57505f9250600191508290506131a4565b92505f91508190505b9450945094915050565b5f6131c286868686805190602001206119ad565b9050845186511415806131d757508351865114155b806131e157508551155b1561321657855184518651604051630447b05d60e41b8152600481019390935260248301919091526044820152606401610ea4565b5f81815260046020526040902054600160a01b900465ffffffffffff161561325f5780613242826110b2565b6040516331b75e4d60e01b8152610ea49291905f9060040161421c565b5f6132686110a0565b61327061177a565b65ffffffffffff166132829190614374565b90505f61329c60085463ffffffff600160301b9091041690565b5f84815260046020526040902080546001600160a01b0319166001600160a01b0387161781559091506132ce83612fa2565b815465ffffffffffff91909116600160a01b0265ffffffffffff60a01b199091161781556132fb82613405565b815463ffffffff91909116600160d01b0263ffffffff60d01b1990911617815588517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e090859087908c908c906001600160401b0381111561335e5761335e61365c565b60405190808252806020026020018201604052801561339157816020015b606081526020019060019003908161337c5790505b508c8961339e8a82614374565b8e6040516133b4999897969594939291906144c1565b60405180910390a150505095945050505050565b60605f6133d483613435565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f63ffffffff821115612fd4576040516306dfcc6560e41b81526020600482015260248101839052604401610ea4565b5f60ff8216601f811115610b2b57604051632cd44ac360e21b815260040160405180910390fd5b828054828255905f5260205f209081019282156134af579160200282015b828111156134af57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061347a565b50612fd4929150613544565b828054828255905f5260205f209081019282156134af579160200282015b828111156134af5782518255916020019190600101906134d9565b828054828255905f5260205f20908101928215613538579160200282015b82811115613538578251829061352890826145da565b5091602001919060010190613512565b50612fd4929150613558565b5b80821115612fd4575f8155600101613545565b80821115612fd4575f61356b8282613574565b50600101613558565b508054613580906140ce565b5f825580601f1061358f575050565b601f0160209004905f5260205f20908101906115669190613544565b5f602082840312156135bb575f80fd5b81356001600160e01b031981168114611ba8575f80fd5b5f5b838110156135ec5781810151838201526020016135d4565b50505f910152565b5f815180845261360b8160208601602086016135d2565b601f01601f19169290920160200192915050565b602081525f611ba860208301846135f4565b5f60208284031215613641575f80fd5b5035919050565b6001600160a01b0381168114611566575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156136985761369861365c565b604052919050565b5f6001600160401b038211156136b8576136b861365c565b50601f01601f191660200190565b5f6136d86136d3846136a0565b613670565b90508281528383830111156136eb575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112613710575f80fd5b611ba8838335602085016136c6565b5f805f8060808587031215613732575f80fd5b843561373d81613648565b9350602085013561374d81613648565b92506040850135915060608501356001600160401b0381111561376e575f80fd5b61377a87828801613701565b91505092959194509250565b5f6001600160401b0382111561379e5761379e61365c565b5060051b60200190565b5f82601f8301126137b7575f80fd5b813560206137c76136d383613786565b8083825260208201915060208460051b8701019350868411156137e8575f80fd5b602086015b8481101561380d57803561380081613648565b83529183019183016137ed565b509695505050505050565b5f82601f830112613827575f80fd5b813560206138376136d383613786565b8083825260208201915060208460051b870101935086841115613858575f80fd5b602086015b8481101561380d578035835291830191830161385d565b5f82601f830112613883575f80fd5b813560206138936136d383613786565b82815260059290921b840181019181810190868411156138b1575f80fd5b8286015b8481101561380d5780356001600160401b038111156138d2575f80fd5b6138e08986838b0101613701565b8452509183019183016138b5565b5f805f8060808587031215613901575f80fd5b84356001600160401b0380821115613917575f80fd5b613923888389016137a8565b95506020870135915080821115613938575f80fd5b61394488838901613818565b94506040870135915080821115613959575f80fd5b5061396687828801613874565b949793965093946060013593505050565b5f815180845260208085019450602084015f5b838110156139af5781516001600160a01b03168752958201959082019060010161398a565b509495945050505050565b5f815180845260208085019450602084015f5b838110156139af578151875295820195908201906001016139cd565b5f8282518085526020808601955060208260051b840101602086015f5b84811015613a3457601f19868403018952613a228383516135f4565b98840198925090830190600101613a06565b5090979650505050505050565b608081525f613a536080830187613977565b8281036020840152613a6581876139ba565b90508281036040840152613a7981866139e9565b91505082606083015295945050505050565b85815260a060208201525f613aa360a0830187613977565b8281036040840152613ab581876139ba565b90508281036060840152613ac981866139e9565b9150508260808301529695505050505050565b634e487b7160e01b5f52602160045260245ffd5b60088110613b0c57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610b2b8284613af0565b5f8060408385031215613b2f575f80fd5b823591506020830135613b4181613648565b809150509250929050565b803560ff8116811461137a575f80fd5b5f8060408385031215613b6d575f80fd5b82359150613b7d60208401613b4c565b90509250929050565b5f8083601f840112613b96575f80fd5b5081356001600160401b03811115613bac575f80fd5b602083019150836020828501011115613bc3575f80fd5b9250929050565b5f805f805f805f60c0888a031215613be0575f80fd5b87359650613bf060208901613b4c565b95506040880135613c0081613648565b945060608801356001600160401b0380821115613c1b575f80fd5b613c278b838c01613b86565b909650945060808a0135915080821115613c3f575f80fd5b613c4b8b838c01613701565b935060a08a0135915080821115613c60575f80fd5b50613c6d8a828b01613701565b91505092959891949750929550565b5f805f805f60808688031215613c90575f80fd5b85359450613ca060208701613b4c565b935060408601356001600160401b0380821115613cbb575f80fd5b613cc789838a01613b86565b90955093506060880135915080821115613cdf575f80fd5b50613cec88828901613701565b9150509295509295909350565b65ffffffffffff81168114611566575f80fd5b5f60208284031215613d1c575f80fd5b8135611ba881613cf9565b5f805f8060608587031215613d3a575f80fd5b84359350613d4a60208601613b4c565b925060408501356001600160401b03811115613d64575f80fd5b613d7087828801613b86565b95989497509550505050565b5f805f8060808587031215613d8f575f80fd5b84356001600160401b0380821115613da5575f80fd5b613db1888389016137a8565b95506020870135915080821115613dc6575f80fd5b613dd288838901613818565b94506040870135915080821115613de7575f80fd5b613df388838901613874565b93506060870135915080821115613e08575f80fd5b508501601f81018713613e19575f80fd5b61377a878235602084016136c6565b5f60208284031215613e38575f80fd5b8135611ba881613648565b60ff60f81b8816815260e060208201525f613e6160e08301896135f4565b8281036040840152613e7381896135f4565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050613ea481856139ba565b9a9950505050505050505050565b5f805f8060808587031215613ec5575f80fd5b84359350613ed560208601613b4c565b92506040850135613ee581613648565b915060608501356001600160401b0381111561376e575f80fd5b5f805f60608486031215613f11575f80fd5b8335613f1c81613648565b92506020840135915060408401356001600160401b03811115613f3d575f80fd5b613f4986828701613701565b9150509250925092565b5f805f805f60a08688031215613f67575f80fd5b8535613f7281613648565b94506020860135613f8281613648565b935060408601356001600160401b0380821115613f9d575f80fd5b613fa989838a01613818565b94506060880135915080821115613fbe575f80fd5b613fca89838a01613818565b93506080880135915080821115613cdf575f80fd5b5f805f8060608587031215613ff2575f80fd5b8435613ffd81613648565b93506020850135925060408501356001600160401b03811115613d64575f80fd5b5f6020828403121561402e575f80fd5b813563ffffffff81168114611ba8575f80fd5b5f8060408385031215614052575f80fd5b823561405d81613648565b946020939093013593505050565b5f805f805f60a0868803121561407f575f80fd5b853561408a81613648565b9450602086013561409a81613648565b9350604086013592506060860135915060808601356001600160401b038111156140c2575f80fd5b613cec88828901613701565b600181811c908216806140e257607f821691505b60208210810361410057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561412a575f80fd5b81516001600160401b0381111561413f575f80fd5b8201601f8101841361414f575f80fd5b805161415d6136d3826136a0565b818152856020838501011115614171575f80fd5b6120378260208301602086016135d2565b818382375f9101908152919050565b634e487b7160e01b5f52601160045260245ffd5b65ffffffffffff8281168282160390808211156141c4576141c4614191565b5092915050565b5f602082840312156141db575f80fd5b8151611ba881613cf9565b65ffffffffffff8181168382160190808211156141c4576141c4614191565b5f60208284031215614215575f80fd5b5051919050565b838152606081016142306020830185613af0565b826040830152949350505050565b5f6020828403121561424e575f80fd5b81518015158114611ba8575f80fd5b84815260ff84166020820152826040820152608060608201525f6112b560808301846135f4565b85815260ff8516602082015283604082015260a060608201525f6142ab60a08301856135f4565b828103608084015261165d81856135f4565b81810381811115610b2b57610b2b614191565b60a081525f6142e260a0830188613977565b82810360208401526142f481886139ba565b9050828103604084015261430881876139e9565b60608401959095525050608001529392505050565b60c081525f61432f60c0830189613977565b828103602084015261434181896139ba565b9050828103604084015261435581886139e9565b60608401969096525050608081019290925260a0909101529392505050565b80820180821115610b2b57610b2b614191565b828152604060208201525f61139e60408301846135f4565b5f82516143b08184602087016135d2565b9190910192915050565b60ff8181168382160190811115610b2b57610b2b614191565b600181815b8085111561440d57815f19048211156143f3576143f3614191565b8085161561440057918102915b93841c93908002906143d8565b509250929050565b5f8261442357506001610b2b565b8161442f57505f610b2b565b8160018114614445576002811461444f5761446b565b6001915050610b2b565b60ff84111561446057614460614191565b50506001821b610b2b565b5060208310610133831016604e8410600b841016171561448e575081810a610b2b565b61449883836143d3565b805f19048211156144ab576144ab614191565b029392505050565b5f611ba860ff841683614415565b5f6101208b8352602060018060a01b038c16818501528160408501526144e98285018c613977565b915083820360608501526144fd828b6139ba565b915083820360808501528189518084528284019150828160051b850101838c015f5b8381101561454d57601f1987840301855261453b8383516135f4565b9486019492509085019060010161451f565b505086810360a0880152614561818c6139e9565b9450505050508560c08401528460e084015282810361010084015261458681856135f4565b9c9b505050505050505050505050565b601f82111561124e57805f5260205f20601f840160051c810160208510156145bb5750805b601f840160051c820191505b81811015611eea575f81556001016145c7565b81516001600160401b038111156145f3576145f361365c565b6146078161460184546140ce565b84614596565b602080601f83116001811461463a575f84156146235750858301515b5f19600386901b1c1916600185901b178555612d0c565b5f85815260208120601f198616915b8281101561466857888601518255948401946001909101908401614649565b508582101561468557878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220794436c11c02af2429a3eeabf4fc5bf599b520be1e030fd133bf7d418aebba5264736f6c6343000818003360a060405234801561000f575f80fd5b5060405161023f38038061023f83398101604081905261002e9161003f565b6001600160a01b031660805261006c565b5f6020828403121561004f575f80fd5b81516001600160a01b0381168114610065575f80fd5b9392505050565b6080516101bc6100835f395f605601526101bc5ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f8ce560a1461002d575b5f80fd5b61004061003b366004610110565b610052565b60405190815260200160405180910390f35b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d49190610127565b905060588110156100e757505f92915050565b600860586100f5838261013e565b6100ff9190610167565b6101099190610167565b9392505050565b5f60208284031215610120575f80fd5b5035919050565b5f60208284031215610137575f80fd5b5051919050565b808202811582820484141761016157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8261018157634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212206e3d96c1fcc4bb12ca277635007ffa7265d85e3520653466c026ec9e1c1aa4bc64736f6c63430008180033b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78300000000000000000000000012cf4e3b1a07ddac4046b18714d6bab9063de8520000000000000000000000000000000000000000000000000000000000015180000000000000000000000000afc3194ee6139fadd53ed20571f2c78a7e47cb93000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000bdd800000000000000000000000000000000000000000000000000000000000000008