124 txs
231 calls
constructor
constructor(address _vrfCoordinator, address _bankroll, bytes32 _vrfKeyHash, uint256 _vrfSubId, uint16 _vrfMinConfirmations, uint32 _vrfGasLimit)
functions
bankroll
viewfunction bankroll() view returns (address)
claimableVRFFee
viewfunction claimableVRFFee() view returns (uint256)
getCurrentUserState
viewfunction getCurrentUserState(address player) view returns (tuple minesState)
getMaxReveal
viewfunction getMaxReveal() view returns (uint256[24] maxReveal)
getMultipliers
viewfunction getMultipliers(uint256 numMines, uint256 numRevealed) view returns (uint256 multiplier)
getVRFFee
viewfunction getVRFFee(uint256 _gasPrice) view returns (uint256 fee)
owner
viewfunction owner() view returns (address)
s_vrfCoordinator
viewfunction s_vrfCoordinator() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
collectVrfFee
nonpayablefunction collectVrfFee()
end
nonpayablefunction end()
play
payablefunction play(uint256 wager, address tokenAddress, uint8 numMines, bool[25] tiles, bool isCashout) payable
rawFulfillRandomWords
nonpayablefunction rawFulfillRandomWords(uint256 requestId, uint256[] randomWords)
refund
nonpayablefunction refund()
reveal
payablefunction reveal(bool[25] tiles, bool isCashout) payable
setCoordinator
nonpayablefunction setCoordinator(address _vrfCoordinator)
transferOwnership
nonpayablefunction transferOwnership(address to)
events
CoordinatorSet
event CoordinatorSet(address vrfCoordinator)
MinesEnd
event MinesEnd(address indexed playerAddress, uint256 wager, uint256 payout, address tokenAddress, uint256 multiplier, uint256 rewardAmount)
MinesRefund
event MinesRefund(address indexed player, uint256 wager, address tokenAddress)
MinesReveal
event MinesReveal(address indexed playerAddress, uint256 wager, uint256 payout, address tokenAddress, bool[25] minesTiles, bool[25] revealedTiles, uint256 multiplier, uint256 rewardAmount)
MinesRevealCashout
event MinesRevealCashout(address indexed playerAddress, uint256 wager, uint256 payout, address tokenAddress, bool[25] minesTiles, bool[25] revealedTiles, uint256 multiplier, uint256 rewardAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
errors
OnlyCoordinatorCanFulfill
error OnlyCoordinatorCanFulfill(address have, address want)
OnlyOwnerOrCoordinator
error OnlyOwnerOrCoordinator(address have, address owner, address coordinator)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080604052346100315761002061001461016f565b94939093929192610204565b604051613b0561096b8239613b0590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761006d57604052565b610036565b9061008661007f60405190565b928361004c565b565b6001600160a01b031690565b90565b6001600160a01b0381165b0361003157565b9050519061008682610097565b6001600160a01b0381166100a2565b90505190610086826100b6565b806100a2565b90505190610086826100d2565b61ffff81166100a2565b90505190610086826100e5565b63ffffffff81166100a2565b90505190610086826100fc565b909160c0828403126100315761012b83836100a9565b9261013981602085016100c5565b9261014782604083016100d8565b9261009461015884606085016100d8565b9360a061016882608087016100ef565b9401610108565b61018d6144708038038061018281610072565b928339810190610115565b909192939495565b6001600160401b03811161006d5760200290565b6101b561009491610195565b610072565b6101c76100946100949290565b60ff1690565b6100946100946100949290565b634e487b7160e01b600052601160045260246000fd5b60001981146101ff5760010190565b6101da565b906102129594939291610510565b61021c60186101a9565b601861023261022b60186101ba565b60ff168352565b61024961023f60156101ba565b60ff166020840152565b61026061025660116101ba565b60ff166040840152565b61027761026d600e6101ba565b60ff166060840152565b61028e610284600c6101ba565b60ff166080840152565b6102a561029b600a6101ba565b60ff1660a0840152565b6102bc6102b260096101ba565b60ff1660c0840152565b6102d36102c960086101ba565b60ff1660e0840152565b6102eb6102e060076101ba565b60ff16610100840152565b6103036102f860066101ba565b60ff16610120840152565b61032361031060056101ba565b60ff166101408401819052610160840152565b61034361033060046101ba565b60ff1661018084018190526101a0840152565b61036b61035060036101ba565b60ff166101c084018190526101e08401819052610200840152565b61039b61037860026101ba565b60ff16610220840181905261024084018190526102608401819052610280840152565b6103cd6001926103c86103ad856101ba565b60ff166102a083018190526102c083018190526102e0830152565b6106f1565b816103d7816101cd565b905b6103e257505050565b6103eb826101cd565b811161040957806103fe610403926107a0565b6101f0565b826103d9565b505050565b906001600160a01b03905b9181191691161790565b61009490610088906001600160a01b031682565b61009490610423565b61009490610437565b9061045961009461046092610440565b825461040e565b9055565b9060001990610419565b9061047c6100946104609290565b8254610464565b9061047c610094610460926101cd565b9061ffff90610419565b6104ae6100946100949261ffff1690565b61ffff1690565b906104c56100946104609261049d565b8254610493565b9065ffffffff00009060101b610419565b6104f06100946100949263ffffffff1690565b63ffffffff1690565b90610509610094610460926104dd565b82546104cc565b9261053b6100869695936105346105429461052d61054998610566565b6005610449565b600661046e565b6008610483565b60076104b5565b60076104f9565b6100886100946100949290565b61009490610550565b61056f336105af565b600061057d6100888261055d565b6001600160a01b038316146105a0575061059961008691610440565b6003610449565b63d92e233d60e01b8152600490fd5b610086906105bd600061055d565b9061060f565b156105ca57565b60405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f00000000000000006044820152606490fd5b61064e9061061b610669565b610088610628600061055d565b916106476001600160a01b0384166001600160a01b03831614156105c3565b6001610449565b6001600160a01b038216036106605750565b610086906108f6565b61008661008661067e565b61009460016101cd565b610086610689610674565b6000610483565b634e487b7160e01b600052603260045260246000fd5b9060188110156106b7576020020190565b610690565b6100946100946100949260ff1690565b919082018092116101ff57565b906106e3906101cd565b600052602052604060002090565b906106fc60006101cd565b6018811015610756578061074b61072861072361071c61075195886106a6565b5160ff1690565b6106bc565b610746600c61074061073a60016101cd565b866106cc565b906106d9565b610483565b60010190565b6106fc565b509050565b919082039182116101ff57565b818102929181159184041417156101ff57565b634e487b7160e01b600052601260045260246000fd5b811561079b570490565b61077b565b600190816107ad816101cd565b905b6107b857505050565b60196107cf610094846107ca846101cd565b61075b565b82116108a4579083906107e1826101cd565b8281946107ee60006101cd565b915b61084c575b50506108326103fe9161082761082c610846969761082765090105fbb80094610821633b9aca006101cd565b90610768565b610791565b916101cd565b6107468361084188600b6106d9565b6106d9565b906107af565b90929493916108588690565b84101561089b5761088861087a61088f92610821876107ca8c6107ca896101cd565b95610821866107ca866101cd565b9360010190565b908294929593956107f0565b919394926107f5565b50505050565b156108b157565b60405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606490fd5b61090b336001600160a01b03831614156108aa565b610916816002610449565b61093961093361092e6001546001600160a01b031690565b610440565b91610440565b907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127861096460405190565b600090a356fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630c657eb01461012b5780631fe543e31461012657806336e51f7214610121578063590e1ae31461011c57806359cd33271461011757806374b0a7891461011257806376fca03d1461010d57806379ba50971461010857806380cfa527146101035780638bd16114146100fe5780638da5cb5b146100f95780638ea98117146100f45780639eccacf6146100ef578063a5ef362a146100ea578063efbe1c1c146100e5578063f2fde38b146100e05763fea52f100361000e576106a2565b61066c565b610654565b61062d565b6105c8565b6105a4565b61057d565b610552565b610523565b6104e9565b6104c2565b610396565b61037f565b6102ca565b61029e565b61025d565b6101b4565b600091031261013b57565b600080fd5b610155916008021c5b6001600160a01b031690565b90565b906101559154610140565b61015560006005610158565b61015590610149906001600160a01b031682565b6101559061016f565b61015590610183565b61019e9061018c565b9052565b6020810192916101b29190610195565b565b3461013b576101c4366004610130565b6101db6101cf610163565b604051918291826101a2565b0390f35b805b0361013b57565b905035906101b2826101df565b909182601f8301121561013b578135916001600160401b03831161013b57602001926020830284011161013b57565b91909160408184031261013b5761023b83826101e8565b9260208201356001600160401b03811161013b5761025992016101f5565b9091565b3461013b57610276610270366004610224565b916106eb565b604051005b919060408382031261013b5761015590602061029782866101e8565b94016101e8565b3461013b576101db6102ba6102b436600461027b565b9061077f565b6040519182918290815260200190565b3461013b576102da366004610130565b610276610cc0565b6101e181610149565b905035906101b2826102e2565b60ff81166101e1565b905035906101b2826102f8565b919061032083011161013b57565b8015156101e1565b905035906101b28261031c565b91906103a08382031261013b5761034881846101e8565b9261035682602083016102eb565b926101556103678460408501610301565b93610380610378826060870161030e565b9401610324565b61027661038d366004610331565b939290926112f6565b3461013b576103a6366004610130565b6102766113aa565b9060208282031261013b57610155916102eb565b61019e90610149565b0190565b6103df6103db60199390565b9190565b6000915b8383106103f05750505050565b61040c61040560019284511515815260200190565b9260200190565b920191906103e3565b906107006101006101b293610432600082015160008601906103c2565b61044160208201516020860152565b61045060408201516040860152565b6060818101516001600160401b0316908501526080818101516001600160401b03169085015260a08181015160ff169085015261049560c082015160c08601906103cf565b6104a860e08201516103e08601906103cf565b01511515910152565b610720810192916101b29190610415565b3461013b576101db6104dd6104d83660046103ae565b611c60565b604051918291826104b1565b3461013b576104f9366004610130565b610276611cc1565b610155916008021c81565b906101559154610501565b6101556000600461050c565b3461013b57610533366004610130565b6101db6102ba610517565b9060208282031261013b57610155916101e8565b3461013b576101db6102ba61056836600461053e565b611d8e565b6020810192916101b291906103c2565b3461013b5761058d366004610130565b6101db610598611dfd565b6040519182918261056d565b3461013b576102766105b73660046103ae565b611f13565b61015560006003610158565b3461013b576105d8366004610130565b6101db6101cf6105bc565b6105ef6103db60189390565b6000915b8383106106005750505050565b6106136104056001928451815260200190565b920191906105f3565b610300810192916101b291906105e3565b3461013b5761063d366004610130565b6101db610648611f38565b6040519182918261061c565b3461013b57610664366004610130565b610276612197565b3461013b5761027661067f3660046103ae565b6121b4565b91906103408382031261013b5761015590610320610378828661030e565b6102766106b0366004610684565b9061243f565b61015590610149565b61015590546106b6565b9160206101b29294936106e4604082019660008301906103c2565b01906103c2565b91906107076107026106fd60036106bf565b61018c565b610149565b61071033610149565b0361071e576101b2926128ad565b60006107446107306106fd60036106bf565b63073e64fd60e21b835233600484016106c9565b036000fd5b6101556101556101559290565b9061076090610749565b600052602052604060002090565b6101559081565b610155905461076e565b6101559161079a61079f92610792600090565b50600b610756565b610756565b610775565b6107ac612e15565b6107b4610b57565b6101b2612e55565b906107609061018c565b6101559060801c5b60ff1690565b61015590546107c6565b6107ce6101556101559290565b156107f257565b60405162461bcd60e51b815260206004820152600b60248201526a4e6f7420706c6179696e6760a81b604482015280606481015b0390fd5b1561083157565b60405162461bcd60e51b815260206004820152601760248201527f4e6f742077616974696e672056524620726571756573740000000000000000006044820152606490fd5b610155905b6001600160401b031690565b6101559054610876565b61087b6101556101559290565b6101556103e8610891565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03908116911601906001600160401b0382116108de57565b6108a9565b610155610155610155926001600160401b031690565b1561090057565b60405162461bcd60e51b8152602060048201526009602482015268546f6f206561726c7960b81b6044820152606490fd5b6101496101556101559290565b61015590610931565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761097e57604052565b610947565b906101b261099060405190565b928361095d565b6001600160401b03811161097e57602090601f01601f19160190565b906109c56109c083610997565b610983565b918252565b3d156109e4576109d93d6109b3565b903d6000602084013e565b606090565b156109f057565b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b9081526040810192916101b2916020906106e4565b9160001960089290920291821b911b610a55565b921b90565b9181191691161790565b9190610a70610155610a7893610749565b908354610a3c565b9055565b6101b291600091610a5f565b818110610a93575050565b80610aa16000600193610a7c565b01610a88565b9190610ab2565b9290565b918083029281840414901517156108de57565b6101b2906001810190610a88565b634e487b7160e01b600052600060045260246000fd5b90600003610afa576101b290610ac5565b610ad3565b600080825590600690610b158360018301610a7c565b610b228360028301610a7c565b826003820155610b358360048301610ae9565b610b428360058301610ae9565b0155565b90600003610afa576101b290610aff565b6101b2610b9c610ca26009610c016001610b7461015533856107bc565b610bfb610bea610be0610bd260038501610baa610b90826107d4565b610ba360009d8e6107de565b9160ff1690565b14156107eb565b610bcd8b610bc66103db610bc060028b01610775565b92610749565b141561082a565b610887565b610bda61089e565b906108bf565b610bda600a610891565b610bf443916108e3565b11156108f9565b01610775565b7f9177b7a6097b17a0f6566e1246faed203766b45045bc76865977cd251c658cf0610c3685610c3033866107bc565b016106bf565b610c426107028761093e565b610c4b82610149565b03610ca757610c798680610c616106fd3361018c565b60405160009188905af1610c736109ca565b506109e9565b610c823361018c565b92610c98610c8f60405190565b92839283610a27565b0390a233906107bc565b610b46565b610cbb83610cb48361018c565b3390612ea8565b610c79565b6101b26107a4565b906107b494939291610cd8612e15565b611109565b15610ce457565b60405162461bcd60e51b815260206004820152602160248201527f6e756d4d696e6573206d757374206265206265747765656e203820616e6420316044820152601b60f91b6064820152608490fd5b15610d3a57565b60405162461bcd60e51b815260206004820152601360248201527215d85a5d1a5b99c8159491881c995c5d595cdd606a1b6044820152606490fd5b15610d7c57565b60405162461bcd60e51b815260206004820152600f60248201526e416c726561647920706c6179696e6760881b6044820152606490fd5b60ff1660ff81146108de5760010190565b6101556101556101559260ff1690565b634e487b7160e01b600052603260045260246000fd5b906019811015610dfb576020020190565b610dd4565b356101558161031c565b63ffffffff1663ffffffff81146108de5760010190565b9061076090610dc4565b610e386101556101559290565b63ffffffff1690565b6101556101556101559263ffffffff1690565b15610e5b57565b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1bc81c995d99585b607a1b6044820152606490fd5b906001600160a01b0390610a55565b90610eb3610155610a789261018c565b8254610e94565b9060ff60801b9060801b610a55565b6107ce6101556101559260ff1690565b90610ee9610155610a7892610ec9565b8254610eba565b9060001990610a55565b90610f0a610155610a7892610749565b8254610ef0565b9060ff90610a55565b90610f2a610155610a7892151590565b8254610f11565b818110610f3c575050565b80610f4a6000600193610a7c565b01610f31565b90610f6390600019906020036008021c90565b8154169055565b919091828210610f7957505050565b6101b2926020601f909101049060016020610f98601f86018290049390565b92830194060260008111610faf575b500190610f31565b610fbc9060018503610f50565b38610fa7565b9068010000000000000000811161097e576101b291601990610f6a565b610155916008021c6107ce565b91906008610a55910291610a5060ff841b90565b90601990610aae611015916101558486610fc2565b602082049160005b83811061108157506020830290036000811161103a575b50505050565b9260009360005b81811061105657505050015538808080611034565b909194602061107760019261106d6101558a610e00565b9085850290610fec565b9601929101611041565b6000805b6020811061109a57508382015560010161101d565b959060206110ba6001926110b061015586610e00565b908a850290610fec565b92019601611085565b906101b291611000565b906001600160401b0390610a55565b61087b610155610155926001600160401b031690565b90611102610155610a78926110dc565b82546110cd565b9193339391600160ff871661111d826107de565b1115806112db575b61112e90610cdd565b600961113f6002610bfb89846107bc565b916111586000936111526103db86610749565b14610d33565b611182611170600361116a8b866107bc565b016107d4565b61117c610b9c866107de565b14610d75565b6000908061118f856107de565b905b611282575b50506111a661079f8a600c610e21565b6111af84610e2b565b63ffffffff8316148015611271575b156111c890610e54565b6111d18a610dc4565b6111dc91868a612f5a565b6111e68785613124565b6111ef906132e4565b96806111fc89600a610756565b9061120691610ea3565b61120f916107bc565b94600386019761121f9089610ed9565b61122c9060018701610efa565b84019061123891610ea3565b6112459060068401610f1a565b61125290600583016110c3565b6002019061125f91610efa565b61126843610891565b6101b2916110f2565b508061127c83610e41565b116111be565b601961128d82610dc4565b10156112d6576112ad6112a86112a283610dc4565b8a610dea565b610e00565b6112c1575b6112bb90610db3565b81611191565b916112ce6112bb91610e0a565b9290506112b2565b611196565b5061112e6112e960186107de565b60ff891611159050611125565b906101b294939291610cc8565b61130b612e15565b6107b4611316613435565b6101b261135c565b1561132557565b60405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b6101b260008061136c6004610775565b61137f61137883610749565b6004610efa565b61138b6106fd3361018c565b9061139560405190565b90818003925af16113a46109ca565b5061131e565b6101b2611303565b610155610120610983565b6001600160401b03811161097e5760200290565b6109c0610155916113bd565b369037565b906101b26113f86113f2846113d1565b936113bd565b836113dd565b61015560196113e2565b6114106113b2565b9060008252602080808080808080808a01600081520160008152016000815201600081520160008152016114426113fe565b81520161144d6113fe565b8152016000905250565b610155611408565b9061019e90610149565b6101559060401c61087b565b6101559054611469565b610155906107ce565b6101559060081c6107ce565b6101559060101c6107ce565b6101559060181c6107ce565b6101559060201c6107ce565b6101559060281c6107ce565b6101559060301c6107ce565b6101559060381c6107ce565b6101559060401c6107ce565b6101559060481c6107ce565b6101559060501c6107ce565b6101559060581c6107ce565b6101559060601c6107ce565b6101559060681c6107ce565b6101559060701c6107ce565b6101559060781c6107ce565b6101559060881c6107ce565b6101559060901c6107ce565b6101559060981c6107ce565b6101559060a01c6107ce565b6101559060a81c6107ce565b6101559060b01c6107ce565b6101559060b81c6107ce565b6101559060c01c6107ce565b6101559060c81c6107ce565b6101559060d01c6107ce565b6101559060d81c6107ce565b6101559060e01c6107ce565b6101559060e81c6107ce565b6101559060f01c6107ce565b6101559060f81c6107ce565b906115fd610aae60199290565b6000915b505b546118de565b15159052565b505050505050565b600160208461160f6000959661160986611590565b600160208461164083959661160986611584565b0193019150611617565b600160208461165e83959661160986611578565b019301915061162c565b600160208461167c8395966116098661156c565b019301915061164a565b600160208461169a83959661160986611560565b0193019150611668565b60016020846116b883959661160986611554565b0193019150611686565b60016020846116d683959661160986611548565b01930191506116a4565b60016020846116f48395966116098661153c565b01930191506116c2565b6001602084611712839596611609866107c6565b01930191506116e0565b600160208461173083959661160986611530565b01930191506116fe565b600160208461174e83959661160986611524565b019301915061171c565b600160208461176c83959661160986611518565b019301915061173a565b600160208461178a8395966116098661150c565b0193019150611758565b60016020846117a883959661160986611500565b0193019150611776565b60016020846117c6839596611609866114f4565b0193019150611794565b60016020846117e4839596611609866114e8565b01930191506117b2565b6001602084611802839596611609866114dc565b01930191506117d0565b6001602084611820839596611609866114d0565b01930191506117ee565b600160208461183e839596611609866114c4565b019301915061180c565b600160208461185c839596611609866114b8565b019301915061182a565b600160208461187a839596611609866114ac565b0193019150611848565b6001602084611898839596611609866114a0565b0193019150611866565b60016020846118b683959661160986611494565b0193019150611884565b60016020846118d483959661160986611488565b01930191506118a2565b60016020846118f28395966116098661147f565b01930191506118c0565b601f830181111561160157919092835490806119178361147f565b151590526020018061192883611488565b151590526020018061193983611494565b151590526020018061194a836114a0565b151590526020018061195b836114ac565b151590526020018061196c836114b8565b151590526020018061197d836114c4565b151590526020018061198e836114d0565b151590526020018061199f836114dc565b15159052602001806119b0836114e8565b15159052602001806119c1836114f4565b15159052602001806119d283611500565b15159052602001806119e38361150c565b15159052602001806119f483611518565b1515905260200180611a0583611524565b1515905260200180611a1683611530565b1515905260200180611a27836107c6565b1515905260200180611a388361153c565b1515905260200180611a4983611548565b1515905260200180611a5a83611554565b1515905260200180611a6b83611560565b1515905260200180611a7c8361156c565b1515905260200180611a8d83611578565b1515905260200180611a9e83611584565b1515905260200180611aaf83611590565b1515905260200180611ac08361159c565b1515905260200180611ad1836115a8565b1515905260200180611ae2836115b4565b1515905260200180611af3836115c0565b1515905260200180611b04836115cc565b1515905260200180611b15836115d8565b15159052602001611b2681926115e4565b151590526020019260010190602001916118fc565b906103cb81610320936115f0565b906101b2611b6392611b5a60405190565b93848092611b3b565b038361095d565b610155905461147f565b906101b2611c4d6006611b856113b2565b94611b98611b92826106bf565b8761145f565b611bae611ba760018301610775565b6020880152565b611bc4611bbd60028301610775565b6040880152565b611be3611bd360038301610887565b6001600160401b03166060880152565b611c02611bf260038301611475565b6001600160401b03166080880152565b611c1b611c11600383016107d4565b60ff1660a0880152565b611c31611c2a60048301611b49565b60c0880152565b611c47611c4060058301611b49565b60e0880152565b01611b6a565b1515610100840152565b61015590611b74565b611c7761015591611c6f611457565b5060096107bc565b611c57565b15611c8357565b60405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606490fd5b611ce0611cd161070260026106bf565b611cda33610149565b14611c7c565b611d0c611ced60016106bf565b611cf8336001610ea3565b6106fd611d05600061093e565b6002610ea3565b611d153361018c565b907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0611d4060405190565b600090a3565b6101559060101c610e38565b6101559054611d46565b919082018092116108de57565b634e487b7160e01b600052601260045260246000fd5b8115611d89570490565b611d69565b611ded61015591611d9d600090565b50611dd7611ddd611db06201c138610749565b92611dd7611dbe603c610749565b94611dd1611dcc6007611d52565b610e41565b90611d5c565b90610aa7565b91611de86064610749565b611d5c565b611df76064610749565b90611d7f565b61015560016106bf565b6040906106e46101b29496959396611e27606084019860008501906103c2565b60208301906103c2565b611e3c610702611dfd565b611e4533610149565b141580611e89575b611e5a576101b290611eaa565b6000610744611e67611dfd565b611e746106fd60036106bf565b63061db9c160e01b8452903360048501611e07565b50611e9a6107026106fd60036106bf565b611ea333610149565b1415611e4d565b6000611eb86107028261093e565b611ec183610149565b14611f045750611eff81610598611ef87fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69461018c565b6003610ea3565b0390a1565b63d92e233d60e01b8152600490fd5b6101b290611e31565b61015560186113e2565b9060185b811015610dfb576020020190565b611f40611f1c565b9081611f4c6000610749565b611f566018610749565b811015611f9d57611f9890611f92611f8561079f600c611f7f611f796001610749565b86611d5c565b90610756565b611f8f8388611f26565b52565b60010190565b611f4c565b509150565b611faa612e15565b6107b4612035565b919080830392600090911280158285131691841216176108de57565b611fdb6101556101559290565b62ffffff1690565b6101556101556101559262ffffff1690565b909594926101b29461202a6120319261202060809661201960a088019c6000890152565b6020870152565b60408501906103c2565b6060830152565b0152565b6101b26120466101553360096107bc565b60038101907f95ec41d4452e9b3bfaadf3f23f1dd827be4e0f1c50620625651cdfa9a7555c146120b36120ae61207b856107d4565b9461208e600096610ba3610b9c896107de565b6120a961209d60028701610775565b6111526103db89610749565b611475565b6108e3565b9160018101926121776120c585610775565b9161215a6120ec886120e56120da8786610aa7565b611df7612710610749565b96016106bf565b966120f78589613490565b61210288873361352c565b61212561210e87610749565b61211f61211a84610775565b610749565b90611fb2565b6121316103db8b610749565b13156121855761215361214d6121486103e8611fce565b611fe3565b91610775565b8833613609565b906121643361018c565b9661216e60405190565b95869586611ff5565b0390a2610ca23360096107bc565b61215361214d612148620186a0611fce565b6101b2611fa2565b6101b2906121ab613435565b6101b29061381b565b6101b29061219f565b906107b4916121ca612e15565b612258565b9091906019831015610dfb5760206121e660019290565b8185040193060290565b906101559154610fdf565b1561220257565b60405162461bcd60e51b8152602060048201526015602482015274151a5b1948185b1c9958591e481c995d99585b1959605a1b6044820152606490fd5b63ffffffff9081169116019063ffffffff82116108de57565b9190916122696101553360096107bc565b6003810192612277846107d4565b9361228a600095610ba3610b9c886107de565b600283019361229b61209d86610775565b6000948597876122aa816107de565b60196122b582610dc4565b101561240e576122d06112a86122ca83610dc4565b87610dea565b612313575b6122eb6122e58260048b016121cf565b906121f0565b6122fe575b6122f990610db3565b6122aa565b9761230b6122f991610e0a565b9890506122f0565b996123246122e58c60048b016121cf565b6123375761233190610e0a565b996122d5565b6123c394969a506101b2995061239e6123bd9161239061238b899c600697989a6123756123c89e9861237061236b60011590565b6121fb565b610e2b565b63ffffffff8616149182156123d7575b50501590565b610e54565b612399346138c6565b6132e4565b966123b46123ad89600a610756565b3390610ea3565b600583016110c3565b01610f1a565b610efa565b6123d143610891565b906110f2565b61240691925061015561079f6123f96123f3612400948a61223f565b956107d4565b600c610e21565b91610e41565b118d38612385565b50956123bd61239e6123c395979b61239061238b899c600697989a6101b29f6123c89e61237061236b612375931590565b906101b2916121bd565b916001600160a01b0360089290920291821b911b610a55565b9190612473610155610a789361018c565b908354612449565b6101b291600091612462565b919082039182116108de57565b91906124a5610155610a7893151590565b908354610fec565b9190811015610dfb576020020190565b35610155816101df565b906019611f2a565b6124db9060ff16610b9c565b019060ff82116108de57565b61019e90610749565b6124fc6103db60199390565b6000915b83831061250d5750505050565b61252261040560019284511515815260200190565b92019190612500565b90612538610aae60199290565b60009150611603565b601f8301811115611601579190928354908061255c8361147f565b151590526020018061256d83611488565b151590526020018061257e83611494565b151590526020018061258f836114a0565b15159052602001806125a0836114ac565b15159052602001806125b1836114b8565b15159052602001806125c2836114c4565b15159052602001806125d3836114d0565b15159052602001806125e4836114dc565b15159052602001806125f5836114e8565b1515905260200180612606836114f4565b151590526020018061261783611500565b15159052602001806126288361150c565b151590526020018061263983611518565b151590526020018061264a83611524565b151590526020018061265b83611530565b151590526020018061266c836107c6565b151590526020018061267d8361153c565b151590526020018061268e83611548565b151590526020018061269f83611554565b15159052602001806126b083611560565b15159052602001806126c18361156c565b15159052602001806126d283611578565b15159052602001806126e383611584565b15159052602001806126f483611590565b15159052602001806127058361159c565b1515905260200180612716836115a8565b1515905260200180612727836115b4565b1515905260200180612738836115c0565b1515905260200180612749836115cc565b151590526020018061275a836115d8565b1515905260200161276b81926115e4565b15159052602001926001019060200191612541565b9081526106e081019796959094909390929091602086016127a0916124e7565b604085016127ad916103c2565b606084016127ba916124f0565b61038083016127c89161252b565b6106a082016127d6916124e7565b6106c00152565b9081526106e081019796959094909390929091602086015260408501612802916103c2565b6060840161280f916124f0565b610380830161281d9161252b565b6106a08201526127d6565b906fffffffffffffffff00000000000000009060401b610a55565b90612853610155610a78926110dc565b8254612828565b9081526106e08101979695909490939092909160208601526040850161287f916103c2565b6060840161288c916124f0565b610380830161289a9161252b565b6106a08201526106c0016101b2916124e7565b9091926128c36128be83600a610756565b6106bf565b916000906128d36107028361093e565b6128dc85610149565b14612e0757816128f06128f592600a610756565b61247b565b60099361290561015585876107bc565b9060009461291284610e2b565b60048401601961292183610e41565b1015612961576122e582612934926121cf565b612947575b61294290610e0a565b612912565b9561295961294291611dd16001610749565b969050612939565b50509295919490859197949760038301918861298461297f856107d4565b610dc4565b9161298d6113fe565b986001968792838c81968d8d6129a1600090565b966129ab84610e2b565b955b612c5e575b5050971597506129c59650505050505050565b612b59576129db9161079a61079f92600b610756565b926129e860068801611b6a565b6129f58915155b91151590565b03612a9d5750917f452848572a392f59c79a54a328cf0b86e82eae605cb9ab28a3e5e5368f7ce2dd959691612a36612a9894612a3084610891565b90612843565b612a4b612a4284610749565b60028a01610efa565b870193612a6c6120da612a66612a6088610775565b97610775565b84610aa7565b95612a856004612a7d868c016106bf565b9a019261018c565b98612a8f60405190565b9788978861285a565b0390a2565b927f2c4b3bfad3ec9e6453de286795f790bd6bbfc4001caa3102c98862298fcc8daf9150610ca295612b51869289956101b29b9a0190612adc82610775565b936004612aea8d8a016106bf565b98612b338a612afc6120da8a88610aa7565b809a612b2e612b28612b22612b126103e8610749565b612b1b8d610775565b8786613609565b9a610775565b84613490565b61352c565b0190612b3e8b61018c565b98612b4860405190565b978897886127dd565b0390a26107bc565b50505093859485610ca2956101b298840190612b8a612b77836106bf565b94860194612b8486610775565b90613490565b612bb2612b99620186a0610749565b612ba2846106bf565b612bab87610775565b908a613609565b93612bbf60068701611b6a565b612bca8515156129ef565b03612c29579383612b51926004612c0a612c047f452848572a392f59c79a54a328cf0b86e82eae605cb9ab28a3e5e5368f7ce2dd99610775565b966106bf565b980190612c168b61018c565b98612c2060405190565b97889788612780565b9383612b51926004612c0a612c047f2c4b3bfad3ec9e6453de286795f790bd6bbfc4001caa3102c98862298fcc8daf99610775565b60058101908d8d6019612c708a610e41565b1015612dfe57908c9291612c8388610749565b8114918215612dde575b5050612d9e5750506122e586612ca2926121cf565b612cc0575b50505050612cb490610e0a565b8c8f8f8d8f91896129ad565b612cde856004612cd8999e9799612ce4958d956107bc565b016121cf565b90612494565b612d1d8a8a612d17612d12612d0b612d0589612d006019610749565b612487565b94610dc4565b8b8a6124ad565b6124bd565b91613909565b612d53575b5050612d47612d37612cb492611dd188610749565b98612d41876107de565b906124cf565b9290508c8f8d8d612ca7565b612cb4929750612d3790612d9288612d8b612d7b612d47969d612d7584610749565b90612487565b9c612d858a610e41565b906124c7565b9015159052565b97925050508c8f612d22565b925092508594508493506122e5612cb496612db8926121cf565b612dc5575b505050610e0a565b612dd5926004612cde92016121cf565b808f8790612dbd565b612df5919250610aae6103db91612d006019610749565b148f8f90612c8d565b505090506129b2565b5080fd5b6101556002610749565b612e1f6000610775565b612e27612e0b565b908114612e39576101b2906000610efa565b633ee5aeb560e01b6000908152600490fd5b6101556001610749565b6101b2612e60612e4b565b6000610efa565b612e80612e7a6101559263ffffffff1690565b60e01b90565b6001600160e01b03191690565b9160206101b2929493612031604082019660008301906103c2565b612eeb600492612edc6101b295612ec263a9059cbb612e67565b92612ecc60405190565b9687946020860190815201612e8d565b6020820181038252038361095d565b613955565b905051906101b2826101df565b9060208282031261013b5761015591612ef0565b6040513d6000823e3d90fd5b15612f2457565b60405162461bcd60e51b815260206004820152600e60248201526d2a37b79036b0b73c903bb0b3b2b960911b6044820152606490fd5b9190612f69610702600061093e565b612f7282610149565b03612fc857506103db6101556101b294611df7612fb661079f612fc19661079a612fae612fa26106fd60056106bf565b315b611dd7606e610749565b95600b610756565b612d75612710610749565b1115612f1d565b6020612fd96106fd61300a9361018c565b612fe66106fd60056106bf565b90612ff060405190565b938492839182916370a0823160e01b83526004830161056d565b03915afa908115613071576101b294611df7612fb661079f612fc19661079a612fae6103db9861015598600091613042575b50612fa4565b613064915060203d60201161306a575b61305c818361095d565b810190612efd565b3861303c565b503d613052565b612f11565b905051906101b28261031c565b9060208282031261013b5761015591613076565b1561309e57565b60405162461bcd60e51b8152602060048201526012602482015271151bdad95b881b9bdd08185c1c1c9bdd995960721b6044820152606490fd5b156130df57565b60405162461bcd60e51b815260206004820152601c60248201527f5761676572206d7573742062652067726561746572207468616e2030000000006044820152606490fd5b906131326106fd60056106bf565b61313b3061018c565b90602061314760405190565b918290632ff5fe7360e21b825281806131648988600484016106c9565b03915afa801561307157613180916000916131dc575b50613097565b61319561318d6000610749565b8314156130d8565b6131a2610702600061093e565b6131ab84610149565b036131c557506101b291506131c09034612487565b6138c6565b6131d56101b2936106fd346138c6565b3390613a00565b6131fe915060203d602011613204575b6131f6818361095d565b810190613083565b3861317a565b503d6131ec565b6101556020610983565b61015560c0610983565b60005b8381106132325750506000910152565b8181015183820152602001613222565b61326361326c6020936103cb93613257815190565b80835293849260200190565b9586910161321f565b601f01601f191690565b805182526101559160c081019160a09061329560208201516020850152565b60408181015161ffff169084015260608181015163ffffffff169084015260808181015163ffffffff169084015201519060a0818403910152613242565b602080825261015592910190613276565b60206133c16000926132f4600090565b506133026106fd60036106bf565b906133a36133106006610775565b9161339c61331e6008610775565b9161338f61332f60075461ffff1690565b61338261333c6007611d52565b9161337761336061334b61320b565b8f600161335b9183019015159052565b613a5f565b9761337161336c613215565b9b8c52565b8d8b0152565b61ffff166040890152565b63ffffffff166060870152565b63ffffffff166080850152565b60a0830152565b6040519485938492839190634d8e1c2f60e11b8352600483016132d3565b03925af1908115613071576000916133d7575090565b610155915060203d60201161306a5761305c818361095d565b156133f757565b60405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606490fd5b6101b261344561070260016106bf565b61344e33610149565b146133f0565b1561345b57565b60405162461bcd60e51b815260206004820152600d60248201526c1c99599d5b990819985a5b1959609a1b6044820152606490fd5b61349d610702600061093e565b6134a682610149565b036134e557506000806101b2926134c66106fd6106fd6106fd60056106bf565b906134d060405190565b90818003925af16134df6109ca565b50613454565b906134f26101b29261018c565b6134ff6106fd60056106bf565b90612ea8565b6040906106e46101b29496959396613525606084019860008501906103c2565b6020830152565b909161353b6106fd60056106bf565b803b1561013b5761356d936000809461355360405190565b968795869485936336012f6160e11b855260048501613505565b03925af180156130715761357e5750565b6101b29060005b61358f818361095d565b810190610130565b503d613585565b69ffffffffffffffffffff81166101e1565b905051906101b28261359e565b919060a08382031261013b576135d381846135b0565b926135e18260208301612ef0565b926101556135f28460408501612ef0565b9360806136028260608701612ef0565b94016135b0565b909260009261361784610749565b946136246107028661093e565b61362d82610149565b1461373e575b6136596136537355d398326f99059ff775485246999027b3197955610149565b91610149565b14613716575b61367e6136726136929361368593610aa7565b611df7620186a0610749565b9485610aa7565b611df76305f5e100610749565b9261369f6103db84610749565b116136a957505090565b6136b66106fd60056106bf565b803b1561013b578383916136ed93836136ce60405190565b8096819582946136e263f5acc48d60e01b90565b845260048401612e8d565b03925af180156130715761370057505090565b8161015592903d106135975761358f818361095d565b935061368561367e613672613692936137326305f5e100610749565b9793509350505061365f565b94506137606106fd730567f2323251f0aab15c8dfb1967e4e8a7d42aee61018c565b60a061376b60405190565b633fabe5a360e21b815291829060049082905afa8015613071576137979160009161379d575b50610749565b94613633565b6137bf915060a03d60a0116137c8575b6137b7818361095d565b8101906135bd565b50505090613791565b503d6137ad565b156137d657565b60405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606490fd5b61383761382733610149565b61383083610149565b14156137cf565b613842816002610ea3565b6138586138526106fd60016106bf565b9161018c565b907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278611d4060405190565b1561388a57565b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207672662066656560601b6044820152606490fd5b6113786101b2916138f56138f06138dc3a611d8e565b8093612d006138e88390565b821015613883565b613aa9565b611de86004610775565b8115611d89570690565b610aae613951929361394b61394561393c6103db95613926600090565b5061393761271099611dd78b610749565b611d7f565b612d0088610749565b95610749565b906138ff565b1190565b906000602091613963600090565b50828151910182855af115612f11573d906000516000926139866103db85610749565b036139cc57506139958161018c565b3b6139a26103db84610749565b145b6139ac575050565b6108266139b9839261018c565b635274afe760e01b83526004830161056d565b6139d96103db6001610749565b14156139a4565b6040906120316101b29496959396611e27606084019860008501906103c2565b90612eeb90612edc6101b295600495613a1c6323b872dd612e67565b93613a2660405190565b97889560208701908152016139e0565b6101557f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa612e80565b610155600491613a6d606090565b50613a9a613a79613a36565b91613a8360405190565b948593602085019081520190511515815260200190565b6020820181038252038261095d565b613ab36000610749565b8111613abc5750565b6000806101b2926134c66106fd3361018c56fea264697066735822122046b704c07c4b033e74fb6c9b0379abe2f2a43b56f3049e29274848379003a86464736f6c634300081c0033000000000000000000000000d691f04bc0c9a24edb78af9e005cf85768f694c90000000000000000000000001ea54114aee90f1ab6d05418d33917143286fe58130dba50ad435d4ecc214aad0d5820474137bd68e7e77724144f27c3c377d3d4a890ed8a5f7178ac7d6616acb6b65a346d7a1cae8aab2054240398b3a2fcb710000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000f4240