0 txs
5 calls
constructor
constructor(address _addr_xexp, address _addr_weth, address _addr_chainlink_vrfCoordinator, address _addr_uniswap_swaprouter02)
functions
getLowerBound
viewfunction getLowerBound(address token) view returns (uint256)
getLp
viewfunction getLp(address token) view returns (address lp)
getPlayStatusById
viewfunction getPlayStatusById(uint256 playId) view returns (tuple status)
getTable
viewfunction getTable(uint256 id) view returns (tuple table)
isValidToken
viewfunction isValidToken(address token) view returns (bool valid)
listPlayIds
viewfunction listPlayIds(address player) view returns (uint256[] playIds)
listSwapPairs
viewfunction listSwapPairs() view returns (address[] inputTokens, address[] outputTokens)
listTableIds
viewfunction listTableIds(address owner) view returns (uint256[] tableIds)
listTables
viewfunction listTables(address owner) view returns (tuple[] tables)
listValidTokens
viewfunction listValidTokens() view returns (address[] tokens)
maintainer
viewfunction maintainer() view returns (address)
owner
viewfunction owner() view returns (address)
s_vrfCoordinator
viewfunction s_vrfCoordinator() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addSwapPair
nonpayablefunction addSwapPair(address[] tokens, uint256[] fees)
addValidToken
nonpayablefunction addValidToken(address token, address lp, uint256 lowerBound)
deposit
nonpayablefunction deposit(address tokenAddress, uint256 tokenAmount) returns (uint256 lpAmount)
play
nonpayablefunction play(address player, address inputToken, uint256 inputAmount, uint256 repeats, address outputToken, uint256 tableId) returns (uint256 playId)
rawFulfillRandomWords
nonpayablefunction rawFulfillRandomWords(uint256 requestId, uint256[] randomWords)
registerTable
nonpayablefunction registerTable(tuple table) returns (uint256 tableId)
removeSwapPair
nonpayablefunction removeSwapPair(address inputToken, address outputToken)
setChainlinkSubscription
nonpayablefunction setChainlinkSubscription(uint256 _subscriptionId, bytes32 _keyHash, uint32 _callbackGasLimit, uint256 _ethThreshold)
setCoordinator
nonpayablefunction setCoordinator(address _vrfCoordinator)
setDonation
nonpayablefunction setDonation(address _donation)
setMaintainer
nonpayablefunction setMaintainer(address newMaintainer)
transferOwnership
nonpayablefunction transferOwnership(address to)
withdraw
nonpayablefunction withdraw(address tokenAddress, uint256 lpAmount) returns (uint256 tokenAmount)
events
ChainlinkFunded
event ChainlinkFunded(uint256 amount)
CoordinatorSet
event CoordinatorSet(address vrfCoordinator)
DonationSet
event DonationSet(address donation)
MaintainerReset
event MaintainerReset(address indexed previousMaintainer, address indexed newMaintainer)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
PlayFulfilled
event PlayFulfilled((bool fulfilled, uint256 id, uint256 blockNumber, address player, address inputToken, uint256 inputAmount, uint256 repeats, address outputToken, uint256 tableId, uint256 requestId, uint256 randomWord, uint256[] outcomeLevels, uint256 outputTotalAmount, uint256 outputXexpAmount) status)
PlayRequested
event PlayRequested(address player, address inputToken, uint256 inputAmount, uint256 repeats, address outputToken, uint256 tableId, uint256 playId, uint256 requestId, (address maintainer, uint256 maintainerAmount, address claimer, uint256 claimerAmount, address donation, uint256 donationAmount) sharing)
RandomnessFulfilled
event RandomnessFulfilled(uint256 requestId, uint256 randomness)
RandomnessRequested
event RandomnessRequested(uint256 requestId)
TableRegistered
event TableRegistered(uint256 tableId, address owner)
TokenAdded
event TokenAdded(address indexed token, address indexed lp, uint256 lowerBound)
TokenDeposited
event TokenDeposited(address tokenAddress, uint256 tokenAmount, uint256 lpAmount, address user)
TokenSwapped
event TokenSwapped(address indexed inputToken, uint256 inputAmount, address indexed outputToken, uint256 outputAmount)
TokenWithdrawn
event TokenWithdrawn(address tokenAddress, uint256 lpAmount, uint256 tokenAmount, address user)
errors
OnlyCoordinatorCanFulfill
error OnlyCoordinatorCanFulfill(address have, address want)
OnlyOwnerOrCoordinator
error OnlyOwnerOrCoordinator(address have, address owner, address coordinator)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040526000600a819055600b819055600e55601280546001600160a01b03191690556019805465ffffffffffff1916620100031790553480156200004457600080fd5b506040516200516f3803806200516f83398101604081905262000067916200033c565b80838380873380600081620000c35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000f657620000f6816200021e565b505050620001136200010d620002c960201b60201c565b620002cd565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156200016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000193919062000399565b620001a090600a620004da565b600a5550601280546001600160a01b031916331790556001600160a01b038116620001de5760405163d92e233d60e01b815260040160405180910390fd5b601380546001600160a01b03199081166001600160a01b03938416179091556014805490911693821693909317909255501660805250620004eb92505050565b336001600160a01b03821603620002785760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000ba565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b3390565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fea8d23ad6392081dc0e1e0d5f52c656e1dbdce7e319f2a4e401a78ca2bc6c5ca90600090a35050565b80516001600160a01b03811681146200033757600080fd5b919050565b600080600080608085870312156200035357600080fd5b6200035e856200031f565b93506200036e602086016200031f565b92506200037e604086016200031f565b91506200038e606086016200031f565b905092959194509250565b600060208284031215620003ac57600080fd5b815160ff81168114620003be57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200041c578160001904821115620004005762000400620003c5565b808516156200040e57918102915b93841c9390800290620003e0565b509250929050565b6000826200043557506001620004d4565b816200044457506000620004d4565b81600181146200045d5760028114620004685762000488565b6001915050620004d4565b60ff8411156200047c576200047c620003c5565b50506001821b620004d4565b5060208310610133831016604e8410600b8410161715620004ad575081810a620004d4565b620004b98383620003db565b8060001904821115620004d057620004d0620003c5565b0290505b92915050565b6000620003be60ff84168362000424565b608051614c616200050e60003960008181612c8b0152612d8f0152614c616000f3fe6080604052600436106101405760003560e01c806301e6b66e1461014c578063038468d81461017f57806313ea5d29146101ac57806318ea8d7c146101ce578063195e251f146101ee5780631fe543e31461021b5780632db502761461023b57806339da99021461025d57806347e7ef241461027d5780634ddc052d1461029d57806368e432b2146102c05780636e5fcacd146102e057806379ba50971461030d5780637f045288146103225780638da5cb5b146103425780638ea98117146103645780639850d32b146103845780639eccacf614610399578063b4010838146103b9578063c1876453146103e6578063c443da8514610416578063caf66f5514610436578063d3eeb82814610456578063f2fde38b14610476578063f3fef3a314610496578063f5d39f07146104b6578063ff2484cf146104d657600080fd5b3661014757005b600080fd5b34801561015857600080fd5b5061016c610167366004613d9d565b6104f6565b6040519081526020015b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004613e9d565b610772565b6040516101769190613eba565b3480156101b857600080fd5b506101cc6101c7366004613e9d565b6107de565b005b3480156101da57600080fd5b506101cc6101e9366004613efe565b6107f2565b3480156101fa57600080fd5b5061020e610209366004613f37565b610a17565b60405161017691906140aa565b34801561022757600080fd5b506101cc610236366004614108565b610c56565b34801561024757600080fd5b50610250610ca1565b604051610176919061418c565b34801561026957600080fd5b506101cc61027836600461419f565b610d03565b34801561028957600080fd5b5061016c61029836600461420a565b610f5b565b3480156102a957600080fd5b506102b2611086565b604051610176929190614236565b3480156102cc57600080fd5b506101cc6102db366004613e9d565b611147565b3480156102ec57600080fd5b506103006102fb366004613f37565b6111a5565b6040516101769190614264565b34801561031957600080fd5b506101cc61139c565b34801561032e57600080fd5b5061016c61033d366004613e9d565b611446565b34801561034e57600080fd5b50610357611499565b6040516101769190614342565b34801561037057600080fd5b506101cc61037f366004613e9d565b6114a8565b34801561039057600080fd5b50610357611595565b3480156103a557600080fd5b50601354610357906001600160a01b031681565b3480156103c557600080fd5b506103d96103d4366004613e9d565b6115a4565b6040516101769190614356565b3480156103f257600080fd5b50610406610401366004613e9d565b6118c8565b6040519015158152602001610176565b34801561042257600080fd5b50610357610431366004613e9d565b61192c565b34801561044257600080fd5b506101cc6104513660046143b8565b611984565b34801561046257600080fd5b506101cc610471366004614400565b6119b6565b34801561048257600080fd5b506101cc610491366004613e9d565b611a87565b3480156104a257600080fd5b5061016c6104b136600461420a565b611a98565b3480156104c257600080fd5b5061016c6104d1366004614441565b611c7b565b3480156104e257600080fd5b5061019f6104f1366004613e9d565b612096565b600081608001516001600160a01b0316336001600160a01b0316146105765760405162461bcd60e51b815260206004820152602b60248201527f436f72653a207461626c65206f776e6572206d757374206d61746368206d657360448201526a39b0b3b29039b2b73232b960a91b60648201526084015b60405180910390fd5b60808201516001600160a01b03166000908152600d60205260409020546064116105fd5760405162461bcd60e51b815260206004820152603260248201527f436f72653a20746f6f206d616e79207377617073207265676973746572656420604482015271313c903a3432903a30b136329037bbb732b960711b606482015260840161056d565b600b805490600061060d836144be565b9091555060c083015261061f82612100565b60808201516001600160a01b03166000908152600d60209081526040822060c08501518154600181810184559285528385200155600c805491820181559092528351805185936007027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70192610699928492910190613a24565b5060208281015180516106b29260018501920190613aca565b50604082015180516106ce916002840191602090910190613aca565b506060820151600382015560808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a082015160058201906107139082614557565b5060c0918201516006909101558201516080830151604080519283526001600160a01b0390911660208301527fc845675aa427c4026b96667d4a6e95098411bf2c23f05ce12f0750ab41cdd4ec910160405180910390a15060c0015190565b6001600160a01b0381166000908152600d60209081526040918290208054835181840281018401909452808452606093928301828280156107d257602002820191906000526020600020905b8154815260200190600101908083116107be575b50505050509050919050565b6107e661258f565b6107ef816125e4565b50565b6107fa612636565b60005b600354811015610a0057826001600160a01b03166003828154811061082457610824614616565b6000918252602090912001546001600160a01b03161480156108755750816001600160a01b03166004828154811061085e5761085e614616565b6000918252602090912001546001600160a01b0316145b15610a05576003805461088a9060019061462c565b8154811061089a5761089a614616565b600091825260209091200154600380546001600160a01b0390921691839081106108c6576108c6614616565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038054806109055761090561463f565b600082815260209020810160001990810180546001600160a01b0319169055019055600480546109379060019061462c565b8154811061094757610947614616565b600091825260209091200154600480546001600160a01b03909216918390811061097357610973614616565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060048054806109b2576109b261463f565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038581168352600582526040808420918616845291528120610a0091613b05565b505050565b80610a0f816144be565b9150506107fd565b610a1f613b3f565b600b548210610a405760405162461bcd60e51b815260040161056d90614655565b600c8281548110610a5357610a53614616565b90600052602060002090600702016040518060e001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610ad957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aaa5790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610b3157602002820191906000526020600020905b815481526020019060010190808311610b1d575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610b8957602002820191906000526020600020905b815481526020019060010190808311610b75575b50505091835250506003820154602082015260048201546001600160a01b03166040820152600582018054606090920191610bc3906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef906144d7565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b505050505081526020016006820154815250509050919050565b6013546001600160a01b03163314610c965760135460405163073e64fd60e21b81523360048201526001600160a01b03909116602482015260440161056d565b610a008383836126cf565b60606006805480602002602001604051908101604052809291908181526020018280548015610cf957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610cdb575b5050505050905090565b610d0b612636565b600084846000818110610d2057610d20614616565b9050602002016020810190610d359190613e9d565b604051602001610d58919060609190911b6001600160601b031916815260140190565b60408051601f19818403018152919052905060015b84811015610df657818484610d8360018561462c565b818110610d9257610d92614616565b90506020020135878784818110610dab57610dab614616565b9050602002016020810190610dc09190613e9d565b604051602001610dd293929190614684565b60405160208183030381529060405291508080610dee906144be565b915050610d6d565b50600385856000818110610e0c57610e0c614616565b9050602002016020810190610e219190613e9d565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b039290921691909117905560049086908690610e64908261462c565b818110610e7357610e73614616565b9050602002016020810190610e889190613e9d565b81546001810183556000928352602083200180546001600160a01b0319166001600160a01b0392909216919091179055819060059087878281610ecd57610ecd614616565b9050602002016020810190610ee29190613e9d565b6001600160a01b0316815260208101919091526040016000908120908787610f0b60018261462c565b818110610f1a57610f1a614616565b9050602002016020810190610f2f9190613e9d565b6001600160a01b03168152602081019190915260400160002090610f539082614557565b505050505050565b600080610f678461192c565b604051631c001a8b60e01b8152600481018590529091506001600160a01b03821690631c001a8b90602401602060405180830381865afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd391906146cb565b6040516340c10f1960e01b81529092506001600160a01b038216906340c10f199061100490339086906004016146e4565b600060405180830381600087803b15801561101e57600080fd5b505af1158015611032573d6000803e3d6000fd5b50505050611042843330866126f2565b7f7bb158f2c5fb0fbc0235b7c434bf0105c6ca3eee6a39f665f93ec9acf5b5e0a68484843360405161107794939291906146fd565b60405180910390a15092915050565b60608060038054806020026020016040519081016040528092919081815260200182805480156110df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110c1575b50505050509150600480548060200260200160405190810160405280929190818152602001828054801561113c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161111e575b505050505090509091565b61114f612636565b601280546001600160a01b0319166001600160a01b0383161790556040517f67cf80ae3566e4dd65cbaed66f7f748eb17d6bb1d27c32eaa77c3043da943c329061119a908390614342565b60405180910390a150565b611234604051806101c00160405280600015158152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016060815260200160008152602001600081525090565b600e54821061127c5760405162461bcd60e51b815260206004820152601460248201527310dbdc994e881c1b185e481b9bdd08199bdd5b9960621b604482015260640161056d565b600f828154811061128f5761128f614616565b6000918252602091829020604080516101c081018252600e909302909101805460ff161515835260018101548385015260028101548383015260038101546001600160a01b039081166060850152600482015481166080850152600582015460a0850152600682015460c085015260078201541660e084015260088101546101008401526009810154610120840152600a810154610140840152600b81018054835181870281018701909452808452939491936101608601939283018282801561137857602002820191906000526020600020905b815481526020019060010190808311611364575b50505050508152602001600c8201548152602001600d820154815250509050919050565b6001546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604482015260640161056d565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b038116600090815260086020526040812054810361147d5760405162461bcd60e51b815260040161056d90614728565b506001600160a01b031660009081526008602052604090205490565b6000546001600160a01b031690565b6114b0611499565b6001600160a01b0316336001600160a01b0316141580156114dc57506013546001600160a01b03163314155b1561152357336114ea611499565b60135460405163061db9c160e01b81526001600160a01b039384166004820152918316602483015291909116604482015260640161056d565b6001600160a01b03811661154a5760405163d92e233d60e01b815260040160405180910390fd5b601380546001600160a01b0319166001600160a01b0383161790556040517fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69061119a908390614342565b6002546001600160a01b031690565b6001600160a01b0381166000908152600d6020908152604080832080548251818502810185019093528083526060949383018282801561160357602002820191906000526020600020905b8154815260200190600101908083116115ef575b5050505050905080516001600160401b0381111561162357611623613b9a565b60405190808252806020026020018201604052801561165c57816020015b611649613b3f565b8152602001906001900390816116415790505b50915060005b81518110156118c157600c82828151811061167f5761167f614616565b60200260200101518154811061169757611697614616565b90600052602060002090600702016040518060e00160405290816000820180548060200260200160405190810160405280929190818152602001828054801561171d57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116116ee5790505b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561177557602002820191906000526020600020905b815481526020019060010190808311611761575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156117cd57602002820191906000526020600020905b8154815260200190600101908083116117b9575b50505091835250506003820154602082015260048201546001600160a01b03166040820152600582018054606090920191611807906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611833906144d7565b80156118805780601f1061185557610100808354040283529160200191611880565b820191906000526020600020905b81548152906001019060200180831161186357829003601f168201915b505050505081526020016006820154815250508382815181106118a5576118a5614616565b6020026020010181905250806118ba906144be565b9050611662565b5050919050565b6000805b60065481101561192357600681815481106118e9576118e9614616565b6000918252602090912001546001600160a01b03908116908416036119115750600192915050565b8061191b816144be565b9150506118cc565b50600092915050565b6001600160a01b038181166000908152600760205260408120549091166119655760405162461bcd60e51b815260040161056d90614728565b506001600160a01b039081166000908152600760205260409020541690565b61198c612636565b6015939093556016919091556017805463ffffffff191663ffffffff909216919091179055601855565b6119be612636565b6119c7836118c8565b611a1757600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03838116600081815260076020908152604080832080546001600160a01b0319169588169586179055600882529182902085905590518481527f7156d0b8d9ed8d1117b97d76a15a304bad2749fc23251c2c7ed65a0698952850910160405180910390a3505050565b611a8f61258f565b6107ef816127f4565b600080611aa48461192c565b60405163ad9da7bd60e01b8152600481018590529091506001600160a01b0382169063ad9da7bd90602401602060405180830381865afa158015611aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1091906146cb565b6040516370a0823160e01b81529092506001600160a01b038216906370a0823190611b3f903390600401614342565b602060405180830381865afa158015611b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8091906146cb565b831115611bdb5760405162461bcd60e51b8152602060048201526024808201527f586c70743a206c70416d6f756e742065786365656473206f776e65722062616c604482015263616e636560e01b606482015260840161056d565b604051632770a7eb60e21b81526001600160a01b03821690639dc29fac90611c0990339087906004016146e4565b600060405180830381600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050611c46843384612897565b7f557dddd873c3943ee57068879c42e940597f6472fe0912c9104843ff8274ff3c8484843360405161107794939291906146fd565b6000600b548210611c9e5760405162461bcd60e51b815260040161056d90614655565b600e8054906000611cae836144be565b919050559050611cbf8686866129a1565b6000611ccb8587614758565b90506000600c8481548110611ce257611ce2614616565b906000526020600020906007020190506201388081600301541115611d195760405162461bcd60e51b815260040161056d9061476f565b600481015460038201546000918291611d3f918c9187916001600160a01b031690612a65565b915091508084611d508c848b612bc8565b611d5a9190614758565b611d6491906147bc565b93506000611d70612c0d565b9050856011600083815260200190815260200160002081905550601060008d6001600160a01b03166001600160a01b03168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190915055600f604051806101c001604052806000151581526020018881526020014381526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c81526020018b81526020018a6001600160a01b031681526020018981526020018381526020016000815260200160006001600160401b03811115611e5e57611e5e613b9a565b604051908082528060200260200182016040528015611e87578160200160208202803683370190505b508152602080820189905260006040928301819052845460018082018755958252908290208451600e90920201805460ff1916911515919091178155838201519481019490945590820151600284015560608201516003840180546001600160a01b03199081166001600160a01b03938416179091556080840151600486018054831691841691909117905560a0840151600586015560c0840151600686015560e0840151600786018054909216921691909117905561010082015160088401556101208201516009840155610140820151600a8401556101608201518051929392611f7992600b8501920190613aca565b5061018082015181600c01556101a082015181600d015550507f9a4624ae262be941494eb959b7d7f8d36a088d95da826c9c5cc03a97f5a5a63c8c8c8c8c8c8c8c888b6040516120639998979695949392919060006101c08201905060018060a01b03808c168352808b16602084015289604084015288606084015280881660808401528660a08401528560c08401528460e0840152808451166101008401526020840151610120840152806040850151166101408401526060840151610160840152806080850151166101808401525060a08301516101a08301529a9950505050505050505050565b60405180910390a1612087600f878154811061208157612081614616565b50600052565b50505050509695505050505050565b6001600160a01b0381166000908152601060209081526040918290208054835181840281018401909452808452606093928301828280156107d257602002820191906000526020600020908154815260200190600101908083116107be5750505050509050919050565b8051516001111561215f5760405162461bcd60e51b815260206004820152602360248201527f436f72653a206d7573742068617665206174206c65617374206f6e65206272616044820152620dcc6d60eb1b606482015260840161056d565b805151600a10156121be5760405162461bcd60e51b815260206004820152602360248201527f436f72653a206d7573742068617665206174206d6f7374203130206272616e6360448201526268657360e81b606482015260840161056d565b6020810151518151511480156121da5750604081015151815151145b61224c5760405162461bcd60e51b815260206004820152603e60248201527f436f72653a2072656c6174697665732c206578706563746174696f6e732c207260448201527f657761726473206d757374206861766520657175616c206c656e677468730000606482015260840161056d565b62013880816060015111156122735760405162461bcd60e51b815260040161056d9061476f565b60008060005b83515181101561252a578360200151818151811061229957612299614616565b6020026020010151836122ac91906147d0565b92506000846020015182815181106122c6576122c6614616565b6020026020010151116123185760405162461bcd60e51b815260206004820152601a6024820152790436f72653a206578706563746174696f6e206d757374203e20360341b604482015260640161056d565b620aae6083111561237b5760405162461bcd60e51b815260206004820152602760248201527f436f72653a206578706563746174696f6e2073756d206d757374203c3d2037656044820152663520283730252960c81b606482015260840161056d565b60008460400151828151811061239357612393614616565b6020026020010151116123e05760405162461bcd60e51b81526020600482015260156024820152740436f72653a20726577617264206d757374203e203605c1b604482015260640161056d565b83518051829081106123f4576123f4614616565b602002602001015160ff1660000361249357620186a08460400151828151811061242057612420614616565b6020026020010151111561248e5760405162461bcd60e51b815260206004820152602f60248201527f436f72653a207265776172642072656c617469766520746f20706f6f6c206d7560448201526e7374203c3d2031653520283130252960881b606482015260840161056d565b61251a565b83518051829081106124a7576124a7614616565b602002602001015160ff1660010361251a57836040015181815181106124cf576124cf614616565b6020026020010151846020015182815181106124ed576124ed614616565b6020026020010151620f42406125039190614758565b61250d91906147bc565b61251790836147d0565b91505b612523816144be565b9050612279565b50620f4240811115610a005760405162461bcd60e51b815260206004820152602860248201527f436f72653a2070726f626162696c6974792073756d206d757374203c3d203165604482015267362028313030252960c01b606482015260840161056d565b6000546001600160a01b031633146125e25760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604482015260640161056d565b565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fea8d23ad6392081dc0e1e0d5f52c656e1dbdce7e319f2a4e401a78ca2bc6c5ca90600090a35050565b3361263f611595565b6001600160a01b03161480612663575033612658611499565b6001600160a01b0316145b6125e25760405162461bcd60e51b815260206004820152603760248201527f4d61696e7461696e61626c653a2063616c6c6572206973206e6f74207468652060448201527636b0b4b73a30b4b732b91037b9103a34329037bbb732b960491b606482015260840161056d565b610a0083838360008181106126e6576126e6614616565b90506020020135612c55565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161275691906147e3565b6000604051808303816000865af19150503d8060008114612793576040519150601f19603f3d011682016040523d82523d6000602084013e612798565b606091505b50915091508180156127c25750805115806127c25750808060200190518101906127c291906147ff565b610f535760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015260640161056d565b336001600160a01b038216036128465760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b604482015260640161056d565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600080846001600160a01b031663a9059cbb60e01b85856040516024016128bf9291906146e4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516128fd91906147e3565b6000604051808303816000865af19150503d806000811461293a576040519150601f19603f3d011682016040523d82523d6000602084013e61293f565b606091505b509150915081801561296957508051158061296957508080602001905181019061296991906147ff565b61299a5760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161056d565b5050505050565b6129aa83611446565b821015612a085760405162461bcd60e51b815260206004820152602660248201527f436f72653a20696e707574416d6f756e742069732062656c6f77206c6f77657260448201526508189bdd5b9960d21b606482015260840161056d565b60008111612a505760405162461bcd60e51b8152602060048201526015602482015274436f72653a2072657065617473206973207a65726f60581b604482015260640161056d565b610a00833330612a608587614758565b6126f2565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260006040518060c00160405280612aac611595565b6001600160a01b039081168252600060208301819052878216604084015260608301819052601254909116608083015260a0909101529150620f4240612af586620186a0614758565b612aff91906147bc565b6020830152612b1a86612b10611595565b8460200151612897565b620f4240612b288487614758565b612b3291906147bc565b60608301528215612b4c57612b4c86858460600151612897565b620f4240612b5d84620186a061462c565b612b679087614758565b612b7191906147bc565b60a08301819052601254612b909188916001600160a01b031690612897565b60a082015160608301516020840151612ba9908861462c565b612bb3919061462c565b612bbd919061462c565b905094509492505050565b6000612bd5848484612c63565b9050612bdf612e7d565b15612c0657601454612c0690612c0190849084906001600160a01b0316612c63565b612f18565b9392505050565b6000612c17612f51565b90507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4581604051612c4a91815260200190565b60405180910390a190565b612c5f828261302d565b5050565b6000816001600160a01b0316846001600160a01b031603612c85575081612e20565b612cb0847f0000000000000000000000000000000000000000000000000000000000000000856132e9565b604080516080810182526001600160a01b038087166000908152600560209081528482209287168252919091529182208054829190612cee906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1a906144d7565b8015612d675780601f10612d3c57610100808354040283529160200191612d67565b820191906000526020600020905b815481529060010190602001808311612d4a57829003601f168201915b50505050508152602001306001600160a01b03168152602001858152602001600081525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b858183f826040518263ffffffff1660e01b8152600401612dd99190614821565b6020604051808303816000875af1158015612df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1c91906146cb565b9150505b816001600160a01b0316846001600160a01b03167f81530fc4b9af72da99fec8cd4b055559a95085b63d6d713875a3b410b01a7e9b8584604051612e6e929190918252602082015260400190565b60405180910390a39392505050565b60135460155460405163dc311dd360e01b815260009283926001600160a01b039091169163dc311dd391612eb79160040190815260200190565b600060405180830381865afa158015612ed4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612efc9190810190614886565b50506018546001600160601b0390921691909110949350505050565b612f21816133ec565b6040518181527f809ca3369a3812e313125d2bd3a01d88dd6eba85c886346fc010433ab44399db9060200161119a565b6013546040805160c081018252601654815260155460208083019190915260195461ffff81168385015260175463ffffffff9081166060850152620100009091041660808301528251908101909252600182526000926001600160a01b031691639b1c385e919060a0820190612fc6906134a9565b8152506040518263ffffffff1660e01b8152600401612fe59190614972565b6020604051808303816000875af1158015613004573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302891906146cb565b905090565b600082815260116020526040812054600f8054909190811061305157613051614616565b60009182526020909120600e90910201805490915060ff16156130b05760405162461bcd60e51b815260206004820152601760248201527610dbdc994e88185b1c9958591e48199d5b199a5b1b1959604a1b604482015260640161056d565b828160090154146130fe5760405162461bcd60e51b8152602060048201526018602482015277086dee4ca7440e4cae2eacae6e892c840dad2e6dac2e8c6d60431b604482015260640161056d565b600080826006015483600c015461311591906147bc565b600a8401859055835460ff191660011784556007840154600885015491925061314b916001600160a01b0390911690839061351a565b1561327f5760008060005b85600601548110156131c05760078601546008870154613183916001600160a01b03169086908a90613733565b9850909350915061319482866147d0565b600b87018054600181018255600091825260209091200184905594506131b9816144be565b9050613156565b50600c85018490556004808601546040805163313ce56760e01b815290516001600160a01b039092169263313ce5679282820192602092908290030181865afa158015613211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323591906149d7565b61324090600a614ad8565b600a5486600601548760050154600a6132599190614758565b6132639190614758565b61326d9190614758565b61327791906147bc565b600d86015550505b600d830154600c840154600785015460038601546132ab9392916001600160a01b039081169116613988565b7f1338b36703eda4c889fb008a34e23c63688fa8dd51623a5aa0ef0d5b99f85cce836040516132da9190614b28565b60405180910390a15050505050565b600080846001600160a01b031663095ea7b360e01b85856040516024016133119291906146e4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161334f91906147e3565b6000604051808303816000865af19150503d806000811461338c576040519150601f19603f3d011682016040523d82523d6000602084013e613391565b606091505b50915091508180156133bb5750805115806133bb5750808060200190518101906133bb91906147ff565b61299a5760405162461bcd60e51b8152602060048201526002602482015261534160f01b604482015260640161056d565b601454604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505060135460155460405163256d573f60e21b815260048101919091526001600160a01b0390911692506395b55cfc915083906024016000604051808303818588803b15801561349557600080fd5b505af1158015610f53573d6000803e3d6000fd5b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa826040516024016134e291511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b600080600c838154811061353057613530614616565b6000918252602082206040516370a0823160e01b815260079092020192506001600160a01b038716906370a082319061356d903090600401614342565b602060405180830381865afa15801561358a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ae91906146cb565b905060008060005b8454811015613721578460000181815481106135d4576135d4614616565b60009182526020808320908204015460ff601f9092166101000a9004169003613629578385600201828154811061360d5761360d614616565b90600052602060002001546136229190614758565b9250613693565b84600001818154811061363e5761363e614616565b60009182526020918290209181049091015460ff601f9092166101000a900416600103613693578785600201828154811061367b5761367b614616565b90600052602060002001546136909190614758565b92505b82888660010183815481106136aa576136aa614616565b9060005260206000200154620f42406136c39190614758565b6136cd9190614758565b6136d791906147bc565b6136e190836147d0565b9150600a6136f285620f4240614758565b6136fc91906147bc565b83111561371157600095505050505050612c06565b61371a816144be565b90506135b6565b50620f42401015979650505050505050565b6000808080613746600160801b87614c17565b90506000886001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016137769190614342565b602060405180830381865afa158015613793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b791906146cb565b90506000600c87815481106137ce576137ce614616565b9060005260206000209060070201905060008089436040516020016137fd929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c955060005b83548110156139705783600001818154811061383957613839614616565b60009182526020918290209181049091015460ff601f9092166101000a9004161561389c57620f42408c85600201838154811061387857613878614616565b906000526020600020015461388d9190614758565b61389791906147bc565b6138d5565b620f4240858560020183815481106138b6576138b6614616565b90600052602060002001546138cb9190614758565b6138d591906147bc565b9150620f42408460010182815481106138f0576138f0614616565b90600052602060002001548d6139069190614758565b61391091906147bc565b61391e83600160801b6147bc565b6139289190614758565b61393290846147d0565b92508286101561396057806139518361394c600a896147bc565b613a0a565b9850985050505050505061397e565b613969816144be565b905061381b565b505090549550600094505050505b9450945094915050565b83156139f3576009546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906139c090849088906004016146e4565b600060405180830381600087803b1580156139da57600080fd5b505af11580156139ee573d6000803e3d6000fd5b505050505b8215613a0457613a04828285612897565b50505050565b6000818310613a195781613a1b565b825b90505b92915050565b82805482825590600052602060002090601f01602090048101928215613aba5791602002820160005b83821115613a8b57835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302613a4d565b8015613ab85782816101000a81549060ff0219169055600101602081600001049283019260010302613a8b565b505b50613ac6929150613b85565b5090565b828054828255906000526020600020908101928215613aba579160200282015b82811115613aba578251825591602001919060010190613aea565b508054613b11906144d7565b6000825580601f10613b21575050565b601f0160209004906000526020600020908101906107ef9190613b85565b6040518060e001604052806060815260200160608152602001606081526020016000815260200160006001600160a01b0316815260200160608152602001600081525090565b5b80821115613ac65760008155600101613b86565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715613bd257613bd2613b9a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613c0057613c00613b9a565b604052919050565b60006001600160401b03821115613c2157613c21613b9a565b5060051b60200190565b60ff811681146107ef57600080fd5b600082601f830112613c4b57600080fd5b81356020613c60613c5b83613c08565b613bd8565b82815260059290921b84018101918181019086841115613c7f57600080fd5b8286015b84811015613ca3578035613c9681613c2b565b8352918301918301613c83565b509695505050505050565b600082601f830112613cbf57600080fd5b81356020613ccf613c5b83613c08565b82815260059290921b84018101918181019086841115613cee57600080fd5b8286015b84811015613ca35780358352918301918301613cf2565b6001600160a01b03811681146107ef57600080fd5b8035613d2981613d09565b919050565b600082601f830112613d3f57600080fd5b81356001600160401b03811115613d5857613d58613b9a565b613d6b601f8201601f1916602001613bd8565b818152846020838601011115613d8057600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613daf57600080fd5b81356001600160401b0380821115613dc657600080fd5b9083019060e08286031215613dda57600080fd5b613de2613bb0565b823582811115613df157600080fd5b613dfd87828601613c3a565b825250602083013582811115613e1257600080fd5b613e1e87828601613cae565b602083015250604083013582811115613e3657600080fd5b613e4287828601613cae565b60408301525060608301356060820152613e5e60808401613d1e565b608082015260a083013582811115613e7557600080fd5b613e8187828601613d2e565b60a08301525060c083013560c082015280935050505092915050565b600060208284031215613eaf57600080fd5b8135612c0681613d09565b6020808252825182820181905260009190848201906040850190845b81811015613ef257835183529284019291840191600101613ed6565b50909695505050505050565b60008060408385031215613f1157600080fd5b8235613f1c81613d09565b91506020830135613f2c81613d09565b809150509250929050565b600060208284031215613f4957600080fd5b5035919050565b600081518084526020808501945080840160005b83811015613f8057815187529582019590820190600101613f64565b509495945050505050565b6001600160a01b03169052565b60005b83811015613fb3578181015183820152602001613f9b565b50506000910152565b60008151808452613fd4816020860160208601613f98565b601f01601f19169290920160200192915050565b805160e0808452815190840181905260009160209190820190610100860190845b8181101561402857835160ff1683529284019291840191600101614009565b5050828501519150858103838701526140418183613f50565b925050506040830151848203604086015261405c8282613f50565b91505060608301516060850152608083015161407b6080860182613f8b565b5060a083015184820360a08601526140938282613fbc565b91505060c083015160c08501528091505092915050565b602081526000613a1b6020830184613fe8565b60008083601f8401126140cf57600080fd5b5081356001600160401b038111156140e657600080fd5b6020830191508360208260051b850101111561410157600080fd5b9250929050565b60008060006040848603121561411d57600080fd5b8335925060208401356001600160401b0381111561413a57600080fd5b614146868287016140bd565b9497909650939450505050565b600081518084526020808501945080840160005b83811015613f805781516001600160a01b031687529582019590820190600101614167565b602081526000613a1b6020830184614153565b600080600080604085870312156141b557600080fd5b84356001600160401b03808211156141cc57600080fd5b6141d8888389016140bd565b909650945060208701359150808211156141f157600080fd5b506141fe878288016140bd565b95989497509550505050565b6000806040838503121561421d57600080fd5b823561422881613d09565b946020939093013593505050565b6040815260006142496040830185614153565b828103602084015261425b8185614153565b95945050505050565b6020815261427760208201835115159052565b60208201516040820152604082015160608201526000606083015161429f6080840182613f8b565b5060808301516142b260a0840182613f8b565b5060a083015160c083015260c083015160e083015260e08301516101006142db81850183613f8b565b8401516101208481019190915284015161014080850191909152840151610160808501919091528401516101c0610180808601829052919250906143236101e0860184613f50565b908601516101a086810191909152909501519301929092525090919050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156143ab57603f19888603018452614399858351613fe8565b9450928501929085019060010161437d565b5092979650505050505050565b600080600080608085870312156143ce57600080fd5b8435935060208501359250604085013563ffffffff811681146143f057600080fd5b9396929550929360600135925050565b60008060006060848603121561441557600080fd5b833561442081613d09565b9250602084013561443081613d09565b929592945050506040919091013590565b60008060008060008060c0878903121561445a57600080fd5b863561446581613d09565b9550602087013561447581613d09565b94506040870135935060608701359250608087013561449381613d09565b8092505060a087013590509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600182016144d0576144d06144a8565b5060010190565b600181811c908216806144eb57607f821691505b60208210810361450b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a0057600081815260208120601f850160051c810160208610156145385750805b601f850160051c820191505b81811015610f5357828155600101614544565b81516001600160401b0381111561457057614570613b9a565b6145848161457e84546144d7565b84614511565b602080601f8311600181146145b957600084156145a15750858301515b600019600386901b1c1916600185901b178555610f53565b600085815260208120601f198616915b828110156145e8578886015182559484019460019091019084016145c9565b50858210156146065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b81810381811115613a1e57613a1e6144a8565b634e487b7160e01b600052603160045260246000fd5b60208082526015908201527410dbdc994e881d18589b19481b9bdd08199bdd5b99605a1b604082015260600190565b60008451614696818460208901613f98565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6000602082840312156146dd57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b60208082526016908201527529bbb0b83832b91d1034b73b30b634b2103a37b5b2b760511b604082015260600190565b8082028115828204841417613a1e57613a1e6144a8565b6020808252601f908201527f436f72653a20666565526174696f206d757374203c3d20386534202838252900604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826147cb576147cb6147a6565b500490565b80820180821115613a1e57613a1e6144a8565b600082516147f5818460208701613f98565b9190910192915050565b60006020828403121561481157600080fd5b81518015158114612c0657600080fd5b60208152600082516080602084015261483d60a0840182613fbc565b905060018060a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b80516001600160601b0381168114613d2957600080fd5b600080600080600060a0868803121561489e57600080fd5b6148a78661486f565b945060206148b681880161486f565b60408801519095506001600160401b0380821682146148d457600080fd5b60608901519195506148e582613d09565b6080890151919450808211156148fa57600080fd5b508701601f8101891361490c57600080fd5b805161491a613c5b82613c08565b81815260059190911b8201830190838101908b83111561493957600080fd5b928401925b8284101561496057835161495181613d09565b8252928401929084019061493e565b80955050505050509295509295909350565b60208152815160208201526020820151604082015261ffff60408301511660608201526000606083015163ffffffff80821660808501528060808601511660a0850152505060a083015160c0808401526149cf60e0840182613fbc565b949350505050565b6000602082840312156149e957600080fd5b8151612c0681613c2b565b600181815b80851115614a2f578160001904821115614a1557614a156144a8565b80851615614a2257918102915b93841c93908002906149f9565b509250929050565b600082614a4657506001613a1e565b81614a5357506000613a1e565b8160018114614a695760028114614a7357614a8f565b6001915050613a1e565b60ff841115614a8457614a846144a8565b50506001821b613a1e565b5060208310610133831016604e8410600b8410161715614ab2575081810a613a1e565b614abc83836149f4565b8060001904821115614ad057614ad06144a8565b029392505050565b6000613a1b60ff841683614a37565b6001600160a01b031690565b6000815480845260208085019450836000528060002060005b83811015613f8057815487529582019560019182019101614b0c565b60208152614b4460208201614b3e845460ff1690565b15159052565b60018201546040820152600282015460608201526000614b676003840154614ae7565b614b746080840182613f8b565b50614b826004840154614ae7565b614b8f60a0840182613f8b565b50600583015460c0830152600683015460e0830152614bb16007840154614ae7565b614bbf610100840182613f8b565b5060088301546101208301526009830154610140830152600a8301546101608301526101c080610180840152614bfc6101e08401600b8601614af3565b600c8501546101a0850152600d909401549201919091525090565b600082614c2657614c266147a6565b50069056fea2646970667358221220cf9b78f2f883a129bf698aac389acf9cf923597ebd17e8de81062ae4294f160164736f6c6343000813003300000000000000000000000051e55bce4d92de264453b035a7fc44313d066b4a000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d691f04bc0c9a24edb78af9e005cf85768f694c9000000000000000000000000b971ef87ede563556b2ed4b1c0b0019111dd85d2