24 txs
25 calls
constructor
constructor()
functions
DIVISOR
viewfunction DIVISOR() view returns (uint256)
feePercentage
viewfunction feePercentage() view returns (uint256)
getActiveOrders
viewfunction getActiveOrders(address token, uint8 orderType, uint8 executionType) view returns (uint256[])
getActiveOrdersCount
viewfunction getActiveOrdersCount(bytes32 queueKey) view returns (uint256)
getActiveOrdersPaged
viewfunction getActiveOrdersPaged(address token, uint8 orderType, uint8 executionType, uint256 startIndex, uint256 count) view returns (uint256[])
getOrder
viewfunction getOrder(uint256 orderId) view returns (tuple)
getRemainingAmount
viewfunction getRemainingAmount(uint256 orderId) view returns (uint256)
isOrderExpired
viewfunction isOrderExpired(uint256 orderId) view returns (bool)
MAX_FEE_PERCENTAGE
viewfunction MAX_FEE_PERCENTAGE() view returns (uint256)
maxOrderSize
viewfunction maxOrderSize() view returns (uint256)
maxOrderTtl
viewfunction maxOrderTtl() view returns (uint256)
minOrderSize
viewfunction minOrderSize() view returns (uint256)
orders
viewfunction orders(uint256) view returns (uint256 orderId, address owner, uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 filledAmount, uint256 expirationTime, uint8 status)
owner
viewfunction owner() view returns (address)
totalFeesCollected
viewfunction totalFeesCollected() view returns (uint256)
totalOrderCount
viewfunction totalOrderCount(bytes32) view returns (uint256)
whitelistedFulfillers
viewfunction whitelistedFulfillers(address) view returns (bool)
cancelOrder
nonpayablefunction cancelOrder(uint256 orderId)
cleanupExpiredOrder
nonpayablefunction cleanupExpiredOrder(uint256 orderId)
createOrder
payablefunction createOrder(uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 ttl) payable returns (uint256)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, address to, uint256 amount)
fulfillLimitOrders
nonpayablefunction fulfillLimitOrders(tuple[] matches)
fulfillMarketOrders
nonpayablefunction fulfillMarketOrders(tuple[] matches, uint256[] executionPrices)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeePercentage
nonpayablefunction setFeePercentage(uint256 newFeePercentage)
setFulfillerStatus
nonpayablefunction setFulfillerStatus(address fulfiller, bool status)
setMaxOrderTtl
nonpayablefunction setMaxOrderTtl(uint256 _maxOrderTtl)
setOrderSizeLimits
nonpayablefunction setOrderSizeLimits(uint256 _minOrderSize, uint256 _maxOrderSize)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawFees
nonpayablefunction withdrawFees(address recipient)
events
FeePercentageUpdated
event FeePercentageUpdated(uint256 oldFeePercentage, uint256 newFeePercentage)
FeesWithdrawn
event FeesWithdrawn(address indexed recipient, uint256 amount)
FulfillerWhitelisted
event FulfillerWhitelisted(address indexed fulfiller, bool status)
MaxTTLUpdated
event MaxTTLUpdated(uint256 newMaxTTL)
OrderCancelled
event OrderCancelled(uint256 indexed orderId)
OrderCreated
event OrderCreated(uint256 indexed orderId, address indexed owner, uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 expirationTime, uint256 totalCost)
OrderExpired
event OrderExpired(uint256 indexed orderId)
OrderFulfilled
event OrderFulfilled(uint256 indexed orderId, uint256 amount)
OrderPartiallyFulfilled
event OrderPartiallyFulfilled(uint256 indexed orderId, uint256 amount, uint256 remaining)
OrderSizeLimitsUpdated
event OrderSizeLimitsUpdated(uint256 minSize, uint256 maxSize)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RateLimitUpdated
event RateLimitUpdated(uint256 newInterval)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052348015600f57600080fd5b503380603557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b603c816080565b506001808055336000908152600960205260409020805460ff191690911790556032600355620f4240600a55683635c9adc5dea00000600b5562278d00600c5560d0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613757806100df6000396000f3fe6080604052600436106101b95760003560e01c8063715018a6116100eb578063ae06c1b71161008f578063e63ea40811610061578063e63ea4081461058a578063f1a82c7e146105aa578063f2fde38b146105c0578063f6252ff2146105e057005b8063ae06c1b7146104ed578063bfde1d7c1461050d578063c452427e1461052d578063d09ef2411461055d57005b80638f9057df116100c85780638f9057df14610407578063a001ecdd14610427578063a674537f1461043d578063a85c38ef1461045357005b8063715018a6146103aa578063727d2114146103bf5780638da5cb5b146103df57005b80633410fe6e1161015d578063568c82061161012f578063568c82061461032e57806359c693131461034e57806360c6d8ae1461037e57806366961d441461039457005b80633410fe6e146102c2578063457a8924146102d8578063514fcac7146102f8578063558e44d31461031857005b806313b64e241161019657806313b64e2414610235578063164e68de146102555780631f32eb77146102755780632fd51adf146102a257005b80630d34219c146101c257806310e1c1661461020257806311e807a41461022257005b366101c057005b005b3480156101ce57600080fd5b506101ef6101dd366004613011565b60066020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561020e57600080fd5b506101ef61021d366004613011565b610600565b6101ef61023036600461304c565b610692565b34801561024157600080fd5b506101c06102503660046130b1565b610cc9565b34801561026157600080fd5b506101c06102703660046130d3565b610d19565b34801561028157600080fd5b506102956102903660046130f7565b610e96565b6040516101f99190613142565b3480156102ae57600080fd5b506101c06102bd366004613185565b610fc4565b3480156102ce57600080fd5b506101ef61271081565b3480156102e457600080fd5b506101c06102f336600461320f565b61102b565b34801561030457600080fd5b506101c0610313366004613011565b611196565b34801561032457600080fd5b506101ef6101f481565b34801561033a57600080fd5b506101c0610349366004613011565b611541565b34801561035a57600080fd5b5061036e610369366004613011565b6118ac565b60405190151581526020016101f9565b34801561038a57600080fd5b506101ef60045481565b3480156103a057600080fd5b506101ef600c5481565b3480156103b657600080fd5b506101c06118fe565b3480156103cb57600080fd5b506101c06103da366004613011565b611912565b3480156103eb57600080fd5b506000546040516001600160a01b0390911681526020016101f9565b34801561041357600080fd5b506101c06104223660046132b3565b611955565b34801561043357600080fd5b506101ef60035481565b34801561044957600080fd5b506101ef600a5481565b34801561045f57600080fd5b506104d761046e366004613011565b60056020819052600091825260409091208054600182015460028301546003840154600485015495850154600686015460079096015494966001600160a01b038086169760ff600160a01b8804811698600160a81b90980481169796909216959293929091168a565b6040516101f99a99989796959493929190613338565b3480156104f957600080fd5b506101c0610508366004613011565b611a56565b34801561051957600080fd5b506102956105283660046133b1565b611aee565b34801561053957600080fd5b5061036e6105483660046130d3565b60096020526000908152604090205460ff1681565b34801561056957600080fd5b5061057d610578366004613011565b611ca4565b6040516101f9919061340c565b34801561059657600080fd5b506101c06105a53660046134b0565b611dfe565b3480156105b657600080fd5b506101ef600b5481565b3480156105cc57600080fd5b506101c06105db3660046130d3565b611f60565b3480156105ec57600080fd5b506101ef6105fb366004613011565b611f9b565b600080805b60008481526006602052604090205481101561068b5760008481526007602090815260408083208484529091528120549060008281526005602052604090206007015460ff16600381111561065c5761065c6132f5565b14801561066f575061066d816118ac565b155b15610682578261067e81613507565b9350505b50600101610605565b5092915050565b6000846001600160a01b0381166106e05760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b6000816001600160a01b03163b1161072b5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b60448201526064016106d7565b610733612000565b600085116107835760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016106d7565b600084116107c95760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642070726963652072616e676560681b60448201526064016106d7565b600083116108195760405162461bcd60e51b815260206004820152601a60248201527f54544c206d7573742062652067726561746572207468616e203000000000000060448201526064016106d7565b600c5483111561085a5760405162461bcd60e51b815260206004820152600c60248201526b54544c20746f6f206c6f6e6760a01b60448201526064016106d7565b6000670de0b6b3a764000061086f8688613520565b610879919061353d565b905060006127106003548361088e9190613520565b610898919061353d565b9050600a548210156108de5760405162461bcd60e51b815260206004820152600f60248201526e13dc99195c881d1bdbc81cdb585b1b608a1b60448201526064016106d7565b600b548211156109225760405162461bcd60e51b815260206004820152600f60248201526e4f7264657220746f6f206c6172676560881b60448201526064016106d7565b60008a6001811115610936576109366132f5565b036109a957610945818361355f565b34101561098c5760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b60448201526064016106d7565b806004600082825461099e919061355f565b909155506109be9050565b6109be6001600160a01b03891633308a61202a565b6002805490819060006109d083613507565b9091555050604080516101408101825282815233602082015260009181018d6001811115610a0057610a006132f5565b81526020018c6001811115610a1757610a176132f5565b81526020018b6001600160a01b031681526020018a8152602001898152602001600081526020018842610a4a919061355f565b8152602001600090526000838152600560209081526040918290208351815590830151600180830180546001600160a01b039093166001600160a01b0319841681178255948601519596508695939490926001600160a81b0319161790600160a01b908490811115610abe57610abe6132f5565b021790555060608201518160010160156101000a81548160ff02191690836001811115610aed57610aed6132f5565b021790555060808201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816003015560c0820151816004015560e0820151816005015561010082015181600601556101208201518160070160006101000a81548160ff02191690836003811115610b7357610b736132f5565b0217905550905050610b87828b8e8e612091565b336001600160a01b0316827fa2fb0dce7ae79c4288991eaef209e312e4008fdf46d4842d51f55426ccc903938e8e8e8e8e8861010001518c604051610bd29796959493929190613572565b60405180910390a360008c6001811115610bee57610bee6132f5565b148015610c035750610c00838561355f565b34115b15610cb0576000610c14848661355f565b610c1e90346135c4565b604051909150600090339083908381818185875af1925050503d8060008114610c63576040519150601f19603f3d011682016040523d82523d6000602084013e610c68565b606091505b5050905080610cad5760405162461bcd60e51b8152602060048201526011602482015270115512081c995d1d5c9b8819985a5b1959607a1b60448201526064016106d7565b50505b5093505050610cbe60018055565b509695505050505050565b610cd16120fb565b600a829055600b81905560408051838152602081018390527f34a3b94861a601870265c6c4d74c28d1a09f6c803ce42b95e749f46127c8f17091015b60405180910390a15050565b610d216120fb565b6001600160a01b038116610d6b5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b60448201526064016106d7565b60045480610db15760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064016106d7565b600060048190556040516001600160a01b0384169083908381818185875af1925050503d8060008114610e00576040519150601f19603f3d011682016040523d82523d6000602084013e610e05565b606091505b5050905080610e4e5760405162461bcd60e51b8152602060048201526015602482015274119959481dda5d1a191c985dd85b0819985a5b1959605a1b60448201526064016106d7565b826001600160a01b03167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a83604051610e8991815260200190565b60405180910390a2505050565b60606000610ea5858585612128565b90506000610eb282610600565b90506000808267ffffffffffffffff811115610ed057610ed06135d7565b604051908082528060200260200182016040528015610ef9578160200160208202803683370190505b50905060005b60008581526006602052604090205481108015610f1b57508383105b15610fb85760008581526007602090815260408083208484529091528120549060008281526005602052604090206007015460ff166003811115610f6157610f616132f5565b148015610f745750610f72816118ac565b155b15610fa55780838581518110610f8c57610f8c6135ed565b602090810291909101015283610fa181613507565b9450505b5080610fb081613507565b915050610eff565b50979650505050505050565b610fcc6120fb565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f5b91a6535b81256fc66d813b8f8b5776b43f069bd85240fb8e65fae1767a79d7910160405180910390a25050565b611033612000565b3360009081526009602052604090205460ff1661108e5760405162461bcd60e51b815260206004820152601960248201527810d85b1b195c881a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b60448201526064016106d7565b826110db5760405162461bcd60e51b815260206004820152601b60248201527f4e6f206f72646572206d61746368657320746f2066756c66696c6c000000000060448201526064016106d7565b82811461112a5760405162461bcd60e51b815260206004820152601860248201527f4d69736d61746368656420617272617973206c656e677468000000000000000060448201526064016106d7565b60005b838110156111865761117e85858381811061114a5761114a6135ed565b9050606002018036038101906111609190613603565b848484818110611172576111726135ed565b9050602002013561215e565b60010161112d565b5061119060018055565b50505050565b61119e612000565b60008181526005602052604090206001015481906001600160a01b03166111d75760405162461bcd60e51b81526004016106d79061366f565b60008281526005602052604090206001015482906001600160a01b031633146112345760405162461bcd60e51b815260206004820152600f60248201526e2737ba1037b93232b91037bbb732b960891b60448201526064016106d7565b600083815260056020526040812090600782015460ff16600381111561125c5761125c6132f5565b1461129c5760405162461bcd60e51b815260206004820152601060248201526f4f72646572206e6f742061637469766560801b60448201526064016106d7565b6112a5846118ac565b156112e25760405162461bcd60e51b815260206004820152600d60248201526c13dc99195c88195e1c1a5c9959609a1b60448201526064016106d7565b600781018054600260ff19909116179055600180820154600091600160a01b90910460ff1690811115611317576113176132f5565b036114c65760008160050154826003015461133291906135c4565b905080156114c0576000670de0b6b3a76400008360040154836113559190613520565b61135f919061353d565b90506000612710600354836113749190613520565b61137e919061353d565b9050600061138c828461355f565b90506000600454831161139f57826113a3565b6004545b905080600460008282546113b791906135c4565b9091555050828110156113d1576113ce818561355f565b91505b814710156114215760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e20636f6e74726163740000000060448201526064016106d7565b60018601546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611470576040519150601f19603f3d011682016040523d82523d6000602084013e611475565b606091505b50509050806114ba5760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b60448201526064016106d7565b50505050505b50611507565b6000816005015482600301546114dc91906135c4565b905080156115055760018201546002830154611505916001600160a01b039182169116836127ce565b505b60405184907f61b9399f2f0f32ca39ce8d7be32caed5ec22fe07a6daba3a467ed479ec60658290600090a250505061153e60018055565b50565b611549612000565b60008181526005602052604090206001015481906001600160a01b03166115825760405162461bcd60e51b81526004016106d79061366f565b600082815260056020526040812090600782015460ff1660038111156115aa576115aa6132f5565b146115ea5760405162461bcd60e51b815260206004820152601060248201526f4f72646572206e6f742061637469766560801b60448201526064016106d7565b6115f3836118ac565b6116335760405162461bcd60e51b815260206004820152601160248201527013dc99195c881b9bdd08195e1c1a5c9959607a1b60448201526064016106d7565b60078101805460ff1916600317905560018082015460ff600160a01b9091041681811115611663576116636132f5565b036116a95760008160050154826003015461167e91906135c4565b905080156116a757600182015460028301546116a7916001600160a01b039182169116836127ce565b505b6000600182810154600160a01b900460ff16908111156116cb576116cb6132f5565b03611876576000816005015482600301546116e691906135c4565b90508015611874576000670de0b6b3a76400008360040154836117099190613520565b611713919061353d565b90506000612710600354836117289190613520565b611732919061353d565b90506000611740828461355f565b9050600060045483116117535782611757565b6004545b9050806004600082825461176b91906135c4565b90915550508281101561178557611782818561355f565b91505b814710156117d55760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e20636f6e74726163740000000060448201526064016106d7565b60018601546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611824576040519150601f19603f3d011682016040523d82523d6000602084013e611829565b606091505b505090508061186e5760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b60448201526064016106d7565b50505050505b505b60405183907f1ad308dc7017610c82d08084545f7176df5e2f08f078c3c8f8926cd7e555551490600090a2505061153e60018055565b60008181526005602052604081206001015482906001600160a01b03166118e55760405162461bcd60e51b81526004016106d79061366f565b5050600090815260056020526040902060060154421190565b6119066120fb565b61191060006127ff565b565b61191a6120fb565b600c8190556040518181527f5829309fa85e85a75b744b2b1ae6b2913b3d2a9c94df75a5b61de31f962256be9060200160405180910390a150565b61195d612000565b3360009081526009602052604090205460ff166119b85760405162461bcd60e51b815260206004820152601960248201527810d85b1b195c881a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b60448201526064016106d7565b80611a055760405162461bcd60e51b815260206004820152601b60248201527f4e6f206f72646572206d61746368657320746f2066756c66696c6c000000000060448201526064016106d7565b60005b81811015611a4857611a40838383818110611a2557611a256135ed565b905060600201803603810190611a3b9190613603565b61284f565b600101611a08565b50611a5260018055565b5050565b611a5e6120fb565b6101f4811115611ab05760405162461bcd60e51b815260206004820152601760248201527f4665652070657263656e7461676520746f6f206869676800000000000000000060448201526064016106d7565b600380549082905560408051828152602081018490527fb27c12a91635e11c22bffa7bd8e0a8735da52b94aaefd7f249776c7590ba78949101610d0d565b60606000611afd878787612128565b6000818152600660205260408120549192508467ffffffffffffffff811115611b2857611b286135d7565b604051908082528060200260200182016040528015611b51578160200160208202803683370190505b5090506000865b8381108015611b6657508682105b15611c035760008581526007602090815260408083208484529091528120549060008281526005602052604090206007015460ff166003811115611bac57611bac6132f5565b148015611bbf5750611bbd816118ac565b155b15611bf05780848481518110611bd757611bd76135ed565b602090810291909101015282611bec81613507565b9350505b5080611bfb81613507565b915050611b58565b5060008167ffffffffffffffff811115611c1f57611c1f6135d7565b604051908082528060200260200182016040528015611c48578160200160208202803683370190505b50905060005b82811015611c9557838181518110611c6857611c686135ed565b6020026020010151828281518110611c8257611c826135ed565b6020908102919091010152600101611c4e565b509a9950505050505050505050565b611cac612fa5565b60008281526005602052604090206001015482906001600160a01b0316611ce55760405162461bcd60e51b81526004016106d79061366f565b600083815260056020908152604091829020825161014081018452815481526001808301546001600160a01b038116948301949094529093919291840191600160a01b900460ff1690811115611d3d57611d3d6132f5565b6001811115611d4e57611d4e6132f5565b81526020016001820160159054906101000a900460ff166001811115611d7657611d766132f5565b6001811115611d8757611d876132f5565b815260028201546001600160a01b0316602082015260038083015460408301526004830154606083015260058301546080830152600683015460a0830152600783015460c09092019160ff1690811115611de357611de36132f5565b6003811115611df457611df46132f5565b9052509392505050565b611e066120fb565b6001600160a01b038216611e505760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b60448201526064016106d7565b6001600160a01b038316611f475747811115611eae5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016106d7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611efb576040519150601f19603f3d011682016040523d82523d6000602084013e611f00565b606091505b50509050806111905760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016106d7565b611f5b6001600160a01b03841683836127ce565b505050565b611f686120fb565b6001600160a01b038116611f9257604051631e4fbdf760e01b8152600060048201526024016106d7565b61153e816127ff565b60008181526005602052604081206001015482906001600160a01b0316611fd45760405162461bcd60e51b81526004016106d79061366f565b6000838152600560208190526040909120908101546003820154611ff891906135c4565b949350505050565b60026001540361202357604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526111909186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612ef6565b600061209e848484612128565b600081815260066020818152604080842080548b8652600884528286208190558686526007845282862090865283529084208a905584845291905280549293506001929091906120ef90849061355f565b90915550505050505050565b6000546001600160a01b031633146119105760405163118cdaa760e01b81523360048201526024016106d7565b600083838360405160200161213f9392919061369d565b6040516020818303038152906040528051906020012090509392505050565b8151600090815260056020908152604080832091850151835282209091600783015460ff166003811115612194576121946132f5565b1480156121b957506000600782015460ff1660038111156121b7576121b76132f5565b145b6121fd5760405162461bcd60e51b81526020600482015260156024820152744f7264657273206d7573742062652061637469766560581b60448201526064016106d7565b8351612208906118ac565b15801561221f575061221d84602001516118ac565b155b61225c5760405162461bcd60e51b815260206004820152600e60248201526d13dc99195c9cc8195e1c1a5c995960921b60448201526064016106d7565b6000600183810154600160a01b900460ff169081111561227e5761227e6132f5565b1480156122a9575060018082810154600160a01b900460ff16908111156122a7576122a76132f5565b145b6122eb5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f7264657220747970657360681b60448201526064016106d7565b600280820154908301546001600160a01b039081169116146123405760405162461bcd60e51b815260206004820152600e60248201526d0a8ded6cadc40dad2e6dac2e8c6d60931b60448201526064016106d7565b60018083810154600160a81b900460ff1690811115612361576123616132f5565b148061238b575060018082810154600160a81b900460ff1690811115612389576123896132f5565b145b6123cb5760405162461bcd60e51b81526020600482015260116024820152704e6f74206d61726b6574206f726465727360781b60448201526064016106d7565b60018083810154600160a81b900460ff16908111156123ec576123ec6132f5565b036124575781600401548311156124575760405162461bcd60e51b815260206004820152602960248201527f457865637574696f6e20707269636520657863656564732062757965722773206044820152686d617820707269636560b81b60648201526084016106d7565b60018082810154600160a81b900460ff1690811115612478576124786132f5565b036124e25780600401548310156124e25760405162461bcd60e51b815260206004820152602860248201527f457865637574696f6e2070726963652062656c6f772073656c6c65722773206d604482015267696e20707269636560c01b60648201526084016106d7565b6000826005015483600301546124f891906135c4565b905060008260050154836003015461251091906135c4565b6040870151909150828111156125235750815b8181111561252e5750805b600081116125725760405162461bcd60e51b8152602060048201526011602482015270139bc8185b5bdd5b9d081d1bc8199a5b1b607a1b60448201526064016106d7565b806000670de0b6b3a76400006125888984613520565b612592919061353d565b9050600061259f82612f67565b905060006125ad82846135c4565b60018901546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612601576040519150601f19603f3d011682016040523d82523d6000602084013e612606565b606091505b50509050806126575760405162461bcd60e51b815260206004820152601d60248201527f455448207472616e7366657220746f2073656c6c6572206661696c656400000060448201526064016106d7565b60018a015460028a0154612678916001600160a01b039182169116876127ce565b858a600501600082825461268c919061355f565b92505081905550858960050160008282546126a7919061355f565b909155505060038a015460058b0154036126f25760078a01805460ff191660011790558b516040518781526000805160206136e28339815191529060200160405180910390a2612734565b8b60000151600080516020613702833981519152878c600501548d6003015461271b91906135c4565b6040805192835260208301919091520160405180910390a25b886003015489600501540361277e5760078901805460ff191660011790556020808d015160405188815290916000805160206136e2833981519152910160405180910390a26127c0565b8b60200151600080516020613702833981519152878b600501548c600301546127a791906135c4565b6040805192835260208301919091520160405180910390a25b505050505050505050505050565b6040516001600160a01b03838116602483015260448201839052611f5b91859182169063a9059cbb9060640161205f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051600090815260056020908152604080832091840151835282209091600783015460ff166003811115612885576128856132f5565b1480156128aa57506000600782015460ff1660038111156128a8576128a86132f5565b145b6128ee5760405162461bcd60e51b81526020600482015260156024820152744f7264657273206d7573742062652061637469766560581b60448201526064016106d7565b82516128f9906118ac565b158015612910575061290e83602001516118ac565b155b61294d5760405162461bcd60e51b815260206004820152600e60248201526d13dc99195c9cc8195e1c1a5c995960921b60448201526064016106d7565b6000600183810154600160a01b900460ff169081111561296f5761296f6132f5565b14801561299a575060018082810154600160a01b900460ff1690811115612998576129986132f5565b145b6129dc5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f7264657220747970657360681b60448201526064016106d7565b600280820154908301546001600160a01b03908116911614612a315760405162461bcd60e51b815260206004820152600e60248201526d0a8ded6cadc40dad2e6dac2e8c6d60931b60448201526064016106d7565b6000600183810154600160a81b900460ff1690811115612a5357612a536132f5565b148015612a7f57506000600182810154600160a81b900460ff1690811115612a7d57612a7d6132f5565b145b612abe5760405162461bcd60e51b815260206004820152601060248201526f4e6f74206c696d6974206f726465727360801b60448201526064016106d7565b806004015482600401541015612b165760405162461bcd60e51b815260206004820152601f60248201527f5072696365206d69736d6174636820666f72206c696d6974206f72646572730060448201526064016106d7565b600082600501548360030154612b2c91906135c4565b9050600082600501548360030154612b4491906135c4565b604086015190915082811115612b575750815b81811115612b625750805b60008111612ba65760405162461bcd60e51b8152602060048201526011602482015270139bc8185b5bdd5b9d081d1bc8199a5b1b607a1b60448201526064016106d7565b60048401548190600090670de0b6b3a764000090612bc49084613520565b612bce919061353d565b90506000612bdb82612f67565b90506000612be982846135c4565b60018901546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c3d576040519150601f19603f3d011682016040523d82523d6000602084013e612c42565b606091505b5050905080612c935760405162461bcd60e51b815260206004820152601d60248201527f455448207472616e7366657220746f2073656c6c6572206661696c656400000060448201526064016106d7565b60018a015460028a0154612cb4916001600160a01b039182169116876127ce565b858a6005016000828254612cc8919061355f565b9250508190555085896005016000828254612ce3919061355f565b90915550506004808a0154908b01541115612dd5576000670de0b6b3a76400008a600401548c60040154612d1791906135c4565b612d219089613520565b612d2b919061353d565b60018c01546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114612d7b576040519150601f19603f3d011682016040523d82523d6000602084013e612d80565b606091505b50508092505081612dd35760405162461bcd60e51b815260206004820152601960248201527f45544820736176696e67732072657475726e206661696c65640000000000000060448201526064016106d7565b505b89600301548a6005015403612e1b5760078a01805460ff191660011790558a516040518781526000805160206136e28339815191529060200160405180910390a2612e5d565b8a60000151600080516020613702833981519152878c600501548d60030154612e4491906135c4565b6040805192835260208301919091520160405180910390a25b8860030154896005015403612ea75760078901805460ff191660011790556020808c015160405188815290916000805160206136e2833981519152910160405180910390a2612ee9565b8a60200151600080516020613702833981519152878b600501548c60030154612ed091906135c4565b6040805192835260208301919091520160405180910390a25b5050505050505050505050565b600080602060008451602086016000885af180612f19576040513d6000823e3d81fd5b50506000513d91508115612f31578060011415612f3e565b6001600160a01b0384163b155b1561119057604051635274afe760e01b81526001600160a01b03851660048201526024016106d7565b60008061271060035484612f7b9190613520565b612f85919061353d565b90508060046000828254612f99919061355f565b90915550909392505050565b6040805161014081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000600381111561300c5761300c6132f5565b905290565b60006020828403121561302357600080fd5b5035919050565b6002811061153e57600080fd5b6001600160a01b038116811461153e57600080fd5b60008060008060008060c0878903121561306557600080fd5b86356130708161302a565b955060208701356130808161302a565b9450604087013561309081613037565b959894975094956060810135955060808101359460a0909101359350915050565b600080604083850312156130c457600080fd5b50508035926020909101359150565b6000602082840312156130e557600080fd5b81356130f081613037565b9392505050565b60008060006060848603121561310c57600080fd5b833561311781613037565b925060208401356131278161302a565b915060408401356131378161302a565b809150509250925092565b602080825282518282018190526000918401906040840190835b8181101561317a57835183526020938401939092019160010161315c565b509095945050505050565b6000806040838503121561319857600080fd5b82356131a381613037565b9150602083013580151581146131b857600080fd5b809150509250929050565b60008083601f8401126131d557600080fd5b50813567ffffffffffffffff8111156131ed57600080fd5b60208301915083602060608302850101111561320857600080fd5b9250929050565b6000806000806040858703121561322557600080fd5b843567ffffffffffffffff81111561323c57600080fd5b613248878288016131c3565b909550935050602085013567ffffffffffffffff81111561326857600080fd5b8501601f8101871361327957600080fd5b803567ffffffffffffffff81111561329057600080fd5b8760208260051b84010111156132a557600080fd5b949793965060200194505050565b600080602083850312156132c657600080fd5b823567ffffffffffffffff8111156132dd57600080fd5b6132e9858286016131c3565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6002811061153e5761153e6132f5565b6133248161330b565b9052565b60048110613324576133246132f5565b8a81526001600160a01b038a16602082015261014081016133588a61330b565b8960408301526133678961330b565b88606083015260018060a01b03881660808301528660a08301528560c08301528460e0830152836101008301526133a2610120830184613328565b9b9a5050505050505050505050565b600080600080600060a086880312156133c957600080fd5b85356133d481613037565b945060208601356133e48161302a565b935060408601356133f48161302a565b94979396509394606081013594506080013592915050565b81518152602080830151610140830191613430908401826001600160a01b03169052565b506040830151613443604084018261331b565b506060830151613456606084018261331b565b50608083015161347160808401826001600160a01b03169052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161068b610120840182613328565b6000806000606084860312156134c557600080fd5b83356134d081613037565b925060208401356134e081613037565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b600060018201613519576135196134f1565b5060010190565b8082028115828204841417613537576135376134f1565b92915050565b60008261355a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115613537576135376134f1565b60e0810161357f8961330b565b88825261358b8861330b565b60208201979097526001600160a01b039590951660408601526060850193909352608084019190915260a083015260c090910152919050565b81810381811115613537576135376134f1565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000606082840312801561361657600080fd5b600090506040516060810181811067ffffffffffffffff8211171561364957634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b60208082526014908201527313dc99195c88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b6bffffffffffffffffffffffff198460601b1681526136bb8361330b565b8260f81b60148201526136cd8261330b565b60f89190911b60158201526016019291505056feeb3b41be12efa25c0c65725eeff2e2ad0250e2e5de2aa939e18f36aa656e98808f9f7f58643161141dd2b5b862b54ab647f74549d3b06fd4430272bcc411678ca26469706673582212204a2a5504e73394c3f938ffa0c2eba89c3462bd9be7f98a74f56a6aeb4282b5a364736f6c634300081a0033