Address Contract Partially Verified
Address
0xfFE510a92434a0Df346C5E72a3494b043Cf249eB
Balance
0 ETH
Nonce
1
Code Size
21004 bytes
Creator
0xEe99b26e...4474 at tx 0xcd824343...7c85b3
Indexed Transactions
0
Contract Bytecode
21004 bytes
0x608060405234801561001057600080fd5b506004361061030e576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116101ba578063b7a8807c11610106578063df6dfbb9116100bf578063f30dbd2711610099578063f30dbd27146111f9578063f9f92be414611255578063fbbdb68c146112b1578063fe069fb1146112fb5761030e565b8063df6dfbb9146110c6578063e9402a7c14611134578063ec270350146111905761030e565b8063b7a8807c14610f06578063c5161a6014610f24578063cb619a3314610f6e578063d33219b414610fc6578063d73dd62314610fe8578063dd62ed3e1461104e5761030e565b80638c8b802e116101735780639dc29fac1161014d5780639dc29fac14610d8b578063a0712d6814610df1578063a9059cbb14610e37578063ad016d4814610e9d5761030e565b80638c8b802e14610c845780638d0c034014610ca257806395d89b4114610d085761030e565b806370a0823114610ae657806375e3661e14610b3e57806379b8045514610b9a5780638456cb5914610bbc57806387dcd2b614610bde578063883ba46614610c285761030e565b80632ff2e9dc116102795780633fd8cc4e11610232578063661884631161020c578063661884631461099957806369255678146109ff5780636bd59b3214610a5b5780636bdebcc914610ac45761030e565b80633fd8cc4e146108b25780634e19c1121461090e5780635c975abb146109775761030e565b80632ff2e9dc146107ae57806330ece116146107cc578063313ce567146107ee5780633b8157ef146108125780633be3bdd91461086e5780633f4ba83a146108905761030e565b806317ffc320116102cb57806317ffc3201461058857806318160ddd146105e45780631b9cddcc1461060257806323b872dd146106705780632e01161a146106f65780632fe8ace3146107525761030e565b8063022914a71461031057806303d41e0e1461036c578063051d9459146103c857806306fdde0314610436578063095ea7b3146104b95780630e5229b01461051f575b005b6103526004803603602081101561032657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611364565b604051808215151515815260200191505060405180910390f35b6103ae6004803603602081101561038257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611384565b604051808215151515815260200191505060405180910390f35b6103f4600480360360208110156103de57600080fd5b81019080803590602001909291905050506113a4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61043e6113d9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047e578082015181840152602081019050610463565b50505050905090810190601f1680156104ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611412565b604051808215151515815260200191505060405180910390f35b61056e6004803603604081101561053557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611504565b604051808215151515815260200191505060405180910390f35b6105ca6004803603602081101561059e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611777565b604051808215151515815260200191505060405180910390f35b6105ec611967565b6040518082815260200191505060405180910390f35b61062e6004803603602081101561061857600080fd5b8101908080359060200190929190505050611971565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dc6004803603606081101561068657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119a6565b604051808215151515815260200191505060405180910390f35b6107386004803603602081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd4565b604051808215151515815260200191505060405180910390f35b6107946004803603602081101561076857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf4565b604051808215151515815260200191505060405180910390f35b6107b6611e3d565b6040518082815260200191505060405180910390f35b6107d4611e4f565b604051808215151515815260200191505060405180910390f35b6107f6611ee7565b604051808260ff1660ff16815260200191505060405180910390f35b6108546004803603602081101561082857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eec565b604051808215151515815260200191505060405180910390f35b61087661209d565b604051808215151515815260200191505060405180910390f35b6108986121a9565b604051808215151515815260200191505060405180910390f35b6108f4600480360360208110156108c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122b5565b604051808215151515815260200191505060405180910390f35b61095d6004803603604081101561092457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061230c565b604051808215151515815260200191505060405180910390f35b61097f612520565b604051808215151515815260200191505060405180910390f35b6109e5600480360360408110156109af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612533565b604051808215151515815260200191505060405180910390f35b610a4160048036036020811015610a1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c4565b604051808215151515815260200191505060405180910390f35b610aaa60048036036040811015610a7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050612976565b604051808215151515815260200191505060405180910390f35b610acc612c4e565b604051808215151515815260200191505060405180910390f35b610b2860048036036020811015610afc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ce7565b6040518082815260200191505060405180910390f35b610b8060048036036020811015610b5457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d2f565b604051808215151515815260200191505060405180910390f35b610ba2612ed4565b604051808215151515815260200191505060405180910390f35b610bc4612fe1565b604051808215151515815260200191505060405180910390f35b610be66130ee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c6a60048036036020811015610c3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613114565b604051808215151515815260200191505060405180910390f35b610c8c61325d565b6040518082815260200191505060405180910390f35b610cee60048036036040811015610cb857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b604051808215151515815260200191505060405180910390f35b610d106133c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d50578082015181840152602081019050610d35565b50505050905090810190601f168015610d7d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610dd760048036036040811015610da157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613401565b604051808215151515815260200191505060405180910390f35b610e1d60048036036020811015610e0757600080fd5b81019080803590602001909291905050506134ca565b604051808215151515815260200191505060405180910390f35b610e8360048036036040811015610e4d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061374c565b604051808215151515815260200191505060405180910390f35b610eec60048036036040811015610eb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050613b1d565b604051808215151515815260200191505060405180910390f35b610f0e613df4565b6040518082815260200191505060405180910390f35b610f2c613dfa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610fb060048036036020811015610f8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e20565b6040518082815260200191505060405180910390f35b610fce613e38565b604051808215151515815260200191505060405180910390f35b61103460048036036040811015610ffe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613e4b565b604051808215151515815260200191505060405180910390f35b6110b06004803603604081101561106457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614047565b6040518082815260200191505060405180910390f35b6110f2600480360360208110156110dc57600080fd5b81019080803590602001909291905050506140ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111766004803603602081101561114a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614103565b604051808215151515815260200191505060405180910390f35b6111df600480360360408110156111a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050614123565b604051808215151515815260200191505060405180910390f35b61123b6004803603602081101561120f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614396565b604051808215151515815260200191505060405180910390f35b6112976004803603602081101561126b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506144df565b604051808215151515815260200191505060405180910390f35b6112b9614681565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61134a6004803603604081101561131157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506146a7565b604051808215151515815260200191505060405180910390f35b60196020528060005260406000206000915054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b601e81600a811015156113b357fe5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600b81526020017f4c555842494f2043454c4c00000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561156257600080fd5b600f60ff168260ff1610151561157757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156115b357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660098360ff16600f811015156115dd57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561162157600080fd5b60001515601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561168057600080fd5b6001601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508260098360ff16600f811015156116eb57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2660405160405180910390a26001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156117d557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d602081101561189a57600080fd5b810190808051906020019092919050505090506118fa600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828573ffffffffffffffffffffffffffffffffffffffff166148bb9092919063ffffffff16565b7fe72256d5cb67d3bffde3117833ae3ddbd526538f54c86fe203f6072d38a10b2783604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001915050919050565b6000600154905090565b60068160038110151561198057fe5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601c60009054906101000a900460ff161580611a0d5750601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515611a1857600080fd5b83601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611a7257600080fd5b33601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611acc57600080fd5b602860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611b2557600080fd5b601c60019054906101000a900460ff1615611cbd576000602960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cab5760008060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611c1a6005602960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149a990919063ffffffff16565b9050611c77611c276149bf565b8202602960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b611c8a8784614a1790919063ffffffff16565b10151515611c9757600080fd5b611ca2888888614a30565b94505050611ccb565b611cb6868686614a30565b9250611ccb565b611cc8868686614a30565b92505b50509392505050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d5257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d8e57600080fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f94b17f1a4844062cbed00809347b0f8149fc88c5a3ea720c7aed42c559eed46d60405160405180910390a260019050919050565b601260ff16600a0a6402540be4000281565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611ead57600080fd5b42601d819055507fbb592f357a1f210297ee30125cd10f8c5f71302d2b4634b205089e477d2c04d560405160405180910390a16001905090565b601281565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611f4657600080fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611f9e57600080fd5b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb24e6647db2742a3439d0a374e892f89a5a8f4619d2f5c5ed911d39a2516a47c6000604051808215151515815260200191505060405180910390a2601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156120fb57600080fd5b601c60019054906101000a900460ff16151561211657600080fd5b6000601c60016101000a81548160ff0219169083151502179055507f7e1ef4af8ba428bdf634385cb73788f486fe39f6d81cfd60d2f5a931c4f53feb33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1601c60019054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561220757600080fd5b601c60009054906101000a900460ff16151561222257600080fd5b6000601c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1601c60009054906101000a900460ff16905090565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561236a57600080fd5b600f60ff168260ff1610151561237f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156123bb57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1660098360ff16600f811015156123e457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561242857600080fd5b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060098360ff16600f8110151561249457fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f1e64d9a491033a9731fa82493f0ab60e9f74294eca27edd93629f1fbaa15d28760405160405180910390a26001905092915050565b601c60009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115612644576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126d8565b6126578382614a1790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561281e57600080fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561287757600080fd5b6001601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb24e6647db2742a3439d0a374e892f89a5a8f4619d2f5c5ed911d39a2516a47c6001604051808215151515815260200191505060405180910390a2601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156129d457600080fd5b600a60ff168260ff161015156129e957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612a2557600080fd5b602860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612a7e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601e8360ff16600a81101515612aa857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612aec57600080fd5b82601e8360ff16600a81101515612aff57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc8d2aed404b62d2d795898e8cd67e7aa385a98b524797d53f099c066df87d5e383604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1602860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612cac57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612d8d57600080fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612de557600080fd5b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a2601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612f3257600080fd5b601c60019054906101000a900460ff16151515612f4e57600080fd5b6001601c60016101000a81548160ff0219169083151502179055507ffc9858b7ebde243ccb2d5480d5e384b50ad3923a2833a480eeb04dca59cb1e3033604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1601c60019054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561303f57600080fd5b601c60009054906101000a900460ff1615151561305b57600080fd5b6001601c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1601c60009054906101000a900460ff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561317257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156131ae57600080fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed12844517c22c2de717b33333c74477d9e6a0d043db15e209949bc283f2dd5960405160405180910390a260019050919050565b600080429050600061327a601d5483614a1790919063ffffffff16565b905060006132946228de80836149a990919063ffffffff16565b90506132aa600182614dea90919063ffffffff16565b905080935050505090565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561330f57600080fd5b81602960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fcfa3a078cdb5c6463c7c5d2cf9a434607d71345389ca7b1b7b9870973dae97358383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b6040805190810160405280600481526020017f4c4258430000000000000000000000000000000000000000000000000000000081525081565b6000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561345b57600080fd5b82601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156134b457600080fd5b6134be8484614e06565b50600191505092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561352857600080fd5b61353d82600154614dea90919063ffffffff16565b601260ff16600a0a6402540be400021015151561355957600080fd5b61356e82600154614dea90919063ffffffff16565b6001819055506135e782600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dea90919063ffffffff16565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050919050565b6000601c60009054906101000a900460ff1615806137b35750601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156137be57600080fd5b33601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561381857600080fd5b601c60019054906101000a900460ff1615613b0957602860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613988576000602960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156139775782602960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fcfa3a078cdb5c6463c7c5d2cf9a434607d71345389ca7b1b7b9870973dae97358484604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b6139818484614fc1565b9150613b16565b6000602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613af85760008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613a686005602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149a990919063ffffffff16565b9050613ac5613a756149bf565b8202602960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b613ad88684614a1790919063ffffffff16565b10151515613ae557600080fd5b613aef8686614fc1565b93505050613b16565b613b028484614fc1565b9150613b16565b613b138484614fc1565b91505b5092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613b7b57600080fd5b600a60ff168260ff16101515613b9057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613bcc57600080fd5b602860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613c2457600080fd5b8273ffffffffffffffffffffffffffffffffffffffff16601e8360ff16600a81101515613c4d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613c9157600080fd5b6000601e8360ff16600a81101515613ca557fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f124574ab1ce2c78d819e9870b2c61f1367d636fd34d642a50faf67304a558a3b83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1602860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60296020528060005260406000206000915090505481565b601c60019054906101000a900460ff1681565b6000613edc82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dea90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600981600f811015156140dd57fe5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60286020528060005260406000206000915054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561418157600080fd5b600360ff168260ff1610151561419657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156141d257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff1660068360ff166003811015156141fc57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561424057600080fd5b60001515601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561429f57600080fd5b6001601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508260068360ff1660038110151561430a57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167fb2bea1aacb52292e22554458b37393c5c9afbdc4bb5edddf26805d0ad791005a60405160405180910390a26001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156143f457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561443057600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f746e4dbb4fcada0af54a5df33c0f46859c5ae98432a8e0b81213037872227a2d60405160405180910390a260019050919050565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561453957600080fd5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561459257600080fd5b6001601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a2601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561470557600080fd5b600360ff168260ff1610151561471a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561475657600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1660068360ff1660038110151561477f57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156147c357600080fd5b6000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060068360ff1660038110151561482f57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f560f25f18d7de8bf147a02a300cdcfd8c47e2ca258b2ead7d9e331f29ee488d960405160405180910390a26001905092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561495e57600080fd5b505af1158015614972573d6000803e3d6000fd5b505050506040513d602081101561498857600080fd5b810190808051906020019092919050505015156149a457600080fd5b505050565b600081838115156149b657fe5b04905092915050565b60008042905060006149dc601d5483614a1790919063ffffffff16565b905060006149f66228de80836149a990919063ffffffff16565b9050614a0c600182614dea90919063ffffffff16565b905080935050505090565b6000828211151515614a2557fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614a6d57600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614aba57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614b4557600080fd5b614b96826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c29826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dea90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cfa82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60008183019050828110151515614dfd57fe5b80905092915050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614e5557600080fd5b614ea6826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614efd82600154614a1790919063ffffffff16565b6001819055508273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614ffe57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561504b57600080fd5b61509c826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a1790919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061512f826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dea90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509291505056fea165627a7a7230582070b69a48077b0c9cd71874c53953539fe2d881073a58d24072b9da1743704ac10029
Verified Source Code Partial Match
Compiler: v0.5.2+commit.1df8f40c
EVM: byzantium
Optimization: No
.sol 813 lines
pragma solidity >0.4.99 <0.6.0;
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender)
public view returns (uint256);
function transferFrom(address from, address to, uint256 value)
public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
library SafeERC20 {
function safeTransfer(
ERC20Basic _token,
address _to,
uint256 _value
) internal
{
require(_token.transfer(_to, _value));
}
function safeTransferFrom(
ERC20 _token,
address _from,
address _to,
uint256 _value
) internal
{
require(_token.transferFrom(_from, _to, _value));
}
function safeApprove(
ERC20 _token,
address _spender,
uint256 _value
) internal
{
require(_token.approve(_spender, _value));
}
}
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if(a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
*/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev Total number of tokens in existence
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev Transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
*/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
/**
* @title Standard ERC20 token
*
* @dev Implementation of the basic standard token.
* https://github.com/ethereum/EIPs/issues/20
* Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
*/
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
*/
function transferFrom (
address _from,
address _to,
uint256 _value
) public returns (bool)
{
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
*/
function allowance (
address _owner,
address _spender
)
public
view
returns (uint256)
{
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
*/
function increaseApproval(
address _spender,
uint256 _addedValue
)
public
returns (bool)
{
allowed[msg.sender][_spender] = (
allowed[msg.sender][_spender].add(_addedValue));
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
*/
function decreaseApproval(
address _spender,
uint256 _subtractedValue
) public returns (bool)
{
uint256 oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title MultiOwnable
*
* @dev LBXC의 MultiOwnable은 히든오너, 수퍼오너, 버너, 오너, 리클레이머를 설정한다. 권한을 여러명에게 부여할 수 있는 경우
* 리스트에 그 값을 넣어 불특정 다수가 확인 할 수 있게 한다.
*
* LBXC的MultiOwnable可设置HIDDENOWNER,SUPEROWNER,BURNER,OWNER及RECLAIMER。
* 其权限可同时赋予多人的情况,在列表中放入该值后可确认其非特定的多人名单。
*
* MulitOwnable of LBXC sets HIDDENOWNER, SUPEROWNER, BURNER, OWNER, and RECLAIMER.
* If many can be authorized, the value is entered to the list so that it is accessible to unspecified many.
*
*/
contract MultiOwnable {
uint8 constant MAX_BURN = 3;
uint8 constant MAX_OWNER = 15;
address payable public hiddenOwner;
address payable public superOwner;
address payable public reclaimer;
address[MAX_BURN] public chkBurnerList;
address[MAX_OWNER] public chkOwnerList;
mapping(address => bool) public burners;
mapping (address => bool) public owners;
event AddedBurner(address indexed newBurner);
event AddedOwner(address indexed newOwner);
event DeletedOwner(address indexed toDeleteOwner);
event DeletedBurner(address indexed toDeleteBurner);
event ChangedReclaimer(address indexed newReclaimer);
event ChangedSuperOwner(address indexed newSuperOwner);
event ChangedHiddenOwner(address indexed newHiddenOwner);
constructor() public {
hiddenOwner = msg.sender;
superOwner = msg.sender;
reclaimer = msg.sender;
owners[msg.sender] = true;
chkOwnerList[0] = msg.sender;
}
modifier onlySuperOwner() {
require(superOwner == msg.sender);
_;
}
modifier onlyReclaimer() {
require(reclaimer == msg.sender);
_;
}
modifier onlyHiddenOwner() {
require(hiddenOwner == msg.sender);
_;
}
modifier onlyOwner() {
require(owners[msg.sender]);
_;
}
modifier onlyBurner(){
require(burners[msg.sender]);
_;
}
function changeSuperOwnership(address payable newSuperOwner) public onlyHiddenOwner returns(bool) {
require(newSuperOwner != address(0));
superOwner = newSuperOwner;
emit ChangedSuperOwner(superOwner);
return true;
}
function changeHiddenOwnership(address payable newHiddenOwner) public onlyHiddenOwner returns(bool) {
require(newHiddenOwner != address(0));
hiddenOwner = newHiddenOwner;
emit ChangedHiddenOwner(hiddenOwner);
return true;
}
function changeReclaimer(address payable newReclaimer) public onlySuperOwner returns(bool) {
require(newReclaimer != address(0));
reclaimer = newReclaimer;
emit ChangedReclaimer(reclaimer);
return true;
}
function addBurner(address burner, uint8 num) public onlySuperOwner returns (bool) {
require(num < MAX_BURN);
require(burner != address(0));
require(chkBurnerList[num] == address(0));
require(burners[burner] == false);
burners[burner] = true;
chkBurnerList[num] = burner;
emit AddedBurner(burner);
return true;
}
function deleteBurner(address burner, uint8 num) public onlySuperOwner returns (bool){
require(num < MAX_BURN);
require(burner != address(0));
require(chkBurnerList[num] == burner);
burners[burner] = false;
chkBurnerList[num] = address(0);
emit DeletedBurner(burner);
return true;
}
function addOwner(address owner, uint8 num) public onlySuperOwner returns (bool) {
require(num < MAX_OWNER);
require(owner != address(0));
require(chkOwnerList[num] == address(0));
require(owners[owner] == false);
owners[owner] = true;
chkOwnerList[num] = owner;
emit AddedOwner(owner);
return true;
}
function deleteOwner(address owner, uint8 num) public onlySuperOwner returns (bool) {
require(num < MAX_OWNER);
require(owner != address(0));
require(chkOwnerList[num] == owner);
owners[owner] = false;
chkOwnerList[num] = address(0);
emit DeletedOwner(owner);
return true;
}
}
/**
* @title HasNoEther
*/
contract HasNoEther is MultiOwnable {
using SafeERC20 for ERC20Basic;
event ReclaimToken(address _token);
/**
* @dev Constructor that rejects incoming Ether
* The `payable` flag is added so we can access `msg.value` without compiler warning. If we
* leave out payable, then Solidity will allow inheriting contracts to implement a payable
* constructor. By doing it this way we prevent a payable constructor from working. Alternatively
* we could use assembly to access msg.value.
*/
constructor() public payable {
require(msg.value == 0);
}
/**
* @dev Disallows direct send by settings a default function without the `payable` flag.
*/
function() external {
}
function reclaimToken(ERC20Basic _token) external onlyReclaimer returns(bool){
uint256 balance = _token.balanceOf(address(this));
_token.safeTransfer(superOwner, balance);
emit ReclaimToken(address(_token));
return true;
}
}
contract Blacklist is MultiOwnable {
mapping(address => bool) blacklisted;
event Blacklisted(address indexed blacklist);
event Whitelisted(address indexed whitelist);
modifier whenPermitted(address node) {
require(!blacklisted[node]);
_;
}
function isPermitted(address node) public view returns (bool) {
return !blacklisted[node];
}
function blacklist(address node) public onlyOwner returns (bool) {
require(!blacklisted[node]);
blacklisted[node] = true;
emit Blacklisted(node);
return blacklisted[node];
}
function unblacklist(address node) public onlySuperOwner returns (bool) {
require(blacklisted[node]);
blacklisted[node] = false;
emit Whitelisted(node);
return blacklisted[node];
}
}
contract Burnlist is Blacklist {
mapping(address => bool) public isburnlist;
event Burnlisted(address indexed burnlist, bool signal);
modifier isBurnlisted(address who) {
require(isburnlist[who]);
_;
}
function addBurnlist(address node) public onlyOwner returns (bool) {
require(!isburnlist[node]);
isburnlist[node] = true;
emit Burnlisted(node, true);
return isburnlist[node];
}
function delBurnlist(address node) public onlyOwner returns (bool) {
require(isburnlist[node]);
isburnlist[node] = false;
emit Burnlisted(node, false);
return isburnlist[node];
}
}
contract PausableToken is StandardToken, HasNoEther, Burnlist {
uint8 constant MAX_LOCKER = 10;
bool public paused = false;
bool public timelock = false;
uint256 public openingTime;
address[MAX_LOCKER] public chkLockerList;
mapping(address => bool) public lockerAddrs;
mapping(address => uint256) public lockValues;
event SetLockValues(address addr, uint256 value);
event OnTimeLock(address who);
event OffTimeLock(address who);
event Paused(address addr);
event Unpaused(address addr);
event AddLocker(address addr);
event DelLocker(address addr);
event OpenedTime();
constructor() public {
openingTime = block.timestamp;
}
modifier whenNotPaused() {
require(!paused || owners[msg.sender]);
_;
}
function addLocker (address locker, uint8 num) public onlySuperOwner returns (bool) {
require(num < MAX_LOCKER);
require(locker != address(0));
require(!lockerAddrs[locker]);
require(chkLockerList[num] == address(0));
chkLockerList[num] = locker;
lockerAddrs[locker] = true;
emit AddLocker(locker);
return lockerAddrs[locker];
}
function delLocker (address locker, uint8 num) public onlySuperOwner returns (bool) {
require(num < MAX_LOCKER);
require(locker != address(0));
require(lockerAddrs[locker]);
require(chkLockerList[num] == locker);
chkLockerList[num] = address(0);
lockerAddrs[locker] = false;
emit DelLocker(locker);
return lockerAddrs[locker];
}
function pause() public onlySuperOwner returns (bool) {
require(!paused);
paused = true;
emit Paused(msg.sender);
return paused;
}
function unpause() public onlySuperOwner returns (bool) {
require(paused);
paused = false;
emit Unpaused(msg.sender);
return paused;
}
function onTimeLock() public onlySuperOwner returns (bool) {
require(!timelock);
timelock = true;
emit OnTimeLock(msg.sender);
return timelock;
}
function offTimeLock() public onlySuperOwner returns (bool) {
require(timelock);
timelock = false;
emit OffTimeLock(msg.sender);
return timelock;
}
function transfer(address to, uint256 value) public whenNotPaused whenPermitted(msg.sender) returns (bool) {
//时间锁定的情况
//타임락인경우
//when it is timelock
if(timelock) {
//msg.sender为lockerAddrs的情况,接收者将更新被锁定的额度状态。
//msg.sender가 lockerAddrs인 경우, 받은 사용자의 락된 발란스 상태를 업데이트해준다.
//when msg.sender is lockerAddrs, the recipient’s locked balance is updated.
if(lockerAddrs[msg.sender]) {
//lockerAddrs向to发送的情况,最初金额将成为lockValues。
//lockerAddrs가 to에게 보내는 경우, 최초의 금액이 lockValues가 된다.
//when lockerAddrs sends to to, the initial amount becomes lockValues.
if(lockValues[to] == 0) {
lockValues[to] = value;
emit SetLockValues(to, value);
}
return super.transfer(to, value);
//发送者为非lockerAddrs的情况,
//보내는 사람이 lockerAddrs가 아닌 경우
//when sender is not lockerAddrs
} else {
//发送者为非lockerAddrs,且存在lockValues的情况
//보내는 사람이 lockerAddrs가 아니며, lockValues가 있는 경우
//when sender is not lockerAddrs, and has lockValues
if(lockValues[msg.sender] > 0) {
uint256 _totalAmount = balances[msg.sender];
uint256 lockValue = lockValues[msg.sender].div(5);
//需大于总价值value的限额(总锁定金额 - 已解锁金额)。
//전체 값의 value를 제한 금액이 (전체 락된 금액 - 제한이 풀린 금액)보다 커야한다.
//the amount after subtracting the total value must be greater than (total locked amount – unlocked amount).
require(_totalAmount.sub(value) >= lockValues[msg.sender].sub(lockValue * _timeLimit()));
return super.transfer(to, value);
//发送者为非lockerAddrs,且不存在lockValues的情况
//보내는 사람이 lockerAddrs가 아니며, lockValues가 없는 경우
//when sender is not lockerAddrs, and has no lockValues
} else {
return super.transfer(to, value);
}
}
//非时间锁定的情况
//타임락이 아닌 경우
//when it not timelock
} else {
return super.transfer(to, value);
}
}
function transferFrom(address from, address to, uint256 value) public
whenNotPaused whenPermitted(from) whenPermitted(msg.sender) returns (bool) {
require(!lockerAddrs[from]);
if(timelock) {
//lockValues[from]大于0的情况
//lockValues[from]이 0보다 큰 경우
//when lockValues[from] is greater than 0
if(lockValues[from] > 0) {
uint256 _totalAmount = balances[from];
uint256 lockValue = lockValues[from].div(5);
require(_totalAmount.sub(value) >= lockValues[from].sub(lockValue * _timeLimit()));
return super.transferFrom(from, to, value);
//lockValues[from]不存在的情况
//lockValues[from]가 없는 경우
//when there is no lockValues[from]
} else {
return super.transferFrom(from, to, value);
}
} else {
return super.transferFrom(from, to, value);
}
}
function _timeLimit() internal view returns (uint256) {
uint256 presentTime = block.timestamp;
uint256 timeValue = presentTime.sub(openingTime);
uint256 _result = timeValue.div(31 days);
_result = _result.add(1);
return _result;
}
function setOpeningTime() public onlyHiddenOwner returns(bool) {
openingTime = block.timestamp;
emit OpenedTime();
return true;
}
function getLimitPeriod() external view returns (uint256) {
uint256 presentTime = block.timestamp;
uint256 timeValue = presentTime.sub(openingTime);
uint256 result = timeValue.div(31 days);
result = result.add(1);
return result;
}
function setLockValue(address to, uint256 value) public onlyOwner returns (bool) {
lockValues[to] = value;
emit SetLockValues(to, value);
return true;
}
}
/**
* @title LBXC
*
*/
contract LBXC is PausableToken {
event Burn(address indexed burner, uint256 value);
event Mint(address indexed minter, uint256 value);
string public constant name = "LUXBIO CELL";
uint8 public constant decimals = 18;
string public constant symbol = "LBXC";
uint256 public constant INITIAL_SUPPLY = 1e10 * (10 ** uint256(decimals));
constructor() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;
emit Transfer(address(0), msg.sender, INITIAL_SUPPLY);
}
function destory() public onlyHiddenOwner returns (bool) {
selfdestruct(superOwner);
return true;
}
/**
* @dev LBXC의 민트는 오직 히든오너만 실행 가능하며, 수퍼오너에게 귀속된다.
* 추가로 발행하려는 토큰과 기존 totalSupply_의 합이 최초 발행된 토큰의 양(INITIAL_SUPPLY)보다 클 수 없다.
*
* LBXC的MINT只能由HIDDENOWNER进行执行,其所有权归SUPEROWNER所有。
* 追加进行发行的数字货币与totalSupply_的和不可大于最初发行的数字货币(INITIAL_SUPPLY)数量。
*
* Only the Hiddenowner can mint LBXC, and the minted is reverted to SUPEROWNER.
* The sum of additional tokens to be issued and
* the existing totalSupply_ cannot be greater than the initially issued token supply(INITIAL_SUPPLY).
*/
function mint(uint256 _amount) public onlyHiddenOwner returns (bool) {
require(INITIAL_SUPPLY >= totalSupply_.add(_amount));
totalSupply_ = totalSupply_.add(_amount);
balances[superOwner] = balances[superOwner].add(_amount);
emit Mint(superOwner, _amount);
emit Transfer(address(0), superOwner, _amount);
return true;
}
/**
* @dev LBXC의 번은 오직 버너만 실행 가능하며, Owner가 등록할 수 있는 Burnlist에 등록된 계정만 토큰 번 할 수 있다.
*
* LBXC的BURN只能由BURNER进行执行,OWNER只有登记在Burnlist的账户才能对数字货币执行BURN。
*
* Only the BURNER can burn LBXC,
* and only the tokens that can be burned are those on Burnlist account that Owner can register.
*/
function burn(address _to,uint256 _value) public onlyBurner isBurnlisted(_to) returns(bool) {
_burn(_to, _value);
return true;
}
function _burn(address _who, uint256 _value) internal returns(bool){
require(_value <= balances[_who]);
balances[_who] = balances[_who].sub(_value);
totalSupply_ = totalSupply_.sub(_value);
emit Burn(_who, _value);
emit Transfer(_who, address(0), _value);
return true;
}
}
Read Contract
INITIAL_SUPPLY 0x2ff2e9dc → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
burners 0x03d41e0e → bool
chkBurnerList 0x1b9cddcc → address
chkLockerList 0x051d9459 → address
chkOwnerList 0xdf6dfbb9 → address
decimals 0x313ce567 → uint8
getLimitPeriod 0x8c8b802e → uint256
hiddenOwner 0xfbbdb68c → address
isPermitted 0x3fd8cc4e → bool
isburnlist 0x2e01161a → bool
lockValues 0xcb619a33 → uint256
lockerAddrs 0xe9402a7c → bool
name 0x06fdde03 → string
openingTime 0xb7a8807c → uint256
owners 0x022914a7 → bool
paused 0x5c975abb → bool
reclaimer 0xc5161a60 → address
superOwner 0x87dcd2b6 → address
symbol 0x95d89b41 → string
timelock 0xd33219b4 → bool
totalSupply 0x18160ddd → uint256
Write Contract 28 functions
These functions modify contract state and require a wallet transaction to execute.
addBurner 0xec270350
address burner
uint8 num
returns: bool
addBurnlist 0x69255678
address node
returns: bool
addLocker 0x6bd59b32
address locker
uint8 num
returns: bool
addOwner 0x0e5229b0
address owner
uint8 num
returns: bool
approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
blacklist 0xf9f92be4
address node
returns: bool
burn 0x9dc29fac
address _to
uint256 _value
returns: bool
changeHiddenOwnership 0x883ba466
address newHiddenOwner
returns: bool
changeReclaimer 0xf30dbd27
address newReclaimer
returns: bool
changeSuperOwnership 0x2fe8ace3
address newSuperOwner
returns: bool
decreaseApproval 0x66188463
address _spender
uint256 _subtractedValue
returns: bool
delBurnlist 0x3b8157ef
address node
returns: bool
delLocker 0xad016d48
address locker
uint8 num
returns: bool
deleteBurner 0xfe069fb1
address burner
uint8 num
returns: bool
deleteOwner 0x4e19c112
address owner
uint8 num
returns: bool
destory 0x6bdebcc9
No parameters
returns: bool
increaseApproval 0xd73dd623
address _spender
uint256 _addedValue
returns: bool
mint 0xa0712d68
uint256 _amount
returns: bool
offTimeLock 0x3be3bdd9
No parameters
returns: bool
onTimeLock 0x79b80455
No parameters
returns: bool
pause 0x8456cb59
No parameters
returns: bool
reclaimToken 0x17ffc320
address _token
returns: bool
setLockValue 0x8d0c0340
address to
uint256 value
returns: bool
setOpeningTime 0x30ece116
No parameters
returns: bool
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool
unblacklist 0x75e3661e
address node
returns: bool
unpause 0x3f4ba83a
No parameters
returns: bool
Recent Transactions
No transactions found for this address