2 txs
3 calls
constructor
constructor()
functions
currentIFOAddress
viewfunction currentIFOAddress() view returns (address)
MAX_BUFFER_SECONDS_VESTING
viewfunction MAX_BUFFER_SECONDS_VESTING() view returns (uint256)
MAX_BUFFER_SECONDS
viewfunction MAX_BUFFER_SECONDS() view returns (uint256)
NATIVE
viewfunction NATIVE() view returns (address)
owner
viewfunction owner() view returns (address)
createIFO
nonpayablefunction createIFO(address[] _addresses, uint256[] _startAndEndTimestamps, uint8 _maxPoolId, uint256 _vestingStartTime)
recoverWrongTokens
nonpayablefunction recoverWrongTokens(address _tokenAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateMaxBuffer
nonpayablefunction updateMaxBuffer(uint256 newMaxBuffer)
events
AdminTokenRecovery
event AdminTokenRecovery(address indexed tokenRecovered, uint256 amount)
NewIFOContract
event NewIFOContract(address indexed ifoAddress)
NewMaxBuffer
event NewMaxBuffer(uint256 maxBuffer)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
AdminAddressIsNull
error AdminAddressIsNull()
EndTimeTooFar
error EndTimeTooFar()
LpTokenSameWithOfferingToken
error LpTokenSameWithOfferingToken()
StartTimeMustGreaterThanCurrentBlockTime
error StartTimeMustGreaterThanCurrentBlockTime()
StartTimeMustInferiorToEndTime
error StartTimeMustInferiorToEndTime()
VestingStartTimeTooFar
error VestingStartTimeTooFar()
creation bytecode
0x608080604052346070575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180546001600160a01b031916905562278d006002556149e590816100758239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632d3372cf146100b457806354070e39146100af578063715018a6146100aa578063746268cc146100a557806387b7db5c146100a05780638da5cb5b1461009b578063a0cf0aea14610096578063d04cbeb314610091578063dff2940f1461008c5763f2fde38b14610087575f80fd5b610566565b610515565b6104da565b610489565b610439565b6103b5565b61028d565b6101bb565b610180565b346101415760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101415760043567ffffffffffffffff811161014157610103903690600401610145565b9060243567ffffffffffffffff811161014157610124903690600401610145565b6044359160ff831683036101415761013f94606435946106d1565b005b5f80fd5b9181601f840112156101415782359167ffffffffffffffff8311610141576020808501948460051b01011161014157565b5f91031261014157565b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610141576020600254604051908152f35b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101415761020b73ffffffffffffffffffffffffffffffffffffffff5f5416331461066c565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b73ffffffffffffffffffffffffffffffffffffffff81160361014157565b346101415760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101415773ffffffffffffffffffffffffffffffffffffffff6004356102dd8161026f565b6102eb825f5416331461066c565b166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa9081156103b0577f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab781299161037c915f91610381575b50610361811515610f7f565b61036c81338661104d565b6040519081529081906020820190565b0390a2005b6103a3915060203d6020116103a9575b61039b8183610e0d565b810190610e53565b5f610355565b503d610391565b610e62565b346101415760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610141577f6d0e750dce5e074f2672f12d0fd1de4bab34323530b02e094e59481a0850df60602060043561042c73ffffffffffffffffffffffffffffffffffffffff5f5416331461066c565b80600255604051908152a1005b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014157602060405162278d008152f35b34610141575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014157602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101415760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610141576004356105a18161026f565b6105c373ffffffffffffffffffffffffffffffffffffffff5f5416331461066c565b73ffffffffffffffffffffffffffffffffffffffff8116156105e85761013f90610fe4565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b1561067357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9391936106f673ffffffffffffffffffffffffffffffffffffffff5f5416331461066c565b60ff831615610cb7575b61071261070d8383610d47565b610d6e565b73ffffffffffffffffffffffffffffffffffffffff61075061073761070d8686610d50565b73ffffffffffffffffffffffffffffffffffffffff1690565b9116148015610c7c575b610c545773ffffffffffffffffffffffffffffffffffffffff61078061070d8484610d47565b6107a261073760015473ffffffffffffffffffffffffffffffffffffffff1690565b9182911603610be3575b73ffffffffffffffffffffffffffffffffffffffff6107ce61070d8585610d0b565b1603610b72575b600460206107ec61073761073761070d8787610d50565b604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa80156103b057610b55575b5073ffffffffffffffffffffffffffffffffffffffff61084661070d8484610d5f565b1615610b2d576108568486610d0b565b3561086360025442610eaa565b1115610b05576108738486610d47565b3561087e8587610d0b565b351115610add5761088f8486610d47565b35421015610ab55785610a73575b6136876108ac60208201610eb7565b90808252602082019061132982396108c761070d8585610d47565b6108d461070d8686610d0b565b6109756108e461070d8888610d50565b916109496108f28b8d610d47565b35604051948593602085019788927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605c959381809460601b16865260601b16601485015260601b166028830152603c8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610e0d565b5190209151905ff59373ffffffffffffffffffffffffffffffffffffffff85169660025494883b15610141575f956109db93604051998a9788977f269de81800000000000000000000000000000000000000000000000000000000895260048901610ec7565b038183875af19182156103b057610a3392610a59575b5073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355565b7f3b823f91f23e8f12a60f36282813ffed043efcb2101731734672a4726c0864545f80a2565b80610a675f610a6d93610e0d565b80610176565b5f6109f1565b610a86610a808587610d0b565b35610e6d565b86111561089d577f934d8415000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fb04629aa000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f46bdc214000000000000000000000000000000000000000000000000000000005f5260045ffd5b7feb47c4f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3a3d9dd4000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b6d9060203d6020116103a95761039b8183610e0d565b610823565b60046020610b8961073761073761070d8787610d0b565b604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa80156103b057610bc6575b506107d5565b610bde9060203d6020116103a95761039b8183610e0d565b610bc0565b60046020610bfa61073761073761070d8888610d47565b604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa80156103b057610c37575b506107ac565b610c4f9060203d6020116103a95761039b8183610e0d565b610c31565b7fe53320e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b50610c8a61070d8383610d0b565b73ffffffffffffffffffffffffffffffffffffffff610caf61073761070d8686610d50565b91161461075a565b610d06610cc761070d8484610d0b565b73ffffffffffffffffffffffffffffffffffffffff610cfe61073760015473ffffffffffffffffffffffffffffffffffffffff1690565b911614610d7b565b610700565b9060011015610d1a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9015610d1a5790565b9060021015610d1a5760400190565b9060031015610d1a5760600190565b35610d788161026f565b90565b15610d8257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6c70312073686f756c64206265206164647265737328302900000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e4e57604052565b610de0565b90816020910312610141575190565b6040513d5f823e3d90fd5b9062278d008201809211610e7d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211610e7d57565b90610ec56040519283610e0d565b565b93909294979695918060a0860160a087525260c0850193905f5b818110610f485750505083830360208501528083527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161014157608094610f449360209260051b8092848301370101966040840152606083019060ff169052565b0152565b90919460208060019273ffffffffffffffffffffffffffffffffffffffff8935610f718161026f565b168152019601929101610ee1565b15610f8657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f7065726174696f6e733a2042616c616e6365206d757374206265203e2030006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff805f54921691827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b5f61110b939273ffffffffffffffffffffffffffffffffffffffff8293604051958260208801947fa9059cbb0000000000000000000000000000000000000000000000000000000086521660248801526044870152604486526110b1606487610e0d565b169082604051956110c3604088610e0d565b602087527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460208801526110f9843b15156111d3565b51925af1611105611238565b90611295565b805180611116575050565b8160208061112b93610ec59501019101611130565b611148565b90816020910312610141575180151581036101415790565b1561114f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b156111da57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b3d15611290573d9067ffffffffffffffff8211610e4e5760405191611285601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610e0d565b82523d5f602084013e565b606090565b909190156112a1575090565b8151156112b15750805190602001fd5b60446020917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040519485937f08c379a00000000000000000000000000000000000000000000000000000000085528160048601528051918291826024880152018686015e5f85828601015201168101030190fdfe608080604052346069575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180546001600160a01b0319169055613619908161006e8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806313083617146102545780631e3bba081461024f5780632374876c1461024a578063269de8181461024557806328fddfaf146102405780632937049e1461023b57806337f859b8146102365780633f138d4b1461023157806346ab91bf1461022c57806348deb471146102275780634af3c9b71461022257806354070e391461021d57806367d42a8b146102185780636993c73314610213578063715018a61461020e578063760b31801461020957806379795108146102045780637f1bdd76146101ff5780638af104da146101fa5780638da5cb5b146101f55780639ef346b4146101f0578063a0cf0aea146101eb578063a85adeab146101e6578063a8660a78146101e1578063b1ced5e7146101dc578063b6549f75146101d7578063b86c6f14146101d2578063ca463ca4146101cd578063caa7f232146101c8578063e6fd48bc146101c3578063ea1bb3d5146101be578063edf26d9b146101b9578063f2fde38b146101b4578063f51321d7146101af578063f7c469f0146101aa5763f9cd5c12146101a5575f80fd5b611f6f565b611f07565b611eb1565b611dab565b611d4b565b611ccf565b611c94565b611aca565b6119b0565b6118d5565b611804565b6117c6565b61178b565b611750565b6116ff565b611690565b611640565b6115f7565b611497565b61145f565b611424565b611370565b6111d0565b610fb9565b610f4e565b610dfb565b610ce2565b610c20565b610a98565b610a5c565b61092b565b6108eb565b610672565b610316565b6102bc565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020602454604051908152f35b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff81160361028f57565b60ff81160361028f57565b3461028f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602061030e6004356102fc81610293565b60243590610309826102b1565b6120e2565b604051908152f35b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57600435610351816102b1565b688000000000ab143c065c6106345730688000000000ab143c065d61037581612597565b6103f76007546103b7836103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b9060ff165f5260205260405f2090565b546103f160016103e9866103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b015460ff1690565b916125cf565b6104546001610428836103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b0160017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60225415610626575b6104678133612659565b809291926105fb575b50806104c7575b508061048c575b5f688000000000ab143c065d005b6104bb61049b6104c093611d3a565b905473ffffffffffffffffffffffffffffffffffffffff9160031b1c1690565b612ba9565b5f8061047e565b6104dd60076104d585612171565b5001546121bf565b610560575b60076104ed84612171565b500154156104775761051061051791600761050786612171565b500154906121da565b6064900490565b610522818433612a05565b604080519182526020820183905260ff84169133917f4b386667138d87683f75b2e46ad8ac192b053af4c8875da8689415997663a95091a35f610477565b61057a61051061057460076104d587612171565b836121da565b6004546105be90829033906105b99073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b6127bb565b604080519182526020820184905260ff85169133917f51524c2e5edfedf8b01b29719c661e4fbe27e71734e7cd773dabb7cb712fb3b391a36104e2565b61061290600661060a86612171565b5001546121b2565b600661061d85612171565b5001555f610470565b61062f42602255565b61045d565b63ab143c065f526004601cfd5b9181601f8401121561028f5782359167ffffffffffffffff831161028f576020808501948460051b01011161028f57565b3461028f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f5760043567ffffffffffffffff811161028f576106c1903690600401610641565b60243567ffffffffffffffff811161028f576106e1903690600401610641565b916044356064356106f1816102b1565b6084359160ff60015460a01c166108c3576004840361089b576002860361087357600260ff8316101561084b57610762740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff6001541617600155565b5f5b60ff8116858110156107c957906107bf61078a6107856107c494898d61225c565b61226c565b61079383611d3a565b90919073ffffffffffffffffffffffffffffffffffffffff8084549260031b9316831b921b1916179055565b612224565b610764565b50509161083a61083f9261080c61084999956108076108016108449b6107859b6107fc6107f68383612235565b35600655565b61223e565b35600755565b600855565b60ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006009541617600955565b602255565b61224d565b612550565b005b7fa854b3bd000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9cbf71a8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3b9b621f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0dc149f0000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602060ff602354166040519015158152f35b3461028f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f577f5cba002c3841a6704789c1f41f4dab171dc5a8c972c928498c961665cdecf41b600435602435906109d96044356109aa73ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b82610a35575b83610a0d575b806109de575b604051938493846040919493926060820195825260208201520152565b0390a1005b600454610a0890829033906105b99073ffffffffffffffffffffffffffffffffffffffff166105a0565b6109bc565b610a30846104bb60035473ffffffffffffffffffffffffffffffffffffffff1690565b6109b6565b610a578373ffffffffffffffffffffffffffffffffffffffff60025416612ba9565b6109b0565b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602061030e6004356122db565b3461028f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57600435610ad381610293565b602435610af873ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b610b1a6105a060025473ffffffffffffffffffffffffffffffffffffffff1690565b9173ffffffffffffffffffffffffffffffffffffffff81169283148015610bf6575b8015610bcc575b610ba457610b74827f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab781299433906127bb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082019290925290819081016109d9565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b50600454610bef9073ffffffffffffffffffffffffffffffffffffffff166105a0565b8314610b43565b50600354610c199073ffffffffffffffffffffffffffffffffffffffff166105a0565b8314610b3c565b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576004356002811015610cdd57600b810290610cd982600b015491600d600c85015494015490610c8b6003610c8283612171565b50015460ff1690565b6006610ca46005610c9b85612171565b50015493612171565b50015492604051968796879260a094919796959260c08501988552602085015260408401521515606083015260808201520152565b0390f35b611d0d565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020602654604051908152f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261028f57600435610d5481610293565b916024359067ffffffffffffffff821161028f57610d7491600401610641565b9091565b90602080835192838152019201905f5b818110610d955750505090565b8251845260209384019390920191600101610d88565b90610dbe90604083526040830190610d78565b906020818303910152602080835192838152019201905f5b818110610de35750505090565b82511515845260209384019390920191600101610dd6565b3461028f57610e0936610d1d565b91610e1383612365565b90610e1d8461234d565b90610e2b604051928361202b565b8482527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e588661234d565b013660208401375f93610e76610e7060095460ff1690565b60ff1690565b945b60ff811687811015610f3f5790858285610e9e610e99610eb3968d8961225c565b6123b4565b8a60ff82161115610eb8575b50505050612224565b610e78565b60016103e982610f3696610eff87610ef8610f28976103a7610f2f9a73ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b54926123be565b526103a78b73ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b91886123be565b9015159052565b855f8581610eaa565b60405180610cd9878983610dab565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020600854604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261028f5760043590565b3461028f57610fc736610f89565b688000000000ab143c065c610634576110189030688000000000ab143c065d61100a611005610ffe835f52602560205260405f2090565b5460ff1690565b612d75565b5f52602560205260405f2090565b805461103c9060081c73ffffffffffffffffffffffffffffffffffffffff166105a0565b3314158061119c575b6111745761105a6110558261208b565b612da4565b90811561114c5761113b73ffffffffffffffffffffffffffffffffffffffff6111298360027fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e95016110ad8782546121b2565b90556110c36110be876026546121cd565b602655565b60045461110c9087906110eb9073ffffffffffffffffffffffffffffffffffffffff166105a0565b835460081c73ffffffffffffffffffffffffffffffffffffffff16906127bb565b5460081c73ffffffffffffffffffffffffffffffffffffffff1690565b60405194855216929081906020820190565b0390a25f688000000000ab143c065d005b7f5b2e7e9a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f61c042c1000000000000000000000000000000000000000000000000000000005f5260045ffd5b506111be6105a073ffffffffffffffffffffffffffffffffffffffff5f541690565b331415611045565b8015150361028f57565b3461028f576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57606435602435600435604435611215846111c6565b6084359360a43590611226826102b1565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261028f57600a6109d9937fddaf243a142670be60c19ff7116b5d8b124717b29bb4cc03cead42161614105b9761129a73ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b6112a385612597565b6006549060c43590611335866112c66101043595868686610124359c8d94612e82565b6112cf89612171565b50958b600188016112ea6112e582548c546121cd565b600a55565b6112f86112e5838c546121b2565b558c87556002870155600386019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6004840155600783015560e4356008830155600982015501556040519384938491604091949360ff9160608501968552602085015216910152565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576113c073ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020600a54604051908152f35b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602061030e6123ec565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576004356024356114d0816102b1565b688000000000ab143c065c6106345730688000000000ab143c065d6114f481612597565b61151e600161150283612171565b50015461150e83612171565b5054600654906007549286613069565b600454611542906105a09073ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082905afa9081156115f2575f916115c3575b50600a541161159b5761047e9161310f565b7fe4db4faa000000000000000000000000000000000000000000000000000000005f5260045ffd5b6115e5915060203d6020116115eb575b6115dd818361202b565b8101906123d2565b5f611589565b503d6115d3565b6123e1565b3461028f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602061030e60043561163781610293565b602435906124c5565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461028f57610cd96116a96116a436610f89565b612534565b6040519182918291909160808060a083019480511515845273ffffffffffffffffffffffffffffffffffffffff602082015116602085015260ff6040820151166040850152606081015160608501520151910152565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020600754604051908152f35b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020602254604051908152f35b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602060ff60095416604051908152f35b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f5761185473ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b60235460ff81166118ad577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001176023557f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee65f80a1005b7f11db5254000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576004356002811015610cdd57600b81026012810154600a61192e6014601385015494015494612171565b500154604051938493608085019385526020850152604084015260608301520390f35b60206040818301928281528451809452019201905f5b8181106119745750505090565b909192835181905f915b6003831061199a57505050606001926020019190600101611967565b602080600192845181520192019201919061197e565b3461028f576119be36610d1d565b906119c88261234d565b926119d6604051948561202b565b8284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611a038461234d565b60609391015f5b818110611aaa5750505f5b60ff811685811015611a9c5790611a71611a77925f885f611a43611a3e610e99865f958c61225c565b612171565b5054611a7c575b611a538a61207d565b92835260208301526040820152611a6a828b6123be565b52886123be565b50612224565b611a15565b505050611a96611a90610e99838b8961225c565b87612659565b90611a4a565b60405180610cd98982611951565b602090604051611aba878261202b565b8636823782828a01015201611a0a565b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f5760043567ffffffffffffffff811161028f57611b19903690600401610641565b90611b3c73ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b600854600654908315610cdd578235918460011015610cdd5760208401359160028603610873574201804211611c8f57821015611c6757421015611c3f57811015611c1757421015611bef57611bd882611bba6107f67f57df350cfad05a64accd73700fee8a7febd6d8430e035e45f0599ca62494aa8b9585612235565b611bc7610801828561223e565b611bd18184612235565b359261223e565b6040805192835290356020830152819081016109d9565b7fb04629aa000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f46bdc214000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcb7cb9fa000000000000000000000000000000000000000000000000000000005f5260045ffd5b7feb47c4f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b612185565b3461028f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f576020600654604051908152f35b3461028f57611cdd36610f89565b805f526025602052611cf560ff60405f205416612d75565b5f526025602052602061030e61105560405f2061208b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6004811015610cdd57600201905f90565b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57600435600481101561028f5773ffffffffffffffffffffffffffffffffffffffff6020916002015416604051908152f35b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57600435611de681610293565b611e0873ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b73ffffffffffffffffffffffffffffffffffffffff811615611e2d5761084990613000565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b3461028f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57610cd96116a96116a4600435611ef581610293565b60243590611f0161250a565b506124c5565b3461028f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f57602061030e600435611f4781610293565b73ffffffffffffffffffffffffffffffffffffffff81165f526027835260405f2054906124c5565b3461028f57611f7d36610d1d565b90611f8782612365565b925f5b60ff811684811015611fc7579081611fbc610f28611fac611fc295898961225c565b35611fb6816102b1565b8661325f565b52612224565b611f8a565b60405160208082528190610cd990820189610d78565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761202657604052565b611fdd565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761202657604052565b6040519061207b60a08361202b565b565b9061207b604051928361202b565b906040516120988161200a565b60806002829460ff81548181161515865273ffffffffffffffffffffffffffffffffffffffff8160081c16602087015260a81c166040850152600181015460608501520154910152565b60ff8060095416921691821161216b5760405160208101907fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360601b1682525f60348201526034815261213760548261202b565b51902091825f52602560205260ff6040612152815f2061208b565b0151160361215e575090565b612168915061247a565b90565b50505f90565b6002811015610cdd57600b02600b01905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211611c8f57565b6064039060648211611c8f57565b91908203918211611c8f57565b81810292918115918404141715611c8f57565b81156121f7570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60ff1660ff8114611c8f5760010190565b9015610cdd5790565b9060011015610cdd5760200190565b9060031015610cdd5760600190565b9190811015610cdd5760051b0190565b3561216881610293565b1561227d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6002811015610cdd576122fc6122f8600e600b8402015460ff1690565b1590565b1561230657505f90565b600461231182612171565b5001541561232a57612324600491612171565b50015490565b80612345600561233c61216894612171565b50015491612171565b505490612c10565b67ffffffffffffffff81116120265760051b60200190565b9061236f8261234d565b61237c604051918261202b565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06123aa829461234d565b0190602036910137565b35612168816102b1565b8051821015610cdd5760209160051b010190565b9081602091031261028f575190565b6040513d5f823e3d90fd5b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526020908290602490829073ffffffffffffffffffffffffffffffffffffffff165afa80156115f257612168915f9161245b575b50602654906121cd565b612474915060203d6020116115eb576115dd818361202b565b5f612451565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602082019260601b16825260016034820152603481526124bf60548261202b565b51902090565b90604051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602083019360601b1683526034820152603481526124bf60548261202b565b604051906125178261200a565b5f6080838281528260208201528260408201528260608201520152565b61253c61250a565b505f52602560205261216860405f2061208b565b61257273ffffffffffffffffffffffffffffffffffffffff5f54163314612276565b73ffffffffffffffffffffffffffffffffffffffff811615611e2d5761207b90613000565b60ff80600954169116116125a757565b7f51365128000000000000000000000000000000000000000000000000000000005f5260045ffd5b4211156126315715612609576125e157565b7f0b3394dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdc646a14000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f085de625000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9182600561266986612171565b50015461267586612171565b5054101561276657506126fa61268b858361325f565b916126f4866103a76126cf6126b36126be6126b38960016126ab88612171565b5001546121da565b64e8d4a51000900490565b976126c885612171565b50546121da565b9373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b546121cd565b936127096003610c8283612171565b612714575b50929190565b612746919493506126b381600461272d61273f94612171565b50015490811561274d575b50856121da565b80936121cd565b925f61270e565b6127609150612345600561233c83612171565b5f612738565b936127ae6127a861279c836103a76127b69673ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b54600161050785612171565b91612171565b5054906121ed565b929190565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261207b9161281d60648361202b565b61337a565b1561282957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f76657374696e675363686564756c654964206973206265656e2063726561746560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152fd5b9060806002916128eb81511515859060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b602081015174ffffffffffffffffffffffffffffffffffffffff0085549160081b16807fffffffffffffffffffffff0000000000000000000000000000000000000000ff83161786557fffffffffffffffffffff000000000000000000000000000000000000000000ff75ff000000000000000000000000000000000000000000604085015160a81b16921617178455606081015160018501550151910155565b60245468010000000000000000811015612026576001810180602455811015610cdd5760245f527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40155565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c8f5760010190565b909180612a106123ec565b10612b2557612b1792612aee6110be612af393612ae6612a58612a518873ffffffffffffffffffffffffffffffffffffffff165f52602760205260405f2090565b54886124c5565b94612a8d73ffffffffffffffffffffffffffffffffffffffff612a8661110c895f52602560205260405f2090565b1615612822565b612ac3612a9861206c565b600181529173ffffffffffffffffffffffffffffffffffffffff8a16602084015260ff166040830152565b8260608201525f6080820152612ae1865f52602560205260405f2090565b6128ad565b6026546121b2565b61298c565b73ffffffffffffffffffffffffffffffffffffffff165f52602760205260405f2090565b612b2181546129d8565b9055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f63616e206e6f74206372656174652076657374696e67207363686564756c652060448201527f776974682073756666696369656e7420746f6b656e73000000000000000000006064820152fd5b60015473ffffffffffffffffffffffffffffffffffffffff91821691168103612c0457505f80808093335af115612bdc57565b7ff4b3b1bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061207b9133906127bb565b90612c1a916121ed565b6113888110612c2c5750630a21fe8090565b610fa08110612c3e5750630bebc20090565b610ce48110612c505750630ee6b28090565b610a8c8110612c6257506311e1a30090565b6108988110612c74575063160dc08090565b6107088110612c865750631ad2748090565b6105dc8110612c9857506320c8558090565b6104e28110612caa57506326be368090565b6103e88110612cbc5750632faf080090565b6103208110612cce5750633b9aca0090565b61028a8110612ce057506347868c0090565b6101f48110612cf257506359682f0090565b6101908110612d045750637735940090565b61012c8110612d165750639502f90090565b60fa8110612d27575063b2d05e0090565b60c88110612d38575063ee6b280090565b60968110612d4a575064012a05f20090565b60648110612d5c5750640165a0bc0090565b603211612d6c576401dcd6500090565b6402540be40090565b15612d7c57565b7f8bc0c805000000000000000000000000000000000000000000000000000000005f5260045ffd5b602254906040810191612dc96008612dc0611a3e865160ff1690565b500154826121b2565b421015612dd7575050505f90565b612dea6009612dc0611a3e865160ff1690565b4210801590612e76575b15612e0f5750612168915060806060820151910151906121cd565b612e6d612168936009612e64611a3e612e5c612e52612e30608098426121cd565b612e4d600a612e43611a3e8a5160ff1690565b50015480926121ed565b6121da565b60608901516121da565b935160ff1690565b500154906121ed565b910151906121cd565b5060235460ff16612df4565b94919493929093421015611c3f5764e8d4a51000851015612fd8578015612f9457606410612f6c578115612f445760018110612f1c5711612ef4575b15612ec65750565b612ecc57565b7f55d8bb67000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0cdbeed7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f2030ecea000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f914cb9d0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0e07a92f000000000000000000000000000000000000000000000000000000005f5260045ffd5b50901590811591612fce575b5015612ebe577f5c9504c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b905015155f612fa0565b7f892888c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff805f54921691827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9392919015908115613106575b506130de5742106126315742116130b6571561308e57565b7f9e6c6895000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fecdd1c29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3c675863000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f613076565b6131248161311f61049b85611d3a565b613473565b61315a81613154846103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b546121b2565b613186836103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b55600261319283612171565b5001546131f6575b6131a981600561060a85612171565b60056131b484612171565b5001557ff763e680fce25a97ffd55d8b705370c98b47b2285f7b3b2900c43606fd41804560ff604051931692806131f13394829190602083019252565b0390a3565b613222826103a73373ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b54600261322e84612171565b500154101561319a577f06e6a3a6000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff6009541660ff83161161216b576002821015610cdd57600b8202601001541561216b57816103a76132b09273ffffffffffffffffffffffffffffffffffffffff165f52602160205260405f2090565b5464e8d4a5100081029080820464e8d4a510001490151715611c8f576005612e6461216893612171565b9081602091031261028f5751612168816111c6565b156132f657565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff1690604051906133a060408361202b565b602082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020830152823b15613415575f816133f0948260208195519301915af16133ea6134f3565b90613550565b8051806133fb575050565b816020806134109361207b95010191016132da565b6132ef565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b60015473ffffffffffffffffffffffffffffffffffffffff9182169116810361349f57503403612bdc57565b9034612bdc5761207b91604051917f23b872dd00000000000000000000000000000000000000000000000000000000602084015233602484015230604484015260648301526064825261281d60848361202b565b3d1561354b573d9067ffffffffffffffff82116120265760405191613540601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020018461202b565b82523d5f602084013e565b606090565b9091901561355c575090565b81511561356c5750805190602001fd5b60446020917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040519485937f08c379a00000000000000000000000000000000000000000000000000000000085528160048601528051918291826024880152018686015e5f85828601015201168101030190fdfea2646970667358221220a475a4eeb8a9107d36d7ce8bafd2368a885a03513275450029834b0677901e9164736f6c634300081a0033a2646970667358221220faaf72cad0bb8a100b96531084cb6108036d737655986b9012e3a9f038f923f064736f6c634300081a0033