0 txs
3 calls
constructor
No constructor.
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
canLock
viewfunction canLock(address operator) view returns (bool)
currentLockId
viewfunction currentLockId() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EMERGENCY_ROLE
viewfunction EMERGENCY_ROLE() view returns (bytes32)
emergencyPaused
viewfunction emergencyPaused() view returns (bool)
getContractStatus
viewfunction getContractStatus() view returns (uint256 _totalLocked, uint256 _totalLocks, uint256 _remaining, bool _paused, bool _emergency, uint256 _balance)
getLockDetails
viewfunction getLockDetails(uint256 lockId) view returns (tuple)
getLocksInRange
viewfunction getLocksInRange(uint256 startId, uint256 endId) view returns (uint256[] ids, uint256[] amounts, address[] operators, uint256[] timestamps)
getRemainingLockableAmount
viewfunction getRemainingLockableAmount() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalLocks
viewfunction getTotalLocks() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastLockTime
viewfunction lastLockTime(address) view returns (uint256)
LOCK_OPERATOR_ROLE
viewfunction LOCK_OPERATOR_ROLE() view returns (bytes32)
lockCooldown
viewfunction lockCooldown() view returns (uint256)
locks
viewfunction locks(uint256) view returns (uint256 amount, address operator, uint256 timestamp, string bridgeReference, bool isActive)
MAX_SINGLE_LOCK
viewfunction MAX_SINGLE_LOCK() view returns (uint256)
MAX_TOTAL_LOCK
viewfunction MAX_TOTAL_LOCK() view returns (uint256)
MONITOR_ROLE
viewfunction MONITOR_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
pendingOperations
viewfunction pendingOperations(bytes32) view returns (bytes32 operationHash, uint256 executeTime, bool executed, address proposer)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TIMELOCK_DELAY
viewfunction TIMELOCK_DELAY() view returns (uint256)
token
viewfunction token() view returns (address)
totalLocked
viewfunction totalLocked() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
verifyIntegrity
viewfunction verifyIntegrity() view returns (bool)
emergencyPause
nonpayablefunction emergencyPause()
emergencyUnpause
nonpayablefunction emergencyUnpause()
executeOperation
nonpayablefunction executeOperation(bytes32 operationHash, address target, bytes data)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _token, address _admin, address _pauser, address[] _lockOperators, address[] _emergencyOperators)
lockTokens
nonpayablefunction lockTokens(uint256 amount, string bridgeReference) returns (uint256 lockId)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
scheduleOperation
nonpayablefunction scheduleOperation(address target, bytes data, string description) returns (bytes32 operationHash)
unpause
nonpayablefunction unpause()
updateLockCooldown
nonpayablefunction updateLockCooldown(uint256 newCooldown)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
EmergencyPaused
event EmergencyPaused(address indexed operator, uint256 timestamp)
EmergencyUnpaused
event EmergencyUnpaused(address indexed operator, uint256 timestamp)
Initialized
event Initialized(uint64 version)
OperationExecuted
event OperationExecuted(bytes32 indexed operationHash, address indexed executor)
OperationScheduled
event OperationScheduled(bytes32 indexed operationHash, address indexed proposer, uint256 executeTime)
ParameterUpdated
event ParameterUpdated(string indexed parameter, uint256 oldValue, uint256 newValue, address indexed updater)
Paused
event Paused(address account)
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)
TokensLocked
event TokensLocked(uint256 indexed lockId, address indexed operator, uint256 amount, string bridgeReference, uint256 timestamp)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0806040523461002a5730608052612dd990816100308239608051818181610f7301526110d70152f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146122c75750806305907e30146122a15780630813456714611c655780630d81f57014611a6557806320df435914611a2a578063248a9ca3146119ee57806327c830a9146119cb5780632f2ff15d1461197f57806330a5c2f01461196157806330f471dc1461192657806336563dae1461170557806336568abe146116405780633d9d32ad146116225780633f4ba83a146115ab578063410f2d47146113c95780634a4e3bd51461130b5780634c6d263d146112d65780634d9b47e21461129b5780634f1ef2861461108657806351858e2714610fd557806352d1902d14610f585780635689141214610f3a5780635b15bfd914610dfe5780635ba1c1a914610de05780635c975abb14610d9e57806375b238fc14610d63578063790fcf9f146109735780638456cb59146108fa5780638e0e0bb21461087057806391d148541461081557806394c49cac146107bb57806394c93b47146107905780639755abed146107565780639ab6ca811461068b578063a217fddf1461066f578063ad3cb1cc146105e4578063c032846b146104c4578063d547741f14610404578063dfd817e614610304578063e63ab1e9146102c9578063eee61be7146102a3578063f4dadc61146102245763fc0c546a146101f857600080fd5b3461021f57600036600319011261021f5760206001600160a01b0360005416604051908152f35b600080fd5b3461021f57602036600319011261021f576004356000526005602052604060002080546001600160a01b036001830154169161029760028201549160ff600461026f600384016124e4565b920154169260405195869586526020860152604085015260a0606085015260a0840190612439565b90151560808301520390f35b3461021f57600036600319011261021f5760206040516aa56fa5b99019a5c80000008152f35b3461021f57600036600319011261021f5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b3461021f57602036600319011261021f576004356103206126bc565b610258811015806103f7575b156103b25760035490806003557f6c6f636b436f6f6c646f776e00000000000000000000000000000000000000006040515260405191825260208201527fb480616fbea68dab55eeef75e9f1b4fc91b3e48b83296fbbc1a7196c72d4c6a77ff395f1ee9e34efba6730ec3cec512b0d69062d85164826d5b40b6d533e33928060403393a3005b60405162461bcd60e51b815260206004820152601060248201527f496e76616c696420636f6f6c646f776e000000000000000000000000000000006044820152606490fd5b506201518081111561032c565b3461021f57604036600319011261021f5760043561042061235e565b610428612718565b61043061267f565b8115806104b2575b61046e578161046c92600052600080516020612d8483398151915260205261046760016040600020015461280a565b612c5b565b005b606460405162461bcd60e51b815260206004820152602060248201527f43616e6e6f74207265766f6b652044454641554c545f41444d494e5f524f4c456044820152fd5b50336001600160a01b03821614610438565b3461021f57600036600319011261021f576001546002546000198101919082116105ce576aa56fa5b99019a5c8000000918183039283116105ce5760249260ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541660ff600454169160206001600160a01b0360005416604051978880926370a0823160e01b82523060048301525afa9384156105c25760009461058d575b60c0965060405195865260208601526040850152151560608401521515608083015260a0820152f35b93506020863d6020116105ba575b816105a8602093836123c4565b8101031261021f5760c0955193610564565b3d915061059b565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b3461021f57600036600319011261021f57604051604081019080821067ffffffffffffffff8311176106595761065591604052600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612439565b0390f35b634e487b7160e01b600052604160045260246000fd5b3461021f57600036600319011261021f57602060405160008152f35b3461021f57602036600319011261021f576106a4612348565b6001600160a01b031660009081527f4400f31fe81f5ca312c9a6a3454c14805f99a5d9ba7b298572fe3a22c68bf86e602052604090205460ff1680610736575b8061070a575b806106fd575b6020906040519015158152f35b5060045460ff16156106f0565b5060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416156106ea565b50600660205261074e60406000205460035490612589565b4210156106e4565b3461021f57602036600319011261021f576001600160a01b03610777612348565b1660005260066020526020604060002054604051908152f35b3461021f57600036600319011261021f5760025460001981019081116105ce57602090604051908152f35b3461021f57602036600319011261021f576004356000526007602052608060406000206001600160a01b038154916002600182015491015490604051938452602084015260ff81161515604084015260081c166060820152f35b3461021f57604036600319011261021f5761082e61235e565b600435600052600080516020612d848339815191526020526001600160a01b0360406000209116600052602052602060ff604060002054166040519015158152f35b3461021f57600036600319011261021f57602460206001600160a01b0360005416604051928380926370a0823160e01b82523060048301525afa80156105c2576000906108c7575b60209060015414604051908152f35b506020813d6020116108f2575b816108e1602093836123c4565b8101031261021f57602090516108b8565b3d91506108d4565b3461021f57600036600319011261021f57610913612752565b61091b61267f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300600160ff198254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461021f5760a036600319011261021f5761098c612348565b61099461235e565b6044908135916001600160a01b039081841680940361021f5767ffffffffffffffff926064803585811161021f576109d0903690600401612479565b939060843587811161021f576109ea903690600401612479565b9590947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00998a5460ff8160401c16159a81169c8d1580610d5c575b60019e8f149081610d52575b159081610d49575b50610d375767ffffffffffffffff1982168e178d558a918c610d18575b5016908115610cd55789831615610c925715610c4f5790610afd91610a79612cdf565b610a81612cdf565b610a89612cdf565b8c7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055610ab4612cdf565b610abc612cdf565b73ffffffffffffffffffffffffffffffffffffffff196000541617600055610e106003558b600255610aed8161283d565b50610af7816128dd565b5061299f565b5060005b818110610bd75750505060005b848110610b5c57888888610b1e57005b805468ff0000000000000000191690556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b85610b70610b6b83888861265b565b61266b565b1615610b955780610b8e610b89610b6b8c94898961265b565b612b17565b5001610b0e565b507f496e76616c696420656d657267656e6379206f70657261746f720000000000006040519162461bcd60e51b835260206004840152601a6024840152820152fd5b87610be6610b6b83858761265b565b1615610c0b5780610c04610bff610b6b8e94868861265b565b612a5b565b5001610b01565b5050507f496e76616c6964206c6f636b206f70657261746f7200000000000000000000006040519162461bcd60e51b83526020600484015260156024840152820152fd5b60405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420706175736572000000000000000000000000000000000000818701528690fd5b60405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642061646d696e00000000000000000000000000000000000000818801528790fd5b60405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420746f6b656e00000000000000000000000000000000000000818801528790fd5b68ffffffffffffffffff191668010000000000000001178d558e610a56565b60405163f92ee8a960e01b8152600490fd5b9050158f610a39565b303b159150610a31565b508b610a25565b3461021f57600036600319011261021f5760206040517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b3461021f57600036600319011261021f57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b3461021f57600036600319011261021f5760206040516202a3008152f35b3461021f5760208060031936011261021f5760043560006080604051610e23816123a8565b8281528285820152826040820152606080820152015280151580610f2f575b15610eea5760005260058152604060002060405190610e60826123a8565b80548252610edd6001600160a01b039182600182015416928585019384526002820154906040860191825260ff6004610e9b600386016124e4565b9460608901958652015416946080870195151586526040519788978189525190880152511660408601525160608501525160a0608085015260c0840190612439565b9051151560a08301520390f35b60405162461bcd60e51b815260048101839052600f60248201527f496e76616c6964206c6f636b20494400000000000000000000000000000000006044820152606490fd5b506002548110610e42565b3461021f57600036600319011261021f576020600154604051908152f35b3461021f57600036600319011261021f576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fc35760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b3461021f57600036600319011261021f57610fee6127ae565b60ff19600181600454161760045561100461267f565b60017fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300918254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a16040514281527f2e31b3b12b9bb0e82c32f27df5f234fabc95a374f54fd287a7132878d5dc9fc360203392a2005b604036600319011261021f5761109a612348565b60243567ffffffffffffffff811161021f573660238201121561021f576110cb903690602481600401359101612402565b906001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001680301490811561126d575b50610fc35761110f612718565b8116906040516352d1902d60e01b8152602081600481865afa60009181611239575b5061114f57604051634c9c8ce360e01b815260048101849052602490fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc929192908181036112215750823b15611208578173ffffffffffffffffffffffffffffffffffffffff19825416179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28251156111ef575060008083602061046c95519101845af46111e961262b565b91612d20565b915050346111f957005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101839052602490fd5b60249060405190632a87526960e21b82526004820152fd5b9091506020813d602011611265575b81611255602093836123c4565b8101031261021f57519085611131565b3d9150611248565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141584611102565b3461021f57600036600319011261021f5760206040517f8227712ef8ad39d0f26f06731ef0df8665eb7ada7f41b1ee089adf3c238862a28152f35b3461021f57600036600319011261021f576001546aa56fa5b99019a5c80000009081039081116105ce57602090604051908152f35b3461021f57600036600319011261021f576113246127ae565b60ff1980600454166004557fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090815460ff8116156113b7571690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a16040514281527fdacac23d353cc4fe05be85350ed1e8227ed9edf2323b7cb5aad3174e6a9ce1d660203392a2005b604051638dfc202b60e01b8152600490fd5b3461021f57606036600319011261021f576004356113e561235e565b60443567ffffffffffffffff811161021f5761140590369060040161231a565b909161140f6126bc565b8360005260076020526040600020916001830154928315611566576002019283549060ff82166115215742106114dc5760009485946001869360ff1916179055826040519384928337810182815203925af161146961262b565b50156114975733907e1d1d6b8d664ddc069841e54d003c4a632a7392aa33ef7f83806380c2bc6873600080a3005b60405162461bcd60e51b815260206004820152600b60248201527f43616c6c206661696c65640000000000000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600960248201527f546f6f206561726c7900000000000000000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201527f416c7265616479206578656375746564000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201527f4e6f74207363686564756c6564000000000000000000000000000000000000006044820152606490fd5b3461021f57600036600319011261021f576115c4612752565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156113b75760ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461021f57600036600319011261021f576020600354604051908152f35b3461021f57604036600319011261021f5760043561165c61235e565b611664612718565b61166c61267f565b8115806116f3575b6116a357336001600160a01b038216036116915761046c91612c5b565b60405163334bd91960e11b8152600490fd5b60405162461bcd60e51b815260206004820152602260248201527f43616e6e6f742072656e6f756e63652044454641554c545f41444d494e5f524f6044820152614c4560f01b6064820152608490fd5b50336001600160a01b03821614611674565b3461021f57604036600319011261021f576004356024358115158061191c575b80611911575b156118cc578181039081116105ce57600191600182018092116105ce57611751826125cf565b9061175b836125cf565b90611765846125b7565b61177260405191826123c4565b84815261177e856125b7565b6020958287019491601f1901368637611796816125cf565b9360005b82811061181d5750505090856117cf6117c29893604051998a9860808a5260808a0190612374565b90888203848a0152612374565b918683036040880152519182815201939560005b8281106117fe57868061065588888382036060850152612374565b87516001600160a01b03168652968101968896509481019483016117e3565b988961182f82989a9697999b84612589565b80600052600587526040600020908c60405161184a816123a8565b835481526001600160a01b039261189986858988015416948d850195865260ff600460028a015499604088019a8b52611885600382016124e4565b606089015201541615156080860152612601565b52516118a5858a612601565b5251166118b2838a612601565b52516118be828b612601565b52019896949397959861179a565b60405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642072616e6765000000000000000000000000000000000000006044820152606490fd5b50600254811061172b565b5080821115611725565b3461021f57600036600319011261021f5760206040517f13068d84b66d5c3921d372e0b884c43b4c497c677c4db17f834b4b82000bb9dd8152f35b3461021f57600036600319011261021f576020600254604051908152f35b3461021f57604036600319011261021f5761046c60043561199e61235e565b9080600052600080516020612d848339815191526020526119c660016040600020015461280a565b612bd3565b3461021f57600036600319011261021f57602060ff600454166040519015158152f35b3461021f57602036600319011261021f57600435600052600080516020612d848339815191526020526020600160406000200154604051908152f35b3461021f57600036600319011261021f5760206040517fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b268152f35b3461021f57606036600319011261021f57611a7e612348565b67ffffffffffffffff60243581811161021f57611a9f90369060040161231a565b92906044359083821161021f57611b0c611b1e91611ac4611af894369060040161231a565b611acf9391936126bc565b60405195869360209a6001600160a01b038c87019a168a526080604087015260a0860191612596565b90601f199485858403016060860152612596565b426080830152039081018352826123c4565b519020908160005260078352600160406000200154611c20576202a3004201908142116105ce5760405190608082019081118282101761065957604052828152838101828152611ba86002604084019360008552606081019333855287600052600789526040600020915182555160018201550192511515839060ff801983541691151516179055565b517fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff0083549260081b169116179055604051908152817f991e9b0e2f98c3989f4541ce66e9aca44e8bfb1c75bcf862d80f800369e6c6a3843393a3604051908152f35b60405162461bcd60e51b815260048101849052601160248201527f416c7265616479207363686564756c65640000000000000000000000000000006044820152606490fd5b3461021f57604036600319011261021f5760243567ffffffffffffffff811161021f57611c9690369060040161231a565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00541461228f5760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055611ceb61267f565b60ff6004541661224a57336000526006602052611d1060406000205460035490612589565b4210612205576a6342fd08f00f63780000006004351161218a575b3360009081527f4400f31fe81f5ca312c9a6a3454c14805f99a5d9ba7b298572fe3a22c68bf86e60205260409020547f13068d84b66d5c3921d372e0b884c43b4c497c677c4db17f834b4b82000bb9dd9060ff161561216c5750600435156121275780156120e2576aa56fa5b99019a5c8000000611dad600435600154612589565b1161209d576001600160a01b039060006020838254166064604051809481936323b872dd60e01b835233600484015230602484015260043560448401525af180156105c257612065575b5060025491604051611e08816123a8565b60043581526020810133815260408201428152611e26368689612402565b916060840192835260016080850152866000526005602052604060002094845186556001860191511673ffffffffffffffffffffffffffffffffffffffff198254161790555160028401555180519067ffffffffffffffff821161065957611e9160038501546124aa565b601f811161201e575b50602090601f8311600114611fa5579282600493608093611eed9796600092611f9a575b50508160011b916000199060031b1c19161760038501555b0151151591019060ff801983541691151516179055565b611efb600435600154612589565b60015560025460001981146105ce577f7429df4b4f2303c1ea8585f022c0c7705173a0e491b475e64e5e7be1ecacde84611f5260209560018694016002556040519460043586526060888701526060860191612596565b924260408201528033940390a333600052600682524260406000205560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b015190508a80611ebe565b906003850160005260206000209160005b601f1985168110612006575083608093611eed979693600193600497601f19811610611fed575b505050811b016003850155611ed6565b015160001960f88460031b161c191690558a8080611fdd565b91926020600181928685015181550194019201611fb6565b600385016000526020600020601f840160051c81016020851061205e575b601f830160051c82018110612052575050611e9a565b6000815560010161203c565b508061203c565b6020813d602011612095575b8161207e602093836123c4565b8101031261021f57518015150361021f5783611df7565b3d9150612071565b60405162461bcd60e51b815260206004820152601060248201527f45786365656473206d6178206c6f636b000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f427269646765207265666572656e6365207265717569726564000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601260248201527f416d6f756e74206d757374206265203e203000000000000000000000000000006044820152606490fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527f762c7c328dd70a077c65c77b60e4c38eed3d2f6aa056d4d0fa114aeff8234b56602052604090205460ff16611d2b5760405162461bcd60e51b815260206004820152600960248201527f546f6f206c6172676500000000000000000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600a60248201527f52617465206c696d6974000000000000000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201527f456d657267656e637920706175736564000000000000000000000000000000006044820152606490fd5b604051633ee5aeb560e01b8152600490fd5b3461021f57600036600319011261021f5760206040516a6342fd08f00f63780000008152f35b3461021f57602036600319011261021f576004359063ffffffff60e01b821680920361021f57602091637965db0b60e01b8114908115612309575b5015158152f35b6301ffc9a760e01b14905083612302565b9181601f8401121561021f5782359167ffffffffffffffff831161021f576020838186019501011161021f57565b600435906001600160a01b038216820361021f57565b602435906001600160a01b038216820361021f57565b90815180825260208080930193019160005b828110612394575050505090565b835185529381019392810192600101612386565b60a0810190811067ffffffffffffffff82111761065957604052565b90601f8019910116810190811067ffffffffffffffff82111761065957604052565b67ffffffffffffffff811161065957601f01601f191660200190565b92919261240e826123e6565b9161241c60405193846123c4565b82948184528183011161021f578281602093846000960137010152565b919082519283825260005b848110612465575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612444565b9181601f8401121561021f5782359167ffffffffffffffff831161021f576020808501948460051b01011161021f57565b90600182811c921680156124da575b60208310146124c457565b634e487b7160e01b600052602260045260246000fd5b91607f16916124b9565b906040519182600082546124f7816124aa565b908184526020946001916001811690816000146125675750600114612528575b505050612526925003836123c4565b565b600090815285812095935091905b81831061254f5750506125269350820101388080612517565b85548884018501529485019487945091830191612536565b9250505061252694925060ff191682840152151560051b820101388080612517565b919082018092116105ce57565b908060209392818452848401376000828201840152601f01601f1916010190565b67ffffffffffffffff81116106595760051b60200190565b906125d9826125b7565b6125e660405191826123c4565b82815280926125f7601f19916125b7565b0190602036910137565b80518210156126155760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b3d15612656573d9061263c826123e6565b9161264a60405193846123c4565b82523d6000602084013e565b606090565b91908110156126155760051b0190565b356001600160a01b038116810361021f5790565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166126aa57565b60405163d93c066560e01b8152600490fd5b3360009081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c60205260409020547fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759060ff161561216c5750565b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604081205460ff161561216c5750565b3360009081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260409020547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff161561216c5750565b3360009081527f762c7c328dd70a077c65c77b60e4c38eed3d2f6aa056d4d0fa114aeff8234b5660205260409020547fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b269060ff161561216c5750565b80600052600080516020612d8483398151915260205260406000203360005260205260ff604060002054161561216c5750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020612d848339815191529060ff166128d8578280526020526040822081835260205260408220600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505090565b6001600160a01b031660008181527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c60205260408120549091907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177590600080516020612d848339815191529060ff16612999578184526020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b50505090565b6001600160a01b031660008181527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260408120549091907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a90600080516020612d848339815191529060ff16612999578184526020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b6001600160a01b031660008181527f4400f31fe81f5ca312c9a6a3454c14805f99a5d9ba7b298572fe3a22c68bf86e60205260408120549091907f13068d84b66d5c3921d372e0b884c43b4c497c677c4db17f834b4b82000bb9dd90600080516020612d848339815191529060ff16612999578184526020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b6001600160a01b031660008181527f762c7c328dd70a077c65c77b60e4c38eed3d2f6aa056d4d0fa114aeff8234b5660205260408120549091907fbf233dd2aafeb4d50879c4aa5c81e96d92f6e6945c906a58f9f2d1c1631b4b2690600080516020612d848339815191529060ff16612999578184526020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b90600091808352600080516020612d84833981519152806020526001600160a01b036040852093169283855260205260ff60408520541615600014612999578184526020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b90600091808352600080516020612d84833981519152806020526001600160a01b036040852093169283855260205260ff60408520541660001461299957818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612d0e57565b604051631afcd79f60e31b8152600490fd5b90612d475750805115612d3557602081519101fd5b60405163d6bda27560e01b8152600490fd5b81511580612d7a575b612d58575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15612d5056fe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a264697066735822122070be94078ea27c1d1f5111811ba33f4372a779497ea7a71378a6d4f5dcf18a8d64736f6c63430008160033