37 txs
38 calls
constructor
constructor(uint96 start_epoch, uint96 end_epoch, uint256 reward_amount, address _modulex_addr, address _rewards_token)
functions
CLAIM_PERIOD
viewfunction CLAIM_PERIOD() view returns (uint96)
CREDI
viewfunction CREDI() view returns (address)
duration_multiplier
viewfunction duration_multiplier(uint96) view returns (uint32)
getStake
viewfunction getStake(address owner, uint256 stake_id) view returns (uint256 stake_amount, uint256 modulex_stake_id, uint96 maturity, uint256 multiplier)
getUserInfo
viewfunction getUserInfo(address owner) view returns (uint256 xpoints, uint256 xtier, uint256 reward_amount, uint256 reward_rate_cumsum, uint256 stakes_count)
getUserRewards
viewfunction getUserRewards(address owner) view returns (uint256)
MODULEX
viewfunction MODULEX() view returns (address)
multiplier_BASE
viewfunction multiplier_BASE() view returns (uint32)
owner
viewfunction owner() view returns (address)
pool
viewfunction pool() view returns (address staking_token, uint96 start_epoch, address rewards_token, uint96 end_epoch, uint256 effective_xpoints, uint256 reward_rate, uint256 reward_rate_cumsum, uint96 last_update_epoch)
SCALE_FACTOR
viewfunction SCALE_FACTOR() view returns (uint256)
SWAP_LIBRARY
viewfunction SWAP_LIBRARY() view returns (address)
addRewards
nonpayablefunction addRewards(uint256 amount)
claimRewards
nonpayablefunction claimRewards(bytes options)
extendRewards
nonpayablefunction extendRewards(uint96 duration, uint256 reward_amount, uint256 transfer_reward_amount)
renounceOwnership
nonpayablefunction renounceOwnership()
restake
nonpayablefunction restake(uint256 stake_id, uint96 lock_period, uint256 amount)
setDurationMultiplier
nonpayablefunction setDurationMultiplier(uint96 duration, uint32 multiplier)
setSwapLibraryAddress
nonpayablefunction setSwapLibraryAddress(address _SWAP_LIBRARY)
setXTierMultipliers
nonpayablefunction setXTierMultipliers(uint256[] _thresholds, uint256[] _mulitpliers)
stake
nonpayablefunction stake(uint96 lock_period, uint256 amount)
stakeCREDI
nonpayablefunction stakeCREDI(uint96 lock_period, uint256 CREDI_amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(uint256 stake_id, bool claim_rewards, bytes options)
unstakePerpetual
nonpayablefunction unstakePerpetual(uint256 amount, bool claim_rewards, bytes options)
withdrawRewards
nonpayablefunction withdrawRewards(address to, uint256 amount)
events
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PoolCreated
event PoolCreated(address staking_token, address rewards_token, uint96 start_epoch, uint256 scale_factor)
PoolUpdated
event PoolUpdated(uint256 effective_xpoints, uint256 reward_rate, uint256 reward_rate_cumsum, uint96 last_update_epoch, uint96 end_epoch)
RewardAdded
event RewardAdded(uint256 amount)
RewardPaid
event RewardPaid(address indexed user, uint256 amount)
RewardWithdrawn
event RewardWithdrawn(address indexed to, uint256 amount)
SetDurationMultiplier
event SetDurationMultiplier(uint96 duration, uint32 multiplier)
SetXTierMultipliers
event SetXTierMultipliers(uint256[] thresholds, uint256[] multipliers)
StakeUpdated
event StakeUpdated(uint256 stake_id, address indexed user, uint256 stake_amount, uint256 modulex_stake_id, uint96 maturity, uint96 lock_period)
StakeWithdrawn
event StakeWithdrawn(uint256 stake_id, address indexed user, uint256 amount)
UserUpdated
event UserUpdated(address indexed owner, uint256 xpoints, uint256 reward_amount, uint256 reward_rate_cumsum)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101406040525f60c090815269021e19e0c9bab240000060e05269054b40b1f852bda0000061010052690a968163f0a57b4000006101205261004590600290600461067d565b50604080516080810182526103e881526105dc60208201526107d091810191909152610bb8606082015261007d9060039060046106d1565b50600d80546001600160a01b0319169055348015610099575f5ffd5b50604051612eea380380612eea8339810160408190526100b891610755565b33806100de57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100e781610559565b50600180556001600160a01b03821660a081905260408051636a30a4d160e11b8152905163d46149a2916004808201926020929091908290030181865afa158015610134573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015891906107af565b6001600160a01b03166080525f805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec805463ffffffff19166103e81790556001600160601b0384166101ad4290565b6001600160601b0316106102295760405162461bcd60e51b815260206004820152603360248201527f50726f66697453686172653a456e642074696d65206d7573742062652067726560448201527f61746572207468616e2074696d655f6e6f77210000000000000000000000000060648201526084016100d5565b6102456001600160601b038616426001600160601b03166105a8565b9450836001600160601b0316856001600160601b0316106102c35760405162461bcd60e51b815260206004820152603260248201527f50726f66697453686172653a53746172742074696d65206d757374206265206c604482015271657373207468616e20656e642074696d652160701b60648201526084016100d5565b5f6102ce86866107dc565b6001600160601b03166102ea85683635c9adc5dea000006107fb565b6102f49190610812565b905060405180610100016040528060a0516001600160a01b0316637c2fdeb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610340573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061036491906107af565b6001600160a01b0390811682526001600160601b0389811660208085018290528784166040808701919091528b84166060808801919091525f608080890182905260a0808a018c905260c0808b019390935260e0998a019690965289518a860151908916600160a01b918916820281811760078190558d8801518e880151908d16908c1685028181176008558f8701516009559a8f0151600a55958e0151600b559c909b0151600c80546001600160601b031916918b1691909117905585519a8a16178a529590971617928701929092529190950490911690830152683635c9adc5dea00000928201929092527fdc04d80ebe596008505211bb5ef7b7b76945b378723c7fbc1dd952cd919394bb910160405180910390a1600954600a54600b54600c54600854604080519586526020860194909452848401929092526001600160601b039081166060850152600160a01b909104166080830152517fe111f67a87ace56a1496291914b8e0da23748ffddaa8bc98d0f4d4dfb51796a59181900360a00190a1604080515f81526103e860208201525f516020612eca5f395f51905f52910160405180910390a161052062278d006107d06105bc565b61052f6276a700610bb86105bc565b61053e62ed4e00610fa06105bc565b61054e6301da9c006117706105bc565b505050505050610831565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8282188284110282185b90505b92915050565b6105c461064f565b5f826001600160601b03161180156105f1575063ffffffff81166103e810806105f1575063ffffffff8116155b6105f9575f5ffd5b6001600160601b0382165f81815260046020908152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301525f516020612eca5f395f51905f52910160405180910390a15050565b5f546001600160a01b0316331461067b5760405163118cdaa760e01b81523360048201526024016100d5565b565b828054828255905f5260205f209081019282156106c1579160200282015b828111156106c157825182906001600160501b031690559160200191906001019061069b565b506106cd929150610710565b5090565b828054828255905f5260205f209081019282156106c1579160200282015b828111156106c1578251829061ffff169055916020019190600101906106ef565b5b808211156106cd575f8155600101610711565b80516001600160601b038116811461073a575f5ffd5b919050565b80516001600160a01b038116811461073a575f5ffd5b5f5f5f5f5f60a08688031215610769575f5ffd5b61077286610724565b945061078060208701610724565b9350604086015192506107956060870161073f565b91506107a36080870161073f565b90509295509295909350565b5f602082840312156107bf575f5ffd5b6105b38261073f565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b0382811682821603908111156105b6576105b66107c8565b80820281158282048414176105b6576105b66107c8565b5f8261082c57634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a0516126556108755f395f81816103be01528181610b8601528181610c6a015261138b01525f81816102e101528181610b3f0152610bb501526126555ff3fe608060405234801561000f575f5ffd5b50600436106101a4575f3560e01c8063b1da1b2d116100e8578063cfd4766311610093578063da540bbf1161006e578063da540bbf146104a4578063e190febc146104ad578063f2fde38b146104c0578063fe89a82d146104d3575f5ffd5b8063cfd476631461043c578063d6ef7af01461047e578063d93c04a014610491575f5ffd5b8063c105635b116100c3578063c105635b14610406578063c96d663514610419578063ce4b5bbe1461042c575f5ffd5b8063b1da1b2d146103b9578063be28b8b3146103e0578063beceed39146103f3575f5ffd5b80637135cd6a116101535780638c7933301161012e5780638c793330146103705780638da5cb5b1461038357806398d183fc1461039357806399c1e891146103a6575f5ffd5b80637135cd6a1461031b578063715018a61461032e5780638af6e88014610336575f5ffd5b806321241dfe1161018357806321241dfe1461027f5780636386c1c7146102a15780636db08f25146102dc575f5ffd5b806272c744146101a8578063078b0fb7146101bd57806316f0115b146101e3575b5f5ffd5b6101bb6101b63660046121ad565b6104e6565b005b6101d06101cb366004612234565b61063a565b6040519081526020015b60405180910390f35b600754600854600954600a54600b54600c5461022a956001600160a01b03808216966001600160601b03600160a01b93849004811697928216969390910481169491931688565b604080516001600160a01b03998a1681526001600160601b03988916602082015298909616958801959095529285166060870152608086019190915260a085015260c08401521660e0820152610100016101da565b6102896234bc0081565b6040516001600160601b0390911681526020016101da565b6102b46102af366004612234565b61074f565b604080519586526020860194909452928401919091526060830152608082015260a0016101da565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101da565b6101bb610329366004612263565b61079c565b6101bb61092e565b61035b610344366004612293565b60046020525f908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101da565b6101bb61037e3660046122ac565b610941565b5f546001600160a01b0316610303565b6101bb6103a1366004612234565b610afb565b6101bb6103b43660046122df565b610b32565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b600d54610303906001600160a01b031681565b6101bb610401366004612307565b610dc5565b6101bb610414366004612369565b610dd1565b6101bb6104273660046123b5565b610e6b565b6101d0683635c9adc5dea0000081565b61044f61044a3660046123f2565b610f11565b6040516101da949392919093845260208401929092526001600160601b03166040830152606082015260800190565b6101bb61048c3660046123f2565b610fe7565b6101bb61049f3660046122df565b6110fb565b61035b6103e881565b6101bb6104bb36600461240c565b61116e565b6101bb6104ce366004612234565b611193565b6101bb6104e1366004612369565b6111e6565b6104ee6114b7565b82811480156104fc57508015155b610504575f5ffd5b61053f8484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506114fc92505050565b805161055391600291602090910190612108565b5061058f8282808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506114fc92505050565b80516105a391600391602090910190612108565b5060025f815481106105b7576105b761244b565b905f5260205f2001545f1480156105f157506103e863ffffffff1660035f815481106105e5576105e561244b565b905f5260205f20015410155b6105f9575f5ffd5b7f36636bd3caf33bddbd656aadda2fc454e5093f7cec3de1405319ef0ef3aa6ba76002600360405161062c92919061249c565b60405180910390a150505050565b6001600160a01b0381165f908152600560205260408120600c54829061068a906001600160601b0316610685425b6008546001600160601b0391821691600160a01b90910416611511565b611525565b600b5460095491925090158015906106b05750600c546001600160601b03908116908316115b156106fe57600954600a54600c546106d1906001600160601b0316856124d4565b6001600160601b03166106e491906124f3565b6106ee919061250a565b600b546106fb9190612529565b90505b683635c9adc5dea00000836002015482610718919061253c565b845461072390611534565b61072d91906124f3565b610737919061250a565b83600101546107469190612529565b95945050505050565b6001600160a01b0381165f9081526005602052604081208054829182918291829161077b60028261158a565b60018301546002840154600390940154929a91995097509195509350915050565b6107a46114b7565b6107af5f5f5f6115e5565b6008544290600160a01b90046001600160601b03908116908216106107fd576001600160601b0384166107eb84683635c9adc5dea000006124f3565b6107f5919061250a565b600a55610861565b600a546008546001600160601b038087169291610823918591600160a01b9004166124d4565b6001600160601b031661083691906124f3565b61084985683635c9adc5dea000006124f3565b6108539190612529565b61085d919061250a565b600a555b600c80546bffffffffffffffffffffffff19166001600160601b03831617905561088b848261254f565b600880546001600160601b0392909216600160a01b026001600160a01b0390921691909117905581156108c1576108c182611833565b600954600a54600b54600c54600854604080519586526020860194909452928401919091526001600160601b039081166060840152600160a01b9091041660808201527fe111f67a87ace56a1496291914b8e0da23748ffddaa8bc98d0f4d4dfb51796a59060a00161062c565b6109366114b7565b61093f5f6118e6565b565b610949611942565b335f818152600560205260409020600301548490610968906001612529565b81106109bb5760405162461bcd60e51b815260206004820152601d60248201527f50726f66697453686172653a496e76616c6964205374616b652049442100000060448201526064015b60405180910390fd5b82156109d9576109d9336007546001600160a01b0316903086611985565b335f90815260066020908152604080832088845282528083206001600160601b0388168452600490925290912054600282015463ffffffff918216600160601b9091049091161115610a935760405162461bcd60e51b815260206004820152602360248201527f50726f66697453686172653a557365206c6f6e676572206c6f636b5f7065726960448201527f6f6421000000000000000000000000000000000000000000000000000000000060648201526084016109b2565b80545f90610aa19086612529565b9050610aaf33835489611a01565b865f03610add57335f9081526005602052604081206003018054909190610ad59061256e565b918290555096505b610ae93387838a611b2c565b50505050610af660018055565b505050565b610b036114b7565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610b3a611942565b610b6f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333084611985565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610bfb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1f9190612586565b506040517fd93c04a00000000000000000000000000000000000000000000000000000000081526001600160601b0383166004820152602481018290525f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d93c04a09060440160408051808303815f875af1158015610caf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd391906125a1565b915091505f846001600160601b03165f14610d1157335f9081526005602052604081206003018054909190610d079061256e565b9182905550610d13565b5f5b90505f8111610d8a5760405162461bcd60e51b815260206004820152602f60248201527f50726f66697453686172653a7374616b655f6964206d7573742062652067726560448201527f61746572207468616e207a65726f21000000000000000000000000000000000060648201526084016109b2565b335f8181526006602090815260408083208584529091529020600101849055610db590868484611b2c565b505050610dc160018055565b5050565b610dce81611833565b50565b610dd9611942565b5f8411610e285760405162461bcd60e51b815260206004820152601160248201527f43616e6e6f7420756e7374616b6520302100000000000000000000000000000060448201526064016109b2565b610e3f336007546001600160a01b03169086611d55565b610e4a33855f611a01565b8215610e5c57610e5c335b8383611d86565b610e6560018055565b50505050565b610e736114b7565b5f826001600160601b0316118015610ea0575063ffffffff81166103e81080610ea0575063ffffffff8116155b610ea8575f5ffd5b6001600160601b0382165f81815260046020908152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301527f0dfde28ba1cfae98db642e3246355850b37332d75f04945da4676e38ad045386910160405180910390a15050565b6001600160a01b0382165f9081526005602052604081206003015481908190819086908690610f41906001612529565b8110610f8f5760405162461bcd60e51b815260206004820152601d60248201527f50726f66697453686172653a496e76616c6964205374616b652049442100000060448201526064016109b2565b505050506001600160a01b03939093165f908152600660209081526040808320948352939052919091208054600182015460029092015490949193506001600160601b0381169250600160601b900463ffffffff1690565b610fef6114b7565b5f81116110545760405162461bcd60e51b815260206004820152602d60248201527f50726f66697453686172653a616d6f756e74206d75737420626520677265617460448201526c6572207468616e207a65726f2160981b60648201526084016109b2565b600854611075906234bc0090600160a01b90046001600160601b031661254f565b6001600160601b0316426001600160601b03161015806110955750600954155b61109d575f5ffd5b6008546110b4906001600160a01b03168383611d55565b816001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337826040516110ef91815260200190565b60405180910390a25050565b611103611942565b61111b336007546001600160a01b0316903084611985565b5f6001600160601b0383161561115457335f908152600560205260408120600301805490919061114a9061256e565b9182905550611156565b5f5b905061116433848484611b2c565b50610dc160018055565b611176611942565b611181335f5f6115e5565b61118a33610e55565b610dc160018055565b61119b6114b7565b6001600160a01b0381166111dd576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109b2565b610dce816118e6565b6111ee611942565b335f81815260056020526040902060030154859061120d906001612529565b811061125b5760405162461bcd60e51b815260206004820152601d60248201527f50726f66697453686172653a496e76616c6964205374616b652049442100000060448201526064016109b2565b335f908152600660209081526040808320898452909152902060028101546001600160601b039081164290911610156112fc5760405162461bcd60e51b815260206004820152602e60248201527f50726f66697453686172653a4561726c79205769746864726177616c2069732060448201527f6e6f74207065726d69747465642100000000000000000000000000000000000060648201526084016109b2565b805461134a5760405162461bcd60e51b815260206004820152601c60248201527f50726f66697453686172653a4e6f7468696e6720746f20636c61696d0000000060448201526064016109b2565b6001810154156114755760018101546040517f379607f50000000000000000000000000000000000000000000000000000000081525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163379607f5916113c29160040190815260200190565b6020604051808303815f875af11580156113de573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140291906125c3565b116114755760405162461bcd60e51b815260206004820152602d60248201527f50726f66697453686172653a43616e6e6f7420636c61696d207843524544492060448201527f66726f6d204d6f64756c6558210000000000000000000000000000000000000060648201526084016109b2565b61148e3382546007546001600160a01b03169190611d55565b61149a33825489611a01565b85156114ab576114ab338686611d86565b505050610e6560018055565b5f546001600160a01b0316331461093f576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109b2565b606061150a82611f8b611f8f565b5090919050565b5f8282188284100282185b90505b92915050565b5f82821882841102821861151c565b5f5f6003600161154560028661158a565b61154f919061253c565b8154811061155f5761155f61244b565b5f9182526020909120015490506103e861157984836124f3565b611583919061250a565b9392505050565b81545f9081908082036115a1575f9250505061151f565b808210156115dd575f6115b48383611fa7565b9050846115c18783611fc1565b5411156115d0578091506115d7565b8060010192505b506115a1565b509392505050565b600c545f90611600906001600160601b031661068542610668565b600954909150158015906116225750600c546001600160601b03908116908216115b1561167757600954600a54600c54611643906001600160601b0316846124d4565b6001600160601b031661165691906124f3565b611660919061250a565b600b80545f90611671908490612529565b90915550505b600c80546bffffffffffffffffffffffff19166001600160601b0383161790556001600160a01b03841615610e65576001600160a01b0384165f90815260056020526040812080549091906116cb90611534565b82549091501561171d576002820154600b54683635c9adc5dea00000916116f19161253c565b6116fb90836124f3565b611705919061250a565b826001015f8282546117179190612529565b90915550505b600b54600283015581548490611734908790612529565b61173e919061253c565b808355819061174c90611534565b6009546117599190612529565b611763919061253c565b600955815460018301546002840154604080519384526020840192909252908201526001600160a01b038716907ff1da46a1ca3e37613208b2a3d7ec556866482d77a0005d6168d73270ced6b26a9060600160405180910390a2600954600a54600b54600c54600854604080519586526020860194909452848401929092526001600160601b039081166060850152600160a01b909104166080830152517fe111f67a87ace56a1496291914b8e0da23748ffddaa8bc98d0f4d4dfb51796a59181900360a00190a1505050505050565b5f81116118985760405162461bcd60e51b815260206004820152602d60248201527f50726f66697453686172653a616d6f756e74206d75737420626520677265617460448201526c6572207468616e207a65726f2160981b60648201526084016109b2565b6118b0336008546001600160a01b0316903084611985565b6040518181527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a150565b5f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60026001540361197e576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b6040516001600160a01b038481166024830152838116604483015260648201839052610e659186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fe8565b6001600160a01b0383165f90815260066020908152604080832084845290915290208054831115611a9a5760405162461bcd60e51b815260206004820152602160248201527f50726f66697453686172653a496e73756666696369656e742062616c616e636560448201527f210000000000000000000000000000000000000000000000000000000000000060648201526084016109b2565b60028101545f906103e890611abc90600160601b900463ffffffff16866124f3565b611ac6919061250a565b9050611ad3855f836115e5565b83825f015f828254611ae5919061253c565b9091555050604080518481526020810186905233917f459d5aef2c549903c1eeb1736f5728845d5ccf82537ddd5bf8035795eee89263910160405180910390a25050505050565b600754600160a01b90046001600160601b0316426001600160601b031610158015611b715750600854600160a01b90046001600160601b0316426001600160601b0316105b611bbd5760405162461bcd60e51b815260206004820152601f60248201527f50726f66697453686172653a506f6f6c206973206e6f7420616374697665210060448201526064016109b2565b6001600160601b0383165f9081526004602052604081205463ffffffff16906103e8611be983866124f3565b611bf3919061250a565b90505f8111611c6a5760405162461bcd60e51b815260206004820152603960248201527f50726f66697453686172653a616d6f756e7420616e64206d756c7469706c696560448201527f72206d7573742062652067726561746572207468616e2030210000000000000060648201526084016109b2565b611c7586825f6115e5565b335f9081526006602090815260408083208684529091528120805490918691839190611ca2908490612529565b90915550611cb29050864261254f565b6002820180546001600160601b039283166fffffffffffffffffffffffffffffffff1990911617600160601b63ffffffff871602179081905582546001840154604080518981526020810193909352820152908216606082015290871660808201526001600160a01b038816907ffb323914bfe99940926cd03fe7969535604dd9a3c82b28853e738744dd6f9aaa9060a00160405180910390a250505050505050565b6040516001600160a01b03838116602483015260448201839052610af691859182169063a9059cbb906064016119ba565b6001600160a01b0383165f908152600560205260409020600181015415610e6557600d546001600160a01b031615611f1957600854600d54600183015460405163095ea7b360e01b81526001600160a01b039283166004820152602481019190915291169063095ea7b3906044016020604051808303815f875af1158015611e10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190612586565b50600d5460018201546040517f39aca1c10000000000000000000000000000000000000000000000000000000081525f926001600160a01b0316916339aca1c191611e87918991899089906004016125da565b6020604051808303815f875af1158015611ea3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec791906125c3565b11611f145760405162461bcd60e51b815260206004820152601760248201527f50726f66697453686172653a53776170206661696c656400000000000000000060448201526064016109b2565b611f38565b6001810154600854611f38916001600160a01b03909116908690611d55565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868260010154604051611f7791815260200190565b60405180910390a25f600182015550505050565b1190565b606061150a60208401611fa18561206d565b84612084565b5f611fb5600284841861250a565b61151c90848416612529565b5f82611fe0611fdd84611fd9845f9081526020902090565b0190565b90565b949350505050565b5f5f60205f8451602086015f885af180612007576040513d5f823e3d81fd5b50505f513d9150811561201e57806001141561202b565b6001600160a01b0384163b155b15610e65576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016109b2565b5f815160200261207d8360200190565b0192915050565b6040838303101561209457505050565b5f61209d845190565b905083602081015b848110156120df576120c26120b8825190565b848663ffffffff16565b156120d7576020919091018051825182528252905b6020016120a5565b5084518151865281526120f3858285612084565b612101816020018585612084565b5050505050565b828054828255905f5260205f20908101928215612141579160200282015b82811115612141578251825591602001919060010190612126565b5061214d929150612151565b5090565b5b8082111561214d575f8155600101612152565b5f5f83601f840112612175575f5ffd5b50813567ffffffffffffffff81111561218c575f5ffd5b6020830191508360208260051b85010111156121a6575f5ffd5b9250929050565b5f5f5f5f604085870312156121c0575f5ffd5b843567ffffffffffffffff8111156121d6575f5ffd5b6121e287828801612165565b909550935050602085013567ffffffffffffffff811115612201575f5ffd5b61220d87828801612165565b95989497509550505050565b80356001600160a01b038116811461222f575f5ffd5b919050565b5f60208284031215612244575f5ffd5b61151c82612219565b80356001600160601b038116811461222f575f5ffd5b5f5f5f60608486031215612275575f5ffd5b61227e8461224d565b95602085013595506040909401359392505050565b5f602082840312156122a3575f5ffd5b61151c8261224d565b5f5f5f606084860312156122be575f5ffd5b833592506122ce6020850161224d565b929592945050506040919091013590565b5f5f604083850312156122f0575f5ffd5b6122f98361224d565b946020939093013593505050565b5f60208284031215612317575f5ffd5b5035919050565b8015158114610dce575f5ffd5b5f5f83601f84011261233b575f5ffd5b50813567ffffffffffffffff811115612352575f5ffd5b6020830191508360208285010111156121a6575f5ffd5b5f5f5f5f6060858703121561237c575f5ffd5b84359350602085013561238e8161231e565b9250604085013567ffffffffffffffff8111156123a9575f5ffd5b61220d8782880161232b565b5f5f604083850312156123c6575f5ffd5b6123cf8361224d565b9150602083013563ffffffff811681146123e7575f5ffd5b809150509250929050565b5f5f60408385031215612403575f5ffd5b6122f983612219565b5f5f6020838503121561241d575f5ffd5b823567ffffffffffffffff811115612433575f5ffd5b61243f8582860161232b565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f8154808452602084019350825f5260205f205f5b82811015612492578154865260209095019460019182019101612474565b5093949350505050565b604081525f6124ae604083018561245f565b8281036020840152610746818561245f565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b03828116828216039081111561151f5761151f6124c0565b808202811582820484141761151f5761151f6124c0565b5f8261252457634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561151f5761151f6124c0565b8181038181111561151f5761151f6124c0565b6001600160601b03818116838216019081111561151f5761151f6124c0565b5f6001820161257f5761257f6124c0565b5060010190565b5f60208284031215612596575f5ffd5b81516115838161231e565b5f5f604083850312156125b2575f5ffd5b505080516020909101519092909150565b5f602082840312156125d3575f5ffd5b5051919050565b6001600160a01b038516815283602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f19160101939250505056fea2646970667358221220225ef5a279425a2ccee972e684c65650a2d8a861569980d9211eeec87f66cf1464736f6c634300081e00330dfde28ba1cfae98db642e3246355850b37332d75f04945da4676e38ad0453860000000000000000000000000000000000000000000000000000000068839d1c00000000000000000000000000000000000000000000000000000000688c038000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000debb1411896e15f1f17013e18444ada1795a3acf000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48