ERC-20
Overview
Max Total Supply
5,762,000 E4ROW
Holders
133
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 2 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
E4Lava
Compiler Version
v0.4.11+commit.68ef5810
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-06-22 */ pragma solidity ^0.4.11; // VERSION LAVA(J) // -------------------------- // here's how this works: // the current amount of dividends due to each token-holder's is: // previous_due + [ p(x) * t(x)/N ] + [ p(x+1) * t(x+1)/N ] + ... // where p(x) is the x'th payment received by the contract // t(x) is the number of tokens held by the token-holder at the time of p(x) // N is the total number of tokens, which never changes // // assume that t(x) takes on 3 values, t(a), t(b) and t(c), during periods a, b, and c. then: // factoring: // current_due = { (t(a) * [p(x) + p(x+1)] ...) + // (t(b) * [p(y) + p(y+1)] ...) + // (t(c) * [p(z) + p(z+1)] ...) } / N // // or // // current_due = { (t(a) * period_a_fees) + // (t(b) * period_b_fees) + // (t(c) * period_c_fees) } / N // // if we designate current_due * N as current-points, then // // currentPoints = { (t(a) * period_a_fees) + // (t(b) * period_b_fees) + // (t(c) * period_c_fees) } // // or more succictly, if we recompute current points before a token-holder's number of // tokens, T, is about to change: // // currentPoints = previous_points + (T * current-period-fees) // // when we want to do a payout, we'll calculate: // current_due = current-points / N // // we'll keep track of a token-holder's current-period-points, which is: // T * current-period-fees // by taking a snapshot of fees collected exactly when the current period began; that is, the when the // number of tokens last changed. that is, we keep a running count of total fees received // // TotalFeesReceived = p(x) + p(x+1) + p(x+2) // // (which happily is the same for all token holders) then, before any token holder changes their number of // tokens we compute (for that token holder): // // function calcCurPointsForAcct(acct) { // currentPoints[acct] += (TotalFeesReceived - lastSnapshot[acct]) * T[acct] // lastSnapshot[acct] = TotalFeesReceived // } // // in the withdraw fcn, all we need is: // // function withdraw(acct) { // calcCurPointsForAcct(acct); // current_amount_due = currentPoints[acct] / N // currentPoints[acct] = 0; // send(current_amount_due); // } // // // special provisions for transfers from the old e4row contract (token-split transfers) // ------------------------------------------------------------------------------------- // normally when a new acct is created, eg cuz tokens are transferred from one acct to another, we first call // calcCurPointsForAcct(acct) on the old acct; on the new acct we set: // currentPoints[acct] = 0; // lastSnapshot[acct] = TotalFeesReceived; // // this starts the new account with no credits for any dividends that have been collected so far, which is what // you would generally want. however, there is a case in which tokens are transferred from the old e4row contract. // in that case the tokens were reserved on this contract all along, and they earn dividends even before they are // assigned to an account. so for token-split transfers: // currentPoints[acct] = 0; // lastSnapshot[acct] = 0; // // then immediately call calcCurPointsForAcct(acct) for the new token-split account. he will get credit // for all the accumulated points, from the beginning of time. // // -------------------------- // Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 // --------------------------------- // ABSTRACT standard token class // --------------------------------- contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // -------------------------- // E4RowRewards - abstract e4 dividend contract // -------------------------- contract E4LavaRewards { function checkDividends(address _addr) constant returns(uint _amount); function withdrawDividends() public returns (uint namount); function transferDividends(address _to) returns (bool success); function getAccountInfo(address _addr) constant returns(uint _tokens, uint _snapshot, uint _points); } // -------------------------- // E4LavaOptin - abstract e4 optin contract // -------------------------- contract E4LavaOptIn { function optInFromClassic() public; } // -------------------------- // E4ROW (LAVA) - token contract // -------------------------- contract E4Lava is Token, E4LavaRewards, E4LavaOptIn { event StatEvent(string msg); event StatEventI(string msg, uint val); enum SettingStateValue {debug, lockedRelease} struct tokenAccount { bool alloced; // flag to ascert prior allocation uint tokens; // num tokens currently held in this acct uint currentPoints; // updated before token balance changes, or before a withdrawal. credit for owning tokens uint lastSnapshot; // snapshot of global TotalPoints, last time we updated this acct's currentPoints } // ----------------------------- // data storage // ---------------------------------------- uint constant NumOrigTokens = 5762; // number of old tokens, from original token contract uint constant NewTokensPerOrigToken = 100000; // how many new tokens are created for each from original token uint constant NewTokenSupply = 5762 * 100000; uint public numToksSwitchedOver; // count old tokens that have been converted uint public holdoverBalance; // funds received, but not yet distributed uint public TotalFeesReceived; // total fees received from partner contract(s) address public developers; // developers token holding address address public owner; // deployer executor address public oldE4; // addr of old e4 token contract address public oldE4RecycleBin; // addr to transfer old tokens uint public decimals; string public symbol; mapping (address => tokenAccount) holderAccounts; // who holds how many tokens (high two bytes contain curPayId) mapping (uint => address) holderIndexes; // for iteration thru holder mapping (address => mapping (address => uint256)) allowed; // approvals uint public numAccounts; uint public payoutThreshold; // no withdrawals less than this amount, to avoid remainders uint public rwGas; // reward gas uint public optInXferGas; // gas used when optInFromClassic calls xfer on old contract uint public optInFcnMinGas; // gas we need for the optInFromClassic fcn, *excluding* optInXferGas uint public vestTime = 1525219201; // 1 year past sale vest developer tokens SettingStateValue public settingsState; // -------------------- // contract constructor // -------------------- function E4Lava() { owner = msg.sender; developers = msg.sender; decimals = 2; symbol = "E4ROW"; } // ----------------------------------- // use this to reset everything, will never be called after lockRelease // ----------------------------------- function applySettings(SettingStateValue qState, uint _threshold, uint _rw, uint _optXferGas, uint _optFcnGas ) { if (msg.sender != owner) return; // these settings are permanently tweakable for performance adjustments payoutThreshold = _threshold; rwGas = _rw; optInXferGas = _optXferGas; optInFcnMinGas = _optFcnGas; // this first test checks if already locked if (settingsState == SettingStateValue.lockedRelease) return; settingsState = qState; // this second test allows locking without changing other permanent settings // WARNING, MAKE SURE YOUR'RE HAPPY WITH ALL SETTINGS // BEFORE LOCKING if (qState == SettingStateValue.lockedRelease) { StatEvent("Locking!"); return; } // zero out all token holders. // leave alloced on, leave num accounts // cant delete them anyways for (uint i = 0; i < numAccounts; i++ ) { address a = holderIndexes[i]; if (a != address(0)) { holderAccounts[a].tokens = 0; holderAccounts[a].currentPoints = 0; holderAccounts[a].lastSnapshot = 0; } } numToksSwitchedOver = 0; holdoverBalance = 0; TotalFeesReceived = 0; if (this.balance > 0) { if (!owner.call.gas(rwGas).value(this.balance)()) StatEvent("ERROR!"); } StatEvent("ok"); } // --------------------------------------------------- // allocate a new account by setting alloc to true // add holder index, bump the num accounts // --------------------------------------------------- function addAccount(address _addr) internal { holderAccounts[_addr].alloced = true; holderAccounts[_addr].tokens = 0; holderAccounts[_addr].currentPoints = 0; holderAccounts[_addr].lastSnapshot = TotalFeesReceived; holderIndexes[numAccounts++] = _addr; } // -------------------------------------- // BEGIN ERC-20 from StandardToken // -------------------------------------- function totalSupply() constant returns (uint256 supply) { supply = NewTokenSupply; } // ---------------------------- // sender transfers tokens to a new acct // do not use this fcn for a token-split transfer from the old token contract! // ---------------------------- function transfer(address _to, uint256 _value) returns (bool success) { if ((msg.sender == developers) && (now < vestTime)) { //statEvent("Tokens not yet vested."); return false; } //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (holderAccounts[msg.sender].tokens >= _value && balances[_to] + _value > holderAccounts[_to]) { if (holderAccounts[msg.sender].tokens >= _value && _value > 0) { //first credit sender with points accrued so far.. must do this before number of held tokens changes calcCurPointsForAcct(msg.sender); holderAccounts[msg.sender].tokens -= _value; if (!holderAccounts[_to].alloced) { addAccount(_to); } //credit destination acct with points accrued so far.. must do this before number of held tokens changes calcCurPointsForAcct(_to); holderAccounts[_to].tokens += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if ((_from == developers) && (now < vestTime)) { //statEvent("Tokens not yet vested."); return false; } //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (holderAccounts[_from].tokens >= _value && allowed[_from][msg.sender] >= _value && holderAccounts[_to].tokens + _value > holderAccounts[_to].tokens) { if (holderAccounts[_from].tokens >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { calcCurPointsForAcct(_from); holderAccounts[_from].tokens -= _value; if (!holderAccounts[_to].alloced) { addAccount(_to); } //credit destination acct with points accrued so far.. must do this before number of held tokens changes calcCurPointsForAcct(_to); holderAccounts[_to].tokens += _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { balance = holderAccounts[_owner].tokens; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // ---------------------------------- // END ERC20 // ---------------------------------- // ---------------------------- // calc current points for a token holder; that is, points that are due to this token holder for all dividends // received by the contract during the current "period". the period began the last time this fcn was called, at which // time we updated the account's snapshot of the running point count, TotalFeesReceived. during the period the account's // number of tokens must not have changed. so always call this fcn before changing the number of tokens. // ---------------------------- function calcCurPointsForAcct(address _acct) internal { holderAccounts[_acct].currentPoints += (TotalFeesReceived - holderAccounts[_acct].lastSnapshot) * holderAccounts[_acct].tokens; holderAccounts[_acct].lastSnapshot = TotalFeesReceived; } // --------------------------- // accept payment from a partner contract // funds sent here are added to TotalFeesReceived // WARNING! DO NOT CALL THIS FUNCTION LEST YOU LOSE YOUR MONEY // --------------------------- function () payable { holdoverBalance += msg.value; TotalFeesReceived += msg.value; StatEventI("Payment", msg.value); } // --------------------------- // one never knows if this will come in handy. // --------------------------- function blackHole() payable { StatEventI("adjusted", msg.value); } // ---------------------------- // sender withdraw entire rewards/dividends // ---------------------------- function withdrawDividends() public returns (uint _amount) { calcCurPointsForAcct(msg.sender); _amount = holderAccounts[msg.sender].currentPoints / NewTokenSupply; if (_amount <= payoutThreshold) { StatEventI("low Balance", _amount); return; } else { if ((msg.sender == developers) && (now < vestTime)) { StatEvent("Tokens not yet vested."); _amount = 0; return; } uint _pointsUsed = _amount * NewTokenSupply; holderAccounts[msg.sender].currentPoints -= _pointsUsed; holdoverBalance -= _amount; if (!msg.sender.call.gas(rwGas).value(_amount)()) throw; } } // ---------------------------- // allow sender to transfer dividends // ---------------------------- function transferDividends(address _to) returns (bool success) { if ((msg.sender == developers) && (now < vestTime)) { //statEvent("Tokens not yet vested."); return false; } calcCurPointsForAcct(msg.sender); if (holderAccounts[msg.sender].currentPoints == 0) { StatEvent("Zero balance"); return false; } if (!holderAccounts[_to].alloced) { addAccount(_to); } calcCurPointsForAcct(_to); holderAccounts[_to].currentPoints += holderAccounts[msg.sender].currentPoints; holderAccounts[msg.sender].currentPoints = 0; StatEvent("Trasnfered Dividends"); return true; } // ---------------------------- // set gas for operations // ---------------------------- function setOpGas(uint _rw, uint _optXferGas, uint _optFcnGas) { if (msg.sender != owner && msg.sender != developers) { //StatEvent("only owner calls"); return; } else { rwGas = _rw; optInXferGas = _optXferGas; optInFcnMinGas = _optFcnGas; } } // ---------------------------- // check rewards. pass in address of token holder // ---------------------------- function checkDividends(address _addr) constant returns(uint _amount) { if (holderAccounts[_addr].alloced) { //don't call calcCurPointsForAcct here, cuz this is a constant fcn uint _currentPoints = holderAccounts[_addr].currentPoints + ((TotalFeesReceived - holderAccounts[_addr].lastSnapshot) * holderAccounts[_addr].tokens); _amount = _currentPoints / NewTokenSupply; // low balance? let him see it -Etansky // if (_amount <= payoutThreshold) { // _amount = 0; // } } } // ---------------------------- // swap executor // ---------------------------- function changeOwner(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; owner = _addr; } // ---------------------------- // set developers account // ---------------------------- function setDeveloper(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; developers = _addr; } // ---------------------------- // set oldE4 Addresses // ---------------------------- function setOldE4(address _oldE4, address _oldE4Recyle) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; oldE4 = _oldE4; oldE4RecycleBin = _oldE4Recyle; } // ---------------------------- // get account info // ---------------------------- function getAccountInfo(address _addr) constant returns(uint _tokens, uint _snapshot, uint _points) { _tokens = holderAccounts[_addr].tokens; _snapshot = holderAccounts[_addr].lastSnapshot; _points = holderAccounts[_addr].currentPoints; } // ---------------------------- // DEBUG ONLY - end this contract, suicide to developers // ---------------------------- function haraKiri() { if (settingsState != SettingStateValue.debug) throw; if (msg.sender != owner) throw; suicide(developers); } // ---------------------------- // OPT IN FROM CLASSIC. // All old token holders can opt into this new contract by calling this function. // This "transferFrom"s tokens from the old addresses to the new recycleBin address // which is a new address set up on the old contract. Afterwhich new tokens // are credited to the old holder. Also the lastSnapShot is set to 0 then // calcCredited points are called setting up the new signatoree all of his // accrued dividends. // ---------------------------- function optInFromClassic() public { if (oldE4 == address(0)) { StatEvent("config err"); return; } // 1. check balance of msg.sender in old contract. address nrequester = msg.sender; // 2. make sure account not already allocd (in fact, it's ok if it's allocd, so long // as it is empty now. the reason for this check is cuz we are going to credit him with // dividends, according to his token count, from the begin of time. if (holderAccounts[nrequester].tokens != 0) { StatEvent("Account has already has tokens!"); return; } // 3. check his tok balance Token iclassic = Token(oldE4); uint _toks = iclassic.balanceOf(nrequester); if (_toks == 0) { StatEvent("Nothing to do"); return; } // must be 100 percent of holdings if (iclassic.allowance(nrequester, address(this)) < _toks) { StatEvent("Please approve this contract to transfer"); return; } // 4. before we do the transfer, make sure that we have at least enough gas for the // transfer plus the remainder of this fcn. if (msg.gas < optInXferGas + optInFcnMinGas) throw; // 5. transfer his old toks to recyle bin iclassic.transferFrom.gas(optInXferGas)(nrequester, oldE4RecycleBin, _toks); // todo, error check? if (iclassic.balanceOf(nrequester) == 0) { // success, add the account, set the tokens, set snapshot to zero if (!holderAccounts[nrequester].alloced) addAccount(nrequester); holderAccounts[nrequester].tokens = _toks * NewTokensPerOrigToken; holderAccounts[nrequester].lastSnapshot = 0; calcCurPointsForAcct(nrequester); numToksSwitchedOver += _toks; // no need to decrement points from a "holding account" // b/c there is no need to keep it. StatEvent("Success Switched Over"); } else StatEvent("Transfer Error! please contact Dev team!"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"qState","type":"uint8"},{"name":"_threshold","type":"uint256"},{"name":"_rw","type":"uint256"},{"name":"_optXferGas","type":"uint256"},{"name":"_optFcnGas","type":"uint256"}],"name":"applySettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numToksSwitchedOver","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"checkDividends","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"developers","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawDividends","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_rw","type":"uint256"},{"name":"_optXferGas","type":"uint256"},{"name":"_optFcnGas","type":"uint256"}],"name":"setOpGas","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TotalFeesReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vestTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rwGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"settingsState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payoutThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"optInXferGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getAccountInfo","outputs":[{"name":"_tokens","type":"uint256"},{"name":"_snapshot","type":"uint256"},{"name":"_points","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numAccounts","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"blackHole","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_oldE4","type":"address"},{"name":"_oldE4Recyle","type":"address"}],"name":"setOldE4","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"haraKiri","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"oldE4","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"optInFcnMinGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferDividends","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"oldE4RecycleBin","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"holdoverBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"optInFromClassic","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setDeveloper","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"}],"name":"StatEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"val","type":"uint256"}],"name":"StatEventI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
6060604052635ae8ff8160115534156200001557fe5b5b60048054600160a060020a033316600160a060020a0319918216811790925560038054909116909117905560026007556040805180820190915260058082527f4534524f5700000000000000000000000000000000000000000000000000000060209092019182526200008c9160089162000094565b505b6200013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000d757805160ff191683800117855562000107565b8280016001018555821562000107579182015b8281111562000107578251825591602001919060010190620000ea565b5b50620001169291506200011a565b5090565b6200013b91905b8082111562000116576000815560010162000121565b5090565b90565b611a4b806200014e6000396000f300606060405236156101a95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461022b57806313bd53e61461025e57806318160ddd146102825780631d7786e3146102a457806322f16c8d146102c657806323b872dd146102f45780632bc31ca41461032d5780632e92abdd14610359578063313ce5671461037b5780633cebb4d71461039d5780633ed8ff25146103b85780634d22d1d1146103da5780635876d2ef146103fc5780635f437e481461041e5780636b5e1a181461045257806370a0823114610474578063766719f0146104a25780637b510fe8146104c45780638ce25a93146104fe5780638da5cb5b1461052057806395d89b411461054c5780639e90f9aa146105dc578063a6f9dae1146105e6578063a9059cbb14610604578063ae4eba1f14610637578063c40525591461065b578063c741764c1461066d578063c99a975d14610699578063ccf0768a146106bb578063dd62ed3e146106eb578063f9e856ae1461071f578063fa1e4fcb1461074b578063ff5639c41461076d578063ff70fa491461077f575b6102295b600180543490810190915560028054820190556040805160208101929092528082526007828201527f5061796d656e74000000000000000000000000000000000000000000000000006060830152517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a15b565b005b341561023357fe5b61024a600160a060020a036004351660243561079d565b604080519115158252519081900360200190f35b341561026657fe5b61022960ff60043516602435604435606435608435610808565b005b341561028a57fe5b610292610a3a565b60408051918252519081900360200190f35b34156102ac57fe5b610292610a43565b60408051918252519081900360200190f35b34156102ce57fe5b610292600160a060020a0360043516610a49565b60408051918252519081900360200190f35b34156102fc57fe5b61024a600160a060020a0360043581169060243516604435610aac565b604080519115158252519081900360200190f35b341561033557fe5b61033d610c1c565b60408051600160a060020a039092168252519081900360200190f35b341561036157fe5b610292610c2b565b60408051918252519081900360200190f35b341561038357fe5b610292610dae565b60408051918252519081900360200190f35b34156103a557fe5b610229600435602435604435610db4565b005b34156103c057fe5b610292610e02565b60408051918252519081900360200190f35b34156103e257fe5b610292610e08565b60408051918252519081900360200190f35b341561040457fe5b610292610e0e565b60408051918252519081900360200190f35b341561042657fe5b61042e610e14565b6040518082600181111561043e57fe5b60ff16815260200191505060405180910390f35b341561045a57fe5b610292610e1d565b60408051918252519081900360200190f35b341561047c57fe5b610292600160a060020a0360043516610e23565b60408051918252519081900360200190f35b34156104aa57fe5b610292610e45565b60408051918252519081900360200190f35b34156104cc57fe5b6104e0600160a060020a0360043516610e4b565b60408051938452602084019290925282820152519081900360600190f35b341561050657fe5b610292610e7e565b60408051918252519081900360200190f35b341561052857fe5b61033d610e84565b60408051600160a060020a039092168252519081900360200190f35b341561055457fe5b61055c610e93565b6040805160208082528351818301528351919283929083019185019080838382156105a2575b8051825260208311156105a257601f199092019160209182019101610582565b505050905090810190601f1680156105ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610229610f21565b005b34156105ee57fe5b610229600160a060020a0360043516610f89565b005b341561060c57fe5b61024a600160a060020a0360043516602435610fef565b604080519115158252519081900360200190f35b341561063f57fe5b610229600160a060020a0360043581169060243516611112565b005b341561066357fe5b61022961118e565b005b341561067557fe5b61033d6111d9565b60408051600160a060020a039092168252519081900360200190f35b34156106a157fe5b6102926111e8565b60408051918252519081900360200190f35b34156106c357fe5b61024a600160a060020a03600435166111ee565b604080519115158252519081900360200190f35b34156106f357fe5b610292600160a060020a0360043581169060243516611363565b60408051918252519081900360200190f35b341561072757fe5b61033d611390565b60408051600160a060020a039092168252519081900360200190f35b341561075357fe5b61029261139f565b60408051918252519081900360200190f35b341561077557fe5b6102296113a5565b005b341561078757fe5b610229600160a060020a03600435166118e7565b005b600160a060020a033381166000818152600b6020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600454600090819033600160a060020a0390811691161461082857610a31565b600d869055600e859055600f849055601083905560015b60125460ff16600181111561085057fe5b141561085b57610a31565b6012805488919060ff19166001838181111561087357fe5b021790555060015b87600181111561088757fe5b14156108e0576040805160208082526008908201527f4c6f636b696e6721000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610a31565b600091505b600c5482101561094557506000818152600a6020526040902054600160a060020a0316801561093957600160a060020a03811660009081526009602052604081206001810182905560028101829055600301555b5b6001909101906108e5565b600080805560018190556002819055600160a060020a0330163111156109e157600454600e54604051600160a060020a0392831692301631906000818181858888f1935050505015156109e1576040805160208082526006908201527f4552524f52210000000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a15b5b6040805160208082526002908201527f6f6b000000000000000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a15b50505050505050565b6322581d405b90565b60005481565b600160a060020a038116600090815260096020526040812054819060ff1615610aa55750600160a060020a03821660009081526009602052604090206001810154600382015460028054930154920302016322581d40815b0491505b5b50919050565b600354600090600160a060020a038581169116148015610acd575060115442105b15610ada57506000610c14565b600160a060020a038416600090815260096020526040902060010154829010801590610b2d5750600160a060020a038085166000908152600b602090815260408083203390941683529290522054829010155b8015610b395750600082115b15610c1057610b478461194d565b600160a060020a03808516600090815260096020526040808220600101805486900390559185168152205460ff161515610b8457610b848361198b565b5b610b8e8361194d565b600160a060020a038084166000818152600960209081526040808320600101805488019055888516808452600b83528184203390961684529482529182902080548790039055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001610c14565b5060005b5b9392505050565b600354600160a060020a031681565b60006000610c383361194d565b600160a060020a0333166000908152600960205260409020600201546322581d40905b049150600d5482111515610cd4576040805160208101849052818152600b818301527f6c6f772042616c616e6365000000000000000000000000000000000000000000606082015290517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a1610da8565b60035433600160a060020a039081169116148015610cf3575060115442105b15610d4f576040805160208082526016908201527f546f6b656e73206e6f7420796574207665737465642e00000000000000000000818301529051600080516020611a008339815191529181900360600190a160009150610da8565b50600160a060020a03331660008181526009602052604080822060020180546322581d40860290819003909155600180548690039055600e549151909392859190818181858888f193505050501515610da85760006000fd5b5b5b5090565b60075481565b60045433600160a060020a03908116911614801590610de2575060035433600160a060020a03908116911614155b15610dec57610dfc565b600e839055600f82905560108190555b5b505050565b60025481565b60115481565b600e5481565b60125460ff1681565b600d5481565b600160a060020a0381166000908152600960205260409020600101545b919050565b600f5481565b600160a060020a0381166000908152600960205260409020600181015460038201546002909201549091905b9193909250565b600c5481565b600454600160a060020a031681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f195780601f10610eee57610100808354040283529160200191610f19565b820191906000526020600020905b815481529060010190602001808311610efc57829003601f168201915b505050505081565b604080513460208201528181526008818301527f61646a7573746564000000000000000000000000000000000000000000000000606082015290517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a15b565b60045433600160a060020a039081169116141580610fb8575060015b60125460ff166001811115610fb657fe5b145b15610fc35760006000fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b60035460009033600160a060020a039081169116148015611011575060115442105b1561101e57506000610802565b600160a060020a03331660009081526009602052604090206001015482901080159061104a5750600082115b15611103576110583361194d565b600160a060020a03338116600090815260096020526040808220600101805486900390559185168152205460ff161515611095576110958361198b565b5b61109f8361194d565b600160a060020a038084166000818152600960209081526040918290206001018054870190558151868152915192933316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001610802565b506000610802565b5b92915050565b60045433600160a060020a039081169116141580611141575060015b60125460ff16600181111561113f57fe5b145b1561114c5760006000fd5b60058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161790925560068054928416929091169190911790555b5050565b60005b60125460ff1660018111156111a257fe5b146111ad5760006000fd5b60045433600160a060020a039081169116146111c95760006000fd5b600354600160a060020a0316ff5b565b600554600160a060020a031681565b60105481565b60035460009033600160a060020a039081169116148015611210575060115442105b1561121d57506000610e40565b6112263361194d565b600160a060020a033316600090815260096020526040902060020154151561129e57604080516020808252600c908201527f5a65726f2062616c616e63650000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1506000610e40565b600160a060020a03821660009081526009602052604090205460ff1615156112c9576112c98261198b565b5b6112d38261194d565b600160a060020a0333811660008181526009602090815260408083206002908101805496891685528285209091018054909601909555928252925580518281526014928101929092527f547261736e6665726564204469766964656e64730000000000000000000000008282015251600080516020611a008339815191529181900360600190a15060015b919050565b600160a060020a038083166000908152600b60209081526040808320938516835292905220545b92915050565b600654600160a060020a031681565b60015481565b60055460009081908190600160a060020a0316151561141157604080516020808252600a908201527f636f6e6669672065727200000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b33600160a060020a0381166000908152600960205260409020600101549093501561148957604080516020808252601f908201527f4163636f756e742068617320616c72656164792068617320746f6b656e732100818301529051600080516020611a008339815191529181900360600190a1610dfc565b600554604080516000602091820181905282517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152935193909416955085936370a08231936024808301949391928390030190829087803b15156114fa57fe5b6102c65a03f1151561150857fe5b50506040515191505080151561156b57604080516020808252600d908201527f4e6f7468696e6720746f20646f00000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b8082600160a060020a031663dd62ed3e85306000604051602001526040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b15156115ff57fe5b6102c65a03f1151561160d57fe5b505050604051805190501015611696576040805160208082526028908201527f506c6561736520617070726f7665207468697320636f6e747261637420746f20818301527f7472616e7366657200000000000000000000000000000000000000000000000060608201529051600080516020611a008339815191529181900360800190a1610dfc565b601054600f54015a10156116aa5760006000fd5b600f54600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529283166024820152604481018590529051918516926323b872dd9290916064808201926020929091908290030181600088803b151561172257fe5b87f1151561172c57fe5b5050604080516000602091820181905282517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152935193881695506370a08231945060248082019492918390030190829087803b151561179957fe5b6102c65a03f115156117a757fe5b5050604051511515905061186c57600160a060020a03831660009081526009602052604090205460ff1615156117e0576117e08361198b565b5b600160a060020a0383166000908152600960205260408120620186a083026001820155600301556118118361194d565b60008054820190556040805160208082526015908201527f53756363657373205377697463686564204f7665720000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b6040805160208082526028908201527f5472616e73666572204572726f722120706c6561736520636f6e746163742044818301527f6576207465616d2100000000000000000000000000000000000000000000000060608201529051600080516020611a008339815191529181900360800190a15b5b505050565b60045433600160a060020a039081169116141580611916575060015b60125460ff16600181111561191457fe5b145b156119215760006000fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b600160a060020a0381166000908152600960205260409020600181015460038201805460028054948101805492909503909302019092555490555b50565b600160a060020a0381166000818152600960209081526040808320805460ff191660019081178255818101859055600280830186905554600390920191909155600c805491820190558352600a9091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790555b5056001df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a723058208f9ecb66d84a15962dea7676fcf8ba9cea6e8f5e666ac5a2c5649445feabf8800029
Deployed Bytecode
0x606060405236156101a95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461022b57806313bd53e61461025e57806318160ddd146102825780631d7786e3146102a457806322f16c8d146102c657806323b872dd146102f45780632bc31ca41461032d5780632e92abdd14610359578063313ce5671461037b5780633cebb4d71461039d5780633ed8ff25146103b85780634d22d1d1146103da5780635876d2ef146103fc5780635f437e481461041e5780636b5e1a181461045257806370a0823114610474578063766719f0146104a25780637b510fe8146104c45780638ce25a93146104fe5780638da5cb5b1461052057806395d89b411461054c5780639e90f9aa146105dc578063a6f9dae1146105e6578063a9059cbb14610604578063ae4eba1f14610637578063c40525591461065b578063c741764c1461066d578063c99a975d14610699578063ccf0768a146106bb578063dd62ed3e146106eb578063f9e856ae1461071f578063fa1e4fcb1461074b578063ff5639c41461076d578063ff70fa491461077f575b6102295b600180543490810190915560028054820190556040805160208101929092528082526007828201527f5061796d656e74000000000000000000000000000000000000000000000000006060830152517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a15b565b005b341561023357fe5b61024a600160a060020a036004351660243561079d565b604080519115158252519081900360200190f35b341561026657fe5b61022960ff60043516602435604435606435608435610808565b005b341561028a57fe5b610292610a3a565b60408051918252519081900360200190f35b34156102ac57fe5b610292610a43565b60408051918252519081900360200190f35b34156102ce57fe5b610292600160a060020a0360043516610a49565b60408051918252519081900360200190f35b34156102fc57fe5b61024a600160a060020a0360043581169060243516604435610aac565b604080519115158252519081900360200190f35b341561033557fe5b61033d610c1c565b60408051600160a060020a039092168252519081900360200190f35b341561036157fe5b610292610c2b565b60408051918252519081900360200190f35b341561038357fe5b610292610dae565b60408051918252519081900360200190f35b34156103a557fe5b610229600435602435604435610db4565b005b34156103c057fe5b610292610e02565b60408051918252519081900360200190f35b34156103e257fe5b610292610e08565b60408051918252519081900360200190f35b341561040457fe5b610292610e0e565b60408051918252519081900360200190f35b341561042657fe5b61042e610e14565b6040518082600181111561043e57fe5b60ff16815260200191505060405180910390f35b341561045a57fe5b610292610e1d565b60408051918252519081900360200190f35b341561047c57fe5b610292600160a060020a0360043516610e23565b60408051918252519081900360200190f35b34156104aa57fe5b610292610e45565b60408051918252519081900360200190f35b34156104cc57fe5b6104e0600160a060020a0360043516610e4b565b60408051938452602084019290925282820152519081900360600190f35b341561050657fe5b610292610e7e565b60408051918252519081900360200190f35b341561052857fe5b61033d610e84565b60408051600160a060020a039092168252519081900360200190f35b341561055457fe5b61055c610e93565b6040805160208082528351818301528351919283929083019185019080838382156105a2575b8051825260208311156105a257601f199092019160209182019101610582565b505050905090810190601f1680156105ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610229610f21565b005b34156105ee57fe5b610229600160a060020a0360043516610f89565b005b341561060c57fe5b61024a600160a060020a0360043516602435610fef565b604080519115158252519081900360200190f35b341561063f57fe5b610229600160a060020a0360043581169060243516611112565b005b341561066357fe5b61022961118e565b005b341561067557fe5b61033d6111d9565b60408051600160a060020a039092168252519081900360200190f35b34156106a157fe5b6102926111e8565b60408051918252519081900360200190f35b34156106c357fe5b61024a600160a060020a03600435166111ee565b604080519115158252519081900360200190f35b34156106f357fe5b610292600160a060020a0360043581169060243516611363565b60408051918252519081900360200190f35b341561072757fe5b61033d611390565b60408051600160a060020a039092168252519081900360200190f35b341561075357fe5b61029261139f565b60408051918252519081900360200190f35b341561077557fe5b6102296113a5565b005b341561078757fe5b610229600160a060020a03600435166118e7565b005b600160a060020a033381166000818152600b6020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600454600090819033600160a060020a0390811691161461082857610a31565b600d869055600e859055600f849055601083905560015b60125460ff16600181111561085057fe5b141561085b57610a31565b6012805488919060ff19166001838181111561087357fe5b021790555060015b87600181111561088757fe5b14156108e0576040805160208082526008908201527f4c6f636b696e6721000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610a31565b600091505b600c5482101561094557506000818152600a6020526040902054600160a060020a0316801561093957600160a060020a03811660009081526009602052604081206001810182905560028101829055600301555b5b6001909101906108e5565b600080805560018190556002819055600160a060020a0330163111156109e157600454600e54604051600160a060020a0392831692301631906000818181858888f1935050505015156109e1576040805160208082526006908201527f4552524f52210000000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a15b5b6040805160208082526002908201527f6f6b000000000000000000000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a15b50505050505050565b6322581d405b90565b60005481565b600160a060020a038116600090815260096020526040812054819060ff1615610aa55750600160a060020a03821660009081526009602052604090206001810154600382015460028054930154920302016322581d40815b0491505b5b50919050565b600354600090600160a060020a038581169116148015610acd575060115442105b15610ada57506000610c14565b600160a060020a038416600090815260096020526040902060010154829010801590610b2d5750600160a060020a038085166000908152600b602090815260408083203390941683529290522054829010155b8015610b395750600082115b15610c1057610b478461194d565b600160a060020a03808516600090815260096020526040808220600101805486900390559185168152205460ff161515610b8457610b848361198b565b5b610b8e8361194d565b600160a060020a038084166000818152600960209081526040808320600101805488019055888516808452600b83528184203390961684529482529182902080548790039055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001610c14565b5060005b5b9392505050565b600354600160a060020a031681565b60006000610c383361194d565b600160a060020a0333166000908152600960205260409020600201546322581d40905b049150600d5482111515610cd4576040805160208101849052818152600b818301527f6c6f772042616c616e6365000000000000000000000000000000000000000000606082015290517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a1610da8565b60035433600160a060020a039081169116148015610cf3575060115442105b15610d4f576040805160208082526016908201527f546f6b656e73206e6f7420796574207665737465642e00000000000000000000818301529051600080516020611a008339815191529181900360600190a160009150610da8565b50600160a060020a03331660008181526009602052604080822060020180546322581d40860290819003909155600180548690039055600e549151909392859190818181858888f193505050501515610da85760006000fd5b5b5b5090565b60075481565b60045433600160a060020a03908116911614801590610de2575060035433600160a060020a03908116911614155b15610dec57610dfc565b600e839055600f82905560108190555b5b505050565b60025481565b60115481565b600e5481565b60125460ff1681565b600d5481565b600160a060020a0381166000908152600960205260409020600101545b919050565b600f5481565b600160a060020a0381166000908152600960205260409020600181015460038201546002909201549091905b9193909250565b600c5481565b600454600160a060020a031681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f195780601f10610eee57610100808354040283529160200191610f19565b820191906000526020600020905b815481529060010190602001808311610efc57829003601f168201915b505050505081565b604080513460208201528181526008818301527f61646a7573746564000000000000000000000000000000000000000000000000606082015290517f9e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d9181900360800190a15b565b60045433600160a060020a039081169116141580610fb8575060015b60125460ff166001811115610fb657fe5b145b15610fc35760006000fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b60035460009033600160a060020a039081169116148015611011575060115442105b1561101e57506000610802565b600160a060020a03331660009081526009602052604090206001015482901080159061104a5750600082115b15611103576110583361194d565b600160a060020a03338116600090815260096020526040808220600101805486900390559185168152205460ff161515611095576110958361198b565b5b61109f8361194d565b600160a060020a038084166000818152600960209081526040918290206001018054870190558151868152915192933316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001610802565b506000610802565b5b92915050565b60045433600160a060020a039081169116141580611141575060015b60125460ff16600181111561113f57fe5b145b1561114c5760006000fd5b60058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161790925560068054928416929091169190911790555b5050565b60005b60125460ff1660018111156111a257fe5b146111ad5760006000fd5b60045433600160a060020a039081169116146111c95760006000fd5b600354600160a060020a0316ff5b565b600554600160a060020a031681565b60105481565b60035460009033600160a060020a039081169116148015611210575060115442105b1561121d57506000610e40565b6112263361194d565b600160a060020a033316600090815260096020526040902060020154151561129e57604080516020808252600c908201527f5a65726f2062616c616e63650000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1506000610e40565b600160a060020a03821660009081526009602052604090205460ff1615156112c9576112c98261198b565b5b6112d38261194d565b600160a060020a0333811660008181526009602090815260408083206002908101805496891685528285209091018054909601909555928252925580518281526014928101929092527f547261736e6665726564204469766964656e64730000000000000000000000008282015251600080516020611a008339815191529181900360600190a15060015b919050565b600160a060020a038083166000908152600b60209081526040808320938516835292905220545b92915050565b600654600160a060020a031681565b60015481565b60055460009081908190600160a060020a0316151561141157604080516020808252600a908201527f636f6e6669672065727200000000000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b33600160a060020a0381166000908152600960205260409020600101549093501561148957604080516020808252601f908201527f4163636f756e742068617320616c72656164792068617320746f6b656e732100818301529051600080516020611a008339815191529181900360600190a1610dfc565b600554604080516000602091820181905282517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152935193909416955085936370a08231936024808301949391928390030190829087803b15156114fa57fe5b6102c65a03f1151561150857fe5b50506040515191505080151561156b57604080516020808252600d908201527f4e6f7468696e6720746f20646f00000000000000000000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b8082600160a060020a031663dd62ed3e85306000604051602001526040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b15156115ff57fe5b6102c65a03f1151561160d57fe5b505050604051805190501015611696576040805160208082526028908201527f506c6561736520617070726f7665207468697320636f6e747261637420746f20818301527f7472616e7366657200000000000000000000000000000000000000000000000060608201529051600080516020611a008339815191529181900360800190a1610dfc565b601054600f54015a10156116aa5760006000fd5b600f54600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529283166024820152604481018590529051918516926323b872dd9290916064808201926020929091908290030181600088803b151561172257fe5b87f1151561172c57fe5b5050604080516000602091820181905282517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152935193881695506370a08231945060248082019492918390030190829087803b151561179957fe5b6102c65a03f115156117a757fe5b5050604051511515905061186c57600160a060020a03831660009081526009602052604090205460ff1615156117e0576117e08361198b565b5b600160a060020a0383166000908152600960205260408120620186a083026001820155600301556118118361194d565b60008054820190556040805160208082526015908201527f53756363657373205377697463686564204f7665720000000000000000000000818301529051600080516020611a008339815191529181900360600190a1610dfc565b6040805160208082526028908201527f5472616e73666572204572726f722120706c6561736520636f6e746163742044818301527f6576207465616d2100000000000000000000000000000000000000000000000060608201529051600080516020611a008339815191529181900360800190a15b5b505050565b60045433600160a060020a039081169116141580611916575060015b60125460ff16600181111561191457fe5b145b156119215760006000fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b600160a060020a0381166000908152600960205260409020600181015460038201805460028054948101805492909503909302019092555490555b50565b600160a060020a0381166000818152600960209081526040808320805460ff191660019081178255818101859055600280830186905554600390920191909155600c805491820190558352600a9091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790555b5056001df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a723058208f9ecb66d84a15962dea7676fcf8ba9cea6e8f5e666ac5a2c5649445feabf8800029
Swarm Source
bzzr://8f9ecb66d84a15962dea7676fcf8ba9cea6e8f5e666ac5a2c5649445feabf880
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.