ETH Price: $2,345.87 (+2.51%)

Token

C4F FavorCoins (C4F)
 

Overview

Max Total Supply

100,000,000,000 C4F

Holders

1,055

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,000 C4F

Value
$0.00
0x6a80c5b68d4d058218eb26d33c454828aa4e3766
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
C4FToken

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-23
*/

pragma solidity ^0.4.18;

// ----------------------------------------------------------------------------
// 'C4F' Coins4Favors contracts
//
// contracts for C4FEscrow and C4FToken Crowdsale
//
// (c) C4F Ltd Hongkong 2018
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function mul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}


// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}


// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;
    address public newOwner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    function Owned() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
    
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

// ----------------------------------------------------------------------------
// 'C4F' FavorEscrow contract
//
// Escrow contract for favor request
// allows to reserve tokens till a favor is completed, cancelled or arbitrated
// handles requester and provider interaction, payout, cancellation and
// arbitration if needed.
//
// (c) C4F Ltd Hongkong 2018
// ----------------------------------------------------------------------------

contract C4FEscrow {

    using SafeMath for uint;
    
    address public owner;
    address public requester;
    address public provider;

    uint256 public startTime;
    uint256 public closeTime;
    uint256 public deadline;
    
    uint256 public C4FID;
    uint8   public status;
    bool    public requesterLocked;
    bool    public providerLocked;
    bool    public providerCompleted;
    bool    public requesterDisputed;
    bool    public providerDisputed;
    uint8   public arbitrationCosts;

    event ownerChanged(address oldOwner, address newOwner);   
    event deadlineChanged(uint256 oldDeadline, uint256 newDeadline);
    event favorDisputed(address disputer);
    event favorUndisputed(address undisputer);
    event providerSet(address provider);
    event providerLockSet(bool lockstat);
    event providerCompletedSet(bool completed_status);
    event requesterLockSet(bool lockstat);
    event favorCompleted(address provider, uint256 tokenspaid);
    event favorCancelled(uint256 tokensreturned);
    event tokenOfferChanged(uint256 oldValue, uint256 newValue);
    event escrowArbitrated(address provider, uint256 coinsreturned, uint256 fee);

// ----------------------------------------------------------------------------
// modifiers used in this contract to restrict function calls
// ----------------------------------------------------------------------------

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }   

    modifier onlyRequester {
        require(msg.sender == requester);
        _;
    }   
    
    modifier onlyProvider {
        require(msg.sender == provider);
        _;
    }   

    modifier onlyOwnerOrRequester {
        require((msg.sender == owner) || (msg.sender == requester)) ;
        _;
    }   
    
    modifier onlyOwnerOrProvider {
        require((msg.sender == owner) || (msg.sender == provider)) ;
        _;        
    }
    
    modifier onlyProviderOrRequester {
        require((msg.sender == requester) || (msg.sender == provider)) ;
        _;        
    }

    // ----------------------------------------------------------------------------
    // Constructor
    // ----------------------------------------------------------------------------
    function C4FEscrow(address newOwner, uint256 ID, address req, uint256 deadl, uint8 arbCostPercent) public {
        owner       = newOwner; // main contract
        C4FID       = ID;
        requester   = req;
        provider    = address(0);
        startTime   = now;
        deadline    = deadl;
        status      = 1;        // 1 = open, 2 = cancelled, 3=closed, 4=arbitrated
        arbitrationCosts    = arbCostPercent;
        requesterLocked     = false;
        providerLocked      = false;
        providerCompleted   = false;
        requesterDisputed   = false;
        providerDisputed    = false;
    }
    
    // ----------------------------------------------------------------------------
    // returns the owner of the Escrow contract. This is the main C4F Token contract
    // ----------------------------------------------------------------------------
    function getOwner() public view returns (address ownner) {
        return owner;
    } 
    
    function setOwner(address newOwner) public onlyOwner returns (bool success) {
        require(newOwner != address(0));
        ownerChanged(owner,newOwner);
        owner = newOwner;
        return true;
    }
    // ----------------------------------------------------------------------------
    // returns the Requester of the Escrow contract. This is the originator of the favor request
    // ----------------------------------------------------------------------------
    function getRequester() public view returns (address req) {
        return requester;
    }

    // ----------------------------------------------------------------------------
    // returns the Provider of the Escrow contract. This is the favor provider
    // ----------------------------------------------------------------------------
    function getProvider() public view returns (address prov) {
        return provider;
    }

    // ----------------------------------------------------------------------------
    // returns the startTime of the Escrow contract which is the time it was created
    // ----------------------------------------------------------------------------
    function getStartTime() public view returns (uint256 st) {
        return startTime;
    }    

    // ----------------------------------------------------------------------------
    // returns the Deadline of the Escrow contract by which completion is needed
    // Reqeuster can cancel the Escrow 12 hours after deadline expires if favor
    // is not marked as completed by provider
    // ----------------------------------------------------------------------------
    function getDeadline() public view returns (uint256 actDeadline) {
        actDeadline = deadline;
        return actDeadline;
    }
    
    // ----------------------------------------------------------------------------
    // adjusts the Deadline of the Escrow contract by which completion is needed
    // Reqeuster can only change this till a provider accepted (locked) the contract
    // ----------------------------------------------------------------------------
    function changeDeadline(uint newDeadline) public onlyRequester returns (bool success) {
        // deadline can only be changed if not locked by provider and not completed
        require ((!providerLocked) && (!providerDisputed) && (!providerCompleted) && (status==1));
        deadlineChanged(newDeadline, deadline);
        deadline = newDeadline;
        return true;
    }

    // ----------------------------------------------------------------------------
    // returns the status of the Escrow contract
    // ----------------------------------------------------------------------------
    function getStatus() public view returns (uint8 s) {
        return status;
    }

    // ----------------------------------------------------------------------------
    // Initiates dispute of the Escrow contract. Once requester or provider disputeFavor
    // because they cannot agree on completion, the C4F system can arbitrate the Escrow
    // based on the internal juror system.
    // ----------------------------------------------------------------------------
    function disputeFavor() public onlyProviderOrRequester returns (bool success) {
        if(msg.sender == requester) {
            requesterDisputed = true;
        }
        if(msg.sender == provider) {
            providerDisputed = true;
            providerLocked = true;
        }
        favorDisputed(msg.sender);
        return true;
    }
    // ----------------------------------------------------------------------------
    // Allows to take back a dispute on the Escrow if conflict has been resolved
    // ----------------------------------------------------------------------------
    function undisputeFavor() public onlyProviderOrRequester returns (bool success) {
        if(msg.sender == requester) {
            requesterDisputed = false;
        }
        if(msg.sender == provider) {
            providerDisputed = false;
        }
        favorUndisputed(msg.sender);
        return true;
    }
    
    // ----------------------------------------------------------------------------
    // allows to set the address of the provider for the Favor
    // this can be done by the requester or the C4F system
    // once the provider accepts, the providerLock flag disables changes to this
    // ----------------------------------------------------------------------------
    function setProvider(address newProvider) public onlyOwnerOrRequester returns (bool success) {
        // can only change provider if not locked by current provider
        require(!providerLocked);
        require(!requesterLocked);
        provider = newProvider;
        providerSet(provider);
        return true;
    }
    
    // ----------------------------------------------------------------------------
    // switches the ProviderLock on or off. Once provider lock is switched on, 
    // it means the provider has formally accepted the offer and changes are 
    // blocked
    // ----------------------------------------------------------------------------
    function setProviderLock(bool lock) public onlyOwnerOrProvider returns (bool res) {
        providerLocked = lock;
        providerLockSet(lock);
        return providerLocked;
    }

    // ----------------------------------------------------------------------------
    // allows to set Favor to completed from Provider view, indicating that 
    // provider sess Favor as delivered
    // ----------------------------------------------------------------------------
    function setProviderCompleted(bool c) public onlyOwnerOrProvider returns (bool res) {
        providerCompleted = c;
        providerCompletedSet(c);
        return c;
    }
    
    // ----------------------------------------------------------------------------
    // allows to set requester lock, indicating requester accepted favor provider
    // ----------------------------------------------------------------------------
    function setRequesterLock(bool lock) public onlyOwnerOrRequester returns (bool res) {
        requesterLocked = lock;
        requesterLockSet(lock);
        return requesterLocked;
    }
    

    function getRequesterLock() public onlyOwnerOrRequester view returns (bool res) {
        res = requesterLocked;
        return res;
    }


    // ----------------------------------------------------------------------------
    // allows the C4F system to change the status of an Escrow contract
    // ----------------------------------------------------------------------------
    function setStatus(uint8 newStatus) public onlyOwner returns (uint8 stat) {
        status = newStatus;    
        stat = status;
        return stat;
    }

    // ----------------------------------------------------------------------------
    // returns the current Token value of the escrow for competing the favor
    // this is the token balance of the escrow contract in the main contract
    // ----------------------------------------------------------------------------
    function getTokenValue() public view returns (uint256 tokens) {
        C4FToken C4F = C4FToken(owner);
        return C4F.balanceOf(address(this));
    }

    // ----------------------------------------------------------------------------
    // completes the favor Escrow and pays out the tokens minus the commission fee
    // ----------------------------------------------------------------------------
    function completeFavor() public onlyRequester returns (bool success) {
        // check if provider has been set
        require(provider != address(0));
        
        // payout tokens to provider with commission
        uint256 actTokenvalue = getTokenValue();
        C4FToken C4F = C4FToken(owner);
        if(!C4F.transferWithCommission(provider, actTokenvalue)) revert();
        closeTime = now;
        status = 3;
        favorCompleted(provider,actTokenvalue);
        return true;
    }

    // ----------------------------------------------------------------------------
    // this function cancels a favor request on behalf of the requester
    // only possible as long as no provider accepted the contract or 12 hours
    // after the deadline if the provider did not indicate completion or disputed
    // ----------------------------------------------------------------------------
    function cancelFavor() public onlyRequester returns (bool success) {
        // cannot cancel if locked by provider unless deadline expired by 12 hours and not completed/disputed
        require((!providerLocked) || ((now > deadline.add(12*3600)) && (!providerCompleted) && (!providerDisputed)));
        // cannot cancel after completed or arbitrated
        require(status==1);
        // send tokens back to requester
        uint256 actTokenvalue = getTokenValue();
        C4FToken C4F = C4FToken(owner);
        if(!C4F.transfer(requester,actTokenvalue)) revert();
        closeTime = now;
        status = 2;
        favorCancelled(actTokenvalue);
        return true;
    }
    
    // ----------------------------------------------------------------------------
    // allows the favor originator to reduce the token offer
    // This can only be done until a provider has accepted (locked) the favor request
    // ----------------------------------------------------------------------------
    function changeTokenOffer(uint256 newOffer) public onlyRequester returns (bool success) {
        // cannot change if locked by provider
        require((!providerLocked) && (!providerDisputed) && (!providerCompleted));
        // cannot change if cancelled, closed or arbitrated
        require(status==1);
        // only use for reducing tokens (to increase simply transfer tokens to contract)
        uint256 actTokenvalue = getTokenValue();
        require(newOffer < actTokenvalue);
        // cannot set to 0, use cancel to do that
        require(newOffer > 0);
        // pay back tokens to reach new offer level
        C4FToken C4F = C4FToken(owner);
        if(!C4F.transfer(requester, actTokenvalue.sub(newOffer))) revert();
        tokenOfferChanged(actTokenvalue,newOffer);
        return true;
    }
    
    // ----------------------------------------------------------------------------
    // arbitration can be done by the C4F system once requester or provider have
    // disputed the favor contract. An independent juror system on the platform 
    // will vote on the outcome and define a split of the tokens between the two
    // parties. The jurors get a percentage which is preset in the contratct for
    // the arbitration
    // ----------------------------------------------------------------------------
    function arbitrateC4FContract(uint8 percentReturned) public onlyOwner returns (bool success) {
        // can only arbitrate if one of the two parties has disputed 
        require((providerDisputed) || (requesterDisputed));
        // C4F System owner can arbitrate and provide a split of tokens between 0-100%
        uint256 actTokens = getTokenValue();
        
        // calc. arbitration fee based on percent costs
        uint256 arbitrationTokens = actTokens.mul(arbitrationCosts);
        arbitrationTokens = arbitrationTokens.div(100);
        // subtract these from the tokens to be distributed between requester and provider
        actTokens = actTokens.sub(arbitrationTokens);
        
        // now split the tokens up using provided percentage
        uint256 requesterTokens = actTokens.mul(percentReturned);
        requesterTokens = requesterTokens.div(100);
        // actTokens to hold what gets forwarded to provider
        actTokens = actTokens.sub(requesterTokens);
        
        // distribute the Tokens
        C4FToken C4F = C4FToken(owner);
        // arbitration tokens go to commissiontarget of master contract
        address commissionTarget = C4F.getCommissionTarget();
        // requester gets refunded his split
        if(!C4F.transfer(requester, requesterTokens)) revert();
        // provider gets his split of tokens
        if(!C4F.transfer(provider, actTokens)) revert();
        // arbitration fee to system for distribution
        if(!C4F.transfer(commissionTarget, arbitrationTokens)) revert();
        
        // set status & closeTime
        status = 4;
        closeTime = now;
        success = true;
        escrowArbitrated(provider,requesterTokens,arbitrationTokens);
        return success;
    }

}

// ----------------------------------------------------------------------------
// 'C4F' 'Coins4Favors FavorCoin contract
//
// Symbol      : C4F
// Name        : FavorCoin
// Total supply: 100,000,000,000.000000000000000000
// Decimals    : 18
//
// includes the crowdsale price, PreICO bonus structure, limits on sellable tokens
// function to pause sale, commission fee transfer and favorcontract management
//
// (c) C4F Ltd Hongkong 2018
// ----------------------------------------------------------------------------

contract C4FToken is ERC20Interface, Owned {
    using SafeMath for uint;

    string public symbol;
    string public  name;
    uint8 public decimals;
    uint8 public _crowdsalePaused;
    uint public _totalSupply;
    uint public _salesprice;
    uint public _endOfICO;
    uint public _endOfPreICO;
    uint public _beginOfICO;
    uint public _bonusTime1;
    uint public _bonusTime2;
    uint public _bonusRatio1;
    uint public _bonusRatio2;
    uint public _percentSoldInPreICO;
    uint public _maxTokenSoldPreICO;
    uint public _percentSoldInICO;
    uint public _maxTokenSoldICO;
    uint public _total_sold;
    uint public _commission;
    uint8 public _arbitrationPercent;
    address public _commissionTarget;
    uint public _minimumContribution;
    address[]   EscrowAddresses;
    uint public _escrowIndex;

    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
    mapping(address => uint) whitelisted_amount;
    mapping(address => bool) C4FEscrowContracts;
    
    
    event newEscrowCreated(uint ID, address contractAddress, address requester);   
    event ICOStartSet(uint256 starttime);
    event ICOEndSet(uint256 endtime);
    event PreICOEndSet(uint256 endtime);
    event BonusTime1Set(uint256 bonustime);
    event BonusTime2Set(uint256 bonustime);
    event accountWhitelisted(address account, uint256 limit);
    event crowdsalePaused(bool paused);
    event crowdsaleResumed(bool resumed);
    event commissionSet(uint256 commission);
    event commissionTargetSet(address target);
    event arbitrationPctSet(uint8 arbpercent);
    event contractOwnerChanged(address escrowcontract, address newOwner);
    event contractProviderChanged(address C4Fcontract, address provider);
    event contractArbitrated(address C4Fcontract, uint8 percentSplit);
    
    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function C4FToken() public {
        symbol          = "C4F";
        name            = "C4F FavorCoins";
        decimals        = 18;
        
        _totalSupply    = 100000000000 * 10**uint(decimals);

        _salesprice     = 2000000;      // C4Fs per 1 Eth
        _minimumContribution = 0.05 * 10**18;    // minimum amount is 0.05 Ether
        
        _endOfICO       = 1532908800;   // end of ICO is 30.07.18
        _beginOfICO     = 1526342400;   // begin is 15.05.18
        _bonusRatio1    = 110;          // 10% Bonus in second week of PreICO
        _bonusRatio2    = 125;          // 25% Bonus in first week of PreICO
        _bonusTime1     = 1527638400;   // prior to 30.05.18 add bonusRatio1
        _bonusTime2     = 1526947200;   // prior to 22.05.18 add bonusRatio2
        _endOfPreICO    = 1527811200;   // Pre ICO ends 01.06.2018
        
        _percentSoldInPreICO = 10;      // we only offer 10% of total Supply during PreICO
        _maxTokenSoldPreICO = _totalSupply.mul(_percentSoldInPreICO);
        _maxTokenSoldPreICO = _maxTokenSoldPreICO.div(100);
        
        _percentSoldInICO   = 60;      // in addition to 10% sold in PreICO, 60% sold in ICO 
        _maxTokenSoldICO    = _totalSupply.mul(_percentSoldInPreICO.add(_percentSoldInICO));
        _maxTokenSoldICO    = _maxTokenSoldICO.div(100);
        
        _total_sold         = 0;            // total coins sold 
        
        _commission         = 0;            // no comission on transfers 
        _commissionTarget   = owner;        // default any commission goes to the owner of the contract
        _arbitrationPercent = 10;           // default costs for arbitration of an escrow contract
                                            // is transferred to escrow contract at time of creation and kept there
        
        _crowdsalePaused    = 0;

        balances[owner]     = _totalSupply;
        Transfer(address(0), owner, _totalSupply);
    }

    // ------------------------------------------------------------------------
    // notLocked: ensure no coins are moved by owners prior to end of ICO
    // ------------------------------------------------------------------------
    
    modifier notLocked {
        require((msg.sender == owner) || (now >= _endOfICO));
        _;
    }
    
    // ------------------------------------------------------------------------
    // onlyDuringICO: FavorCoins can only be bought via contract during ICO
    // ------------------------------------------------------------------------
    
    modifier onlyDuringICO {
        require((now >= _beginOfICO) && (now <= _endOfICO));
        _;
    }
    
    // ------------------------------------------------------------------------
    // notPaused: ability to stop crowdsale if problems occur
    // ------------------------------------------------------------------------
    
    modifier notPaused {
        require(_crowdsalePaused == 0);
        _;
    }
    
    // ------------------------------------------------------------------------
    // set ICO and PRE ICO Dates
    // ------------------------------------------------------------------------

    function setICOStart(uint ICOdate) public onlyOwner returns (bool success) {
        _beginOfICO  = ICOdate;
        ICOStartSet(_beginOfICO);
        return true;
    }
    
    function setICOEnd(uint ICOdate) public onlyOwner returns (bool success) {
        _endOfICO  = ICOdate;
        ICOEndSet(_endOfICO);
        return true;
    }
    
    function setPreICOEnd(uint ICOdate) public onlyOwner returns (bool success) {
        _endOfPreICO = ICOdate;
        PreICOEndSet(_endOfPreICO);
        return true;
    }
    
    function setBonusDate1(uint ICOdate) public onlyOwner returns (bool success) {
        _bonusTime1 = ICOdate;
        BonusTime1Set(_bonusTime1);
        return true;
    }

    function setBonusDate2(uint ICOdate) public onlyOwner returns (bool success) {
        _bonusTime2 = ICOdate;
        BonusTime2Set(_bonusTime2);
        return true;
    }

    // ------------------------------------------------------------------------
    // Total supply
    // ------------------------------------------------------------------------
    function totalSupply() public constant returns (uint) {
        return _totalSupply  - balances[address(0)];
    }


    // ------------------------------------------------------------------------
    // Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public constant returns (uint balance) {
        return balances[tokenOwner];
    }

    // ------------------------------------------------------------------------
    // Whitelist address up to maximum spending (AML and KYC)
    // ------------------------------------------------------------------------
    function whitelistAccount(address account, uint limit) public onlyOwner {
        whitelisted_amount[account] = limit*10**18;
        accountWhitelisted(account,limit);
    }
    
    // ------------------------------------------------------------------------
    // return maximum remaining whitelisted amount for account 
    // ------------------------------------------------------------------------
    function getWhitelistLimit(address account) public constant returns (uint limit) {
        return whitelisted_amount[account];
    }

    // ------------------------------------------------------------------------
    // Pause crowdsale in case of any problems
    // ------------------------------------------------------------------------
    function pauseCrowdsale() public onlyOwner returns (bool success) {
        _crowdsalePaused = 1;
        crowdsalePaused(true);
        return true;
    }

    function resumeCrowdsale() public onlyOwner returns (bool success) {
        _crowdsalePaused = 0;
        crowdsaleResumed(true);
        return true;
    }
    
    
    // ------------------------------------------------------------------------
    // Commission can be added later to a percentage of the transferred
    // C4F tokens for operating costs of the system. Percentage is capped at 2%
    // ------------------------------------------------------------------------
    function setCommission(uint comm) public onlyOwner returns (bool success) {
        require(comm < 200); // we allow a maximum of 2% commission
        _commission = comm;
        commissionSet(comm);
        return true;
    }

    function setArbitrationPercentage(uint8 arbitPct) public onlyOwner returns (bool success) {
        require(arbitPct <= 15); // we allow a maximum of 15% arbitration costs
        _arbitrationPercent = arbitPct;
        arbitrationPctSet(_arbitrationPercent);
        return true;
    }

    function setCommissionTarget(address ct) public onlyOwner returns (bool success) {
        _commissionTarget = ct;
        commissionTargetSet(_commissionTarget);
        return true;
    }
    
    function getCommissionTarget() public view returns (address ct) {
        ct = _commissionTarget;
        return ct;
    }

    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // - users cannot transfer C4Fs prior to close of ICO
    // - only owner can transfer anytime to do airdrops, etc.
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) public notLocked notPaused returns (bool success) {
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        Transfer(msg.sender, to, tokens);
        return true;
    }
    
    // ------------------------------------------------------------------------
    // this function will be used by the C4F app to charge a Commission
    // on transfers later
    // ------------------------------------------------------------------------
    function transferWithCommission(address to, uint tokens) public notLocked notPaused returns (bool success) {
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        // split tokens using commission Percentage
        uint comTokens = tokens.mul(_commission);
        comTokens = comTokens.div(10000);
        // adjust balances
        balances[to] = balances[to].add(tokens.sub(comTokens));
        balances[_commissionTarget] = balances[_commissionTarget].add(comTokens);
        // trigger events
        Transfer(msg.sender, to, tokens.sub(comTokens));
        Transfer(msg.sender, _commissionTarget, comTokens);
        return true;
    }

    
    // ------------------------------------------------------------------------
    // TransferInternal handles Transfer of Tokens from Owner during ICO and Pre-ICO
    // ------------------------------------------------------------------------
    function transferInternal(address to, uint tokens) private returns (bool success) {
        balances[owner] = balances[owner].sub(tokens);
        balances[to] = balances[to].add(tokens);
        Transfer(msg.sender, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account
    //
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces 
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) public notLocked notPaused returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Transfer `tokens` from the `from` account to the `to` account
    // not possivbe before end of ICO
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) public notLocked notPaused returns (bool success) {
        // check allowance is high enough
        require(allowed[from][msg.sender] >= tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        balances[from] = balances[from].sub(tokens);
        balances[to] = balances[to].add(tokens);
        Transfer(from, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }

    // ------------------------------------------------------------------------
    // startEscrow FavorContract
    // starts an escrow contract and transfers the tokens into the contract
    // ------------------------------------------------------------------------
    
    function startFavorEscrow(uint256 ID, uint256 deadl, uint tokens) public notLocked returns (address C4FFavorContractAddr) {
        // check if sufficient coins available
        require(balanceOf(msg.sender) >= tokens);
        // create contract
        address newFavor = new C4FEscrow(address(this), ID, msg.sender, deadl, _arbitrationPercent);
        // add to list of C4FEscrowContratcs
        EscrowAddresses.push(newFavor);
        C4FEscrowContracts[newFavor] = true;
        // transfer tokens to contract
        if(!transfer(newFavor, tokens)) revert();
        C4FFavorContractAddr = newFavor;
        newEscrowCreated(ID, newFavor, msg.sender);
        return C4FFavorContractAddr;
    }

    function isFavorEscrow(uint id, address c4fes) public view returns (bool res) {
        if(EscrowAddresses[id] == c4fes) {
                res = true;
            } else {
                res = false;
            }
        return res;
    }
    
    function getEscrowCount() public view returns (uint) {
        return EscrowAddresses.length;
    }
    
    function getEscrowAddress(uint ind) public view returns(address esa) {
        require (ind <= EscrowAddresses.length);
        esa = EscrowAddresses[ind];
        return esa;
    }
    
    
    // use this function to allow C4F System to adjust owner of C4FEscrows 
    function setC4FContractOwner(address C4Fcontract, address newOwner) public onlyOwner returns (bool success) {
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setProvider from there
        if(!c4fec.setOwner(newOwner)) revert();
        contractOwnerChanged(C4Fcontract,newOwner);
        return true;
    }
    
    // use this function to allow C4F System to adjust provider of C4F Favorcontract    
    function setC4FContractProvider(address C4Fcontract, address provider) public onlyOwner returns (bool success) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setProvider from there
        if(!c4fec.setProvider(provider)) revert();
        contractProviderChanged(C4Fcontract, provider);
        return true;
    }
    
    // use this function to allow C4F System to adjust providerLock 
    function setC4FContractProviderLock(address C4Fcontract, bool lock) public onlyOwner returns (bool res) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setProviderLock from there
        res = c4fec.setProviderLock(lock);
        return res;
    }
    
    // use this function to allow C4F System to adjust providerCompleted status
    function setC4FContractProviderCompleted(address C4Fcontract, bool completed) public onlyOwner returns (bool res) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setProviderCompleted from there
        res = c4fec.setProviderCompleted(completed);
        return res;
    }
    
        // use this function to allow C4F System to adjust providerLock 
    function setC4FContractRequesterLock(address C4Fcontract, bool lock) public onlyOwner returns (bool res) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setRequesterLock from there
        res = c4fec.setRequesterLock(lock);
        return res;
    }

    function setC4FContractStatus(address C4Fcontract, uint8 newStatus) public onlyOwner returns (uint8 s) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call setStatus from there
        s = c4fec.setStatus(newStatus);
        return s;
    }
    
    function arbitrateC4FContract(address C4Fcontract, uint8 percentSplit) public onlyOwner returns (bool success) {
        // ensure this is a C4FEscrowContract initiated by C4F system
        require(C4FEscrowContracts[C4Fcontract]);
        C4FEscrow c4fec = C4FEscrow(C4Fcontract);
        // call arbitration
        if(!c4fec.arbitrateC4FContract(percentSplit)) revert();
        contractArbitrated(C4Fcontract, percentSplit);
        return true;
    }

    
    // ------------------------------------------------------------------------
    // Convert to C4Fs using salesprice and bonus period and forward Eth to owner
    // ------------------------------------------------------------------------
    function () public onlyDuringICO notPaused payable  {
        // check bonus ratio
        uint bonusratio = 100;
        // check for second week bonus
        if(now <= _bonusTime1) {
            bonusratio = _bonusRatio1;    
        }
        // check for first week bonus
        if(now <= _bonusTime2) {
            bonusratio = _bonusRatio2;    
        }
        
        // minimum contribution met ?
        require (msg.value >= _minimumContribution);
        
        // send C4F tokens back to sender based on Ether received
        if (msg.value > 0) {
            
            // check if whitelisted and sufficient contribution left (AML & KYC)
            if(!(whitelisted_amount[msg.sender] >= msg.value)) revert();
            // reduce remaining contribution limit
            whitelisted_amount[msg.sender] = whitelisted_amount[msg.sender].sub(msg.value);
            
            // determine amount of C4Fs 
            uint256 token_amount = msg.value.mul(_salesprice);
            token_amount = token_amount.mul(bonusratio);
            token_amount = token_amount.div(100);
            
            uint256 new_total = _total_sold.add(token_amount);
            // check if PreICO volume sold off 
            if(now <= _endOfPreICO){
                // check if we are above the limit with this transfer, then bounce
                if(new_total > _maxTokenSoldPreICO) revert();
            }
            
            // check if exceeding total ICO sale tokens
            if(new_total > _maxTokenSoldICO) revert();
            
            // transfer tokens from owner account to sender
            if(!transferInternal(msg.sender, token_amount)) revert();
            _total_sold = new_total;
            // forward received ether to owner account
            if (!owner.send(msg.value)) revert(); // also reverts the transfer.
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"ICOdate","type":"uint256"}],"name":"setICOStart","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEscrowCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_arbitrationPercent","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_bonusTime1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"newStatus","type":"uint8"}],"name":"setC4FContractStatus","outputs":[{"name":"s","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_percentSoldInICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"ind","type":"uint256"}],"name":"getEscrowAddress","outputs":[{"name":"esa","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ICOdate","type":"uint256"}],"name":"setPreICOEnd","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"percentSplit","type":"uint8"}],"name":"arbitrateC4FContract","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"},{"name":"c4fes","type":"address"}],"name":"isFavorEscrow","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"comm","type":"uint256"}],"name":"setCommission","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ID","type":"uint256"},{"name":"deadl","type":"uint256"},{"name":"tokens","type":"uint256"}],"name":"startFavorEscrow","outputs":[{"name":"C4FFavorContractAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"arbitPct","type":"uint8"}],"name":"setArbitrationPercentage","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"provider","type":"address"}],"name":"setC4FContractProvider","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"getWhitelistLimit","outputs":[{"name":"limit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_crowdsalePaused","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_percentSoldInPreICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ICOdate","type":"uint256"}],"name":"setBonusDate1","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"lock","type":"bool"}],"name":"setC4FContractProviderLock","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_maxTokenSoldICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_bonusRatio2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"lock","type":"bool"}],"name":"setC4FContractRequesterLock","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_minimumContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_beginOfICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ICOdate","type":"uint256"}],"name":"setICOEnd","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCommissionTarget","outputs":[{"name":"ct","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"limit","type":"uint256"}],"name":"whitelistAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pauseCrowdsale","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_salesprice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_endOfICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_maxTokenSoldPreICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_escrowIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_total_sold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_endOfPreICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_bonusRatio1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_commissionTarget","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_bonusTime2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ct","type":"address"}],"name":"setCommissionTarget","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferWithCommission","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_commission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"newOwner","type":"address"}],"name":"setC4FContractOwner","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"C4Fcontract","type":"address"},{"name":"completed","type":"bool"}],"name":"setC4FContractProviderCompleted","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"resumeCrowdsale","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"ICOdate","type":"uint256"}],"name":"setBonusDate2","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ID","type":"uint256"},{"indexed":false,"name":"contractAddress","type":"address"},{"indexed":false,"name":"requester","type":"address"}],"name":"newEscrowCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"starttime","type":"uint256"}],"name":"ICOStartSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"endtime","type":"uint256"}],"name":"ICOEndSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"endtime","type":"uint256"}],"name":"PreICOEndSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonustime","type":"uint256"}],"name":"BonusTime1Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonustime","type":"uint256"}],"name":"BonusTime2Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"limit","type":"uint256"}],"name":"accountWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"paused","type":"bool"}],"name":"crowdsalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"resumed","type":"bool"}],"name":"crowdsaleResumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commission","type":"uint256"}],"name":"commissionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"}],"name":"commissionTargetSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"arbpercent","type":"uint8"}],"name":"arbitrationPctSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"escrowcontract","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"contractOwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"C4Fcontract","type":"address"},{"indexed":false,"name":"provider","type":"address"}],"name":"contractProviderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"C4Fcontract","type":"address"},{"indexed":false,"name":"percentSplit","type":"uint8"}],"name":"contractArbitrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

606060405234156200001057600080fd5b60008054600160a060020a03191633600160a060020a031617905560408051908101604052600381527f43344600000000000000000000000000000000000000000000000000000000006020820152600290805162000074929160200190620002c8565b5060408051908101604052600e81527f433446204661766f72436f696e7300000000000000000000000000000000000060208201526003908051620000be929160200190620002c8565b5060048054601260ff19909116179081905560ff16600a90810a64174876e800026005819055621e848060065566b1a2bc2ec50000601555635b5e5500600755635afa2300600955606e600c55607d600d55635b0de9808255635b035d80600b55635b108c80600855600e829055620001459164010000000062000266810262000ab61704565b600f8190556200016590606464010000000062000ae16200029482021704565b600f55603c6010819055600e54620001a99162000191919064010000000062000b02620002b782021704565b6005549064010000000062000ab66200026682021704565b6011819055620001c990606464010000000062000ae16200029482021704565b60115560006012819055601381905580546014805460ff19600160a060020a03938416610100810261010060a860020a03199093169290921716600a179091556004805461ff001916905560055490835260186020526040808420829055835490921692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91905190815260200160405180910390a36200036d565b8181028215806200028257508183828115156200027f57fe5b04145b15156200028e57600080fd5b92915050565b6000808211620002a357600080fd5b8183811515620002af57fe5b049392505050565b818101828110156200028e57600080fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030b57805160ff19168380011785556200033b565b828001600101855582156200033b579182015b828111156200033b5782518255916020019190600101906200031e565b50620003499291506200034d565b5090565b6200036a91905b8082111562000349576000815560010162000354565b90565b61350b806200037d6000396000f30060606040526004361061029a5763ffffffff60e060020a60003504166303e3f677811461044157806306fdde031461046b578063095ea7b3146104f557806316b151351461051757806318160ddd1461053c578063185f23c41461054f5780631cf28ae3146105785780631de473ea1461058b5780631dead827146105b057806323b872dd146105c3578063290fe2df146105eb578063313ce5671461061d578063335094c214610630578063335b942a14610646578063340ea5581461066b578063355e6b431461068d5780633eaaf86b146106a35780634153090e146106b657806346f74c6d146106d2578063496fc976146106eb5780634b1dd21a1461071057806353d7edbc1461072f57806361888b4014610742578063626e8fd3146107555780636a3b5aea1461076b57806370720fe41461078f57806370a08231146107a257806379ba5097146107c1578063822e1506146107d657806383a1a3aa146107e95780638da5cb5b1461080d57806395d89b41146108205780639714f05c1461083357806398ea6536146108465780639eccf69114610859578063a0c96e431461086f578063a444502b14610882578063a8351c03146108a4578063a9059cbb146108b7578063ac355ed3146108d9578063b720a274146108ec578063bc1af71d146108ff578063c5bef69014610912578063c6e3a9b314610925578063d19003e514610938578063d4ee1d901461094b578063daa232ac1461095e578063db8298f314610971578063dba989ca14610984578063dd62ed3e14610997578063e8afedd9146109bc578063ec9d35aa146109db578063f0207fb1146109fd578063f027d1f014610a10578063f2fde38b14610a35578063f3fce3b514610a54578063f6a60d8914610a78578063fb20b70d14610a8b575b600080600060095442101580156102b357506007544211155b15156102be57600080fd5b600454610100900460ff16156102d357600080fd5b600a546064935042116102e657600c5492505b600b5442116102f557600d5492505b60155434101561030457600080fd5b600034111561043c57600160a060020a0333166000908152601a60205260409020543490101561033357600080fd5b600160a060020a0333166000908152601a602052604090205461035c903463ffffffff610aa116565b600160a060020a0333166000908152601a602052604090205560065461038990349063ffffffff610ab616565b915061039b828463ffffffff610ab616565b91506103ae82606463ffffffff610ae116565b6012549092506103c4908363ffffffff610b0216565b60085490915042116103df57600f548111156103df57600080fd5b6011548111156103ee57600080fd5b6103f83383610b12565b151561040357600080fd5b6012819055600054600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050151561043c57600080fd5b505050005b341561044c57600080fd5b610457600435610bbf565b604051901515815260200160405180910390f35b341561047657600080fd5b61047e610c1b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156104ba5780820151838201526020016104a2565b50505050905090810190601f1680156104e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050057600080fd5b610457600160a060020a0360043516602435610cb9565b341561052257600080fd5b61052a610d62565b60405190815260200160405180910390f35b341561054757600080fd5b61052a610d69565b341561055a57600080fd5b610562610d9b565b60405160ff909116815260200160405180910390f35b341561058357600080fd5b61052a610da4565b341561059657600080fd5b610562600160a060020a036004351660ff60243516610daa565b34156105bb57600080fd5b61052a610e57565b34156105ce57600080fd5b610457600160a060020a0360043581169060243516604435610e5d565b34156105f657600080fd5b610601600435610fd3565b604051600160a060020a03909116815260200160405180910390f35b341561062857600080fd5b61056261100e565b341561063b57600080fd5b610457600435611017565b341561065157600080fd5b610457600160a060020a036004351660ff60243516611073565b341561067657600080fd5b610457600435600160a060020a0360243516611175565b341561069857600080fd5b6104576004356111bc565b34156106ae57600080fd5b61052a611225565b34156106c157600080fd5b61060160043560243560443561122b565b34156106dd57600080fd5b61045760ff600435166113a0565b34156106f657600080fd5b610457600160a060020a0360043581169060243516611422565b341561071b57600080fd5b61052a600160a060020a0360043516611529565b341561073a57600080fd5b610562611544565b341561074d57600080fd5b61052a611552565b341561076057600080fd5b610457600435611558565b341561077657600080fd5b610457600160a060020a036004351660243515156115b4565b341561079a57600080fd5b61052a611641565b34156107ad57600080fd5b61052a600160a060020a0360043516611647565b34156107cc57600080fd5b6107d4611662565b005b34156107e157600080fd5b61052a6116f0565b34156107f457600080fd5b610457600160a060020a036004351660243515156116f6565b341561081857600080fd5b610601611783565b341561082b57600080fd5b61047e611792565b341561083e57600080fd5b61052a6117fd565b341561085157600080fd5b61052a611803565b341561086457600080fd5b610457600435611809565b341561087a57600080fd5b610601611865565b341561088d57600080fd5b6107d4600160a060020a0360043516602435611879565b34156108af57600080fd5b610457611904565b34156108c257600080fd5b610457600160a060020a036004351660243561196b565b34156108e457600080fd5b61052a611a09565b34156108f757600080fd5b61052a611a0f565b341561090a57600080fd5b61052a611a15565b341561091d57600080fd5b61052a611a1b565b341561093057600080fd5b61052a611a21565b341561094357600080fd5b61052a611a27565b341561095657600080fd5b610601611a2d565b341561096957600080fd5b61052a611a3c565b341561097c57600080fd5b610601611a42565b341561098f57600080fd5b61052a611a56565b34156109a257600080fd5b61052a600160a060020a0360043581169060243516611a5c565b34156109c757600080fd5b610457600160a060020a0360043516611a87565b34156109e657600080fd5b610457600160a060020a0360043516602435611b1e565b3415610a0857600080fd5b61052a611cdd565b3415610a1b57600080fd5b610457600160a060020a0360043581169060243516611ce3565b3415610a4057600080fd5b6107d4600160a060020a0360043516611dea565b3415610a5f57600080fd5b610457600160a060020a03600435166024351515611e34565b3415610a8357600080fd5b610457611ec1565b3415610a9657600080fd5b610457600435611f24565b600082821115610ab057600080fd5b50900390565b818102821580610ad05750818382811515610acd57fe5b04145b1515610adb57600080fd5b92915050565b6000808211610aef57600080fd5b8183811515610afa57fe5b049392505050565b81810182811015610adb57600080fd5b60008054600160a060020a0316815260186020526040812054610b3b908363ffffffff610aa116565b60008054600160a060020a0390811682526018602052604080832093909355851681522054610b70908363ffffffff610b0216565b600160a060020a0380851660008181526018602052604090819020939093559133909116906000805160206134c08339815191529085905190815260200160405180910390a350600192915050565b6000805433600160a060020a03908116911614610bdb57600080fd5b60098290557fb1793154c0ebfde05e41ed5e3e6dfc05ce7f10875d381c99d2af67540324fb558260405190815260200160405180910390a1506001919050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cb15780601f10610c8657610100808354040283529160200191610cb1565b820191906000526020600020905b815481529060010190602001808311610c9457829003601f168201915b505050505081565b6000805433600160a060020a0390811691161480610cd957506007544210155b1515610ce457600080fd5b600454610100900460ff1615610cf957600080fd5b600160a060020a03338116600081815260196020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6016545b90565b6000805260186020527f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd7546005540390565b60145460ff1681565b600a5481565b60008054819033600160a060020a03908116911614610dc857600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515610def57600080fd5b5082600160a060020a038116632e49d78b8460405160e060020a63ffffffff841602815260ff9091166004820152602401602060405180830381600087803b1515610e3957600080fd5b5af11515610e4657600080fd5b505050604051805195945050505050565b60105481565b6000805433600160a060020a0390811691161480610e7d57506007544210155b1515610e8857600080fd5b600454610100900460ff1615610e9d57600080fd5b600160a060020a038085166000908152601960209081526040808320339094168352929052205482901015610ed157600080fd5b600160a060020a0380851660009081526019602090815260408083203390941683529290522054610f08908363ffffffff610aa116565b600160a060020a038086166000818152601960209081526040808320339095168352938152838220949094559081526018909252902054610f4f908363ffffffff610aa116565b600160a060020a038086166000908152601860205260408082209390935590851681522054610f84908363ffffffff610b0216565b600160a060020a03808516600081815260186020526040908190209390935591908616906000805160206134c08339815191529085905190815260200160405180910390a35060019392505050565b601654600090821115610fe557600080fd5b6016805483908110610ff357fe5b600091825260209091200154600160a060020a031692915050565b60045460ff1681565b6000805433600160a060020a0390811691161461103357600080fd5b60088290557f349e8cf9b7f10d369d5d8f1c95b79766be8a563ccd0f3e12cbdcd9b1d0ca8a598260405190815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161461109157600080fd5b600160a060020a0384166000908152601b602052604090205460ff1615156110b857600080fd5b5082600160a060020a038116633406784d8460405160e060020a63ffffffff841602815260ff9091166004820152602401602060405180830381600087803b151561110257600080fd5b5af1151561110f57600080fd5b50505060405180519050151561112457600080fd5b7fe5bf7ec046c2dc50bb96bf973b7a41b6353e1328ffc32770f8bf054d9a1d7a168484604051600160a060020a03909216825260ff1660208201526040908101905180910390a15060019392505050565b600081600160a060020a031660168481548110151561119057fe5b600091825260209091200154600160a060020a031614156111b357506001610adb565b50600092915050565b6000805433600160a060020a039081169116146111d857600080fd5b60c882106111e557600080fd5b60138290557f2fb96d933b53d7d8e9939d23aba7f2970189c02cab3a69ee0bbe6a5505f22a5c8260405190815260200160405180910390a1506001919050565b60055481565b60008054819033600160a060020a039081169116148061124d57506007544210155b151561125857600080fd5b8261126233611647565b101561126d57600080fd5b601454309086903390879060ff16611283611f80565b600160a060020a039586168152602081019490945291909316604080840191909152606083019390935260ff16608082015260a0019051809103906000f08015156112cd57600080fd5b9050601680548060010182816112e39190611f90565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385169081179091558252601b905260409020805460ff1916600117905561133a818461196b565b151561134557600080fd5b8091507fb4570b23407eb8f5b5fc9298db21e9918130556f416631b78c4fb9d1437e4b3e858233604051928352600160a060020a039182166020840152166040808301919091526060909101905180910390a1509392505050565b6000805433600160a060020a039081169116146113bc57600080fd5b600f60ff831611156113cd57600080fd5b6014805460ff191660ff84811691909117918290557f919025779c7dc995225080d7f733238e82d2431a8443f2800db1586186a1334b911660405160ff909116815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161461144057600080fd5b600160a060020a0384166000908152601b602052604090205460ff16151561146757600080fd5b5082600160a060020a03811663cfd8d6c08460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114b757600080fd5b5af115156114c457600080fd5b5050506040518051905015156114d957600080fd5b7ff3c990ddaa7da65615d6b1dc2ab66be8c69aeb676f3c9639c42d6e363aa9b4488484604051600160a060020a039283168152911660208201526040908101905180910390a15060019392505050565b600160a060020a03166000908152601a602052604090205490565b600454610100900460ff1681565b600e5481565b6000805433600160a060020a0390811691161461157457600080fd5b600a8290557f283a00f5c44c58eccbd154ffe7f7d2668d1131d8f86d918a87b9345d299d54168260405190815260200160405180910390a1506001919050565b60008054819033600160a060020a039081169116146115d257600080fd5b600160a060020a0384166000908152601b602052604090205460ff1615156115f957600080fd5b5082600160a060020a03811663957563ec8460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b60115481565b600160a060020a031660009081526018602052604090205490565b60015433600160a060020a0390811691161461167d57600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600d5481565b60008054819033600160a060020a0390811691161461171457600080fd5b600160a060020a0384166000908152601b602052604090205460ff16151561173b57600080fd5b5082600160a060020a03811663fcf565778460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cb15780601f10610c8657610100808354040283529160200191610cb1565b60155481565b60095481565b6000805433600160a060020a0390811691161461182557600080fd5b60078290557f12ab17bd763c8547eedaab86f19495e586e0813e97f2ab7dc8ec6d26b76acaec8260405190815260200160405180910390a1506001919050565b6014546101009004600160a060020a031690565b60005433600160a060020a0390811691161461189457600080fd5b600160a060020a0382166000908152601a602052604090819020670de0b6b3a7640000830290557f96d853772025009a27dac6912a99e9939f6a151eaf431fba4b590a4fd0b7a4d7908390839051600160a060020a03909216825260208201526040908101905180910390a15050565b6000805433600160a060020a0390811691161461192057600080fd5b6004805461ff0019166101001790557f13bdd3db634275d55347404abafd28c4c446a6adc5cd0f375f198289d53fd9c46001604051901515815260200160405180910390a150600190565b6000805433600160a060020a039081169116148061198b57506007544210155b151561199657600080fd5b600454610100900460ff16156119ab57600080fd5b600160a060020a0333166000908152601860205260409020546119d4908363ffffffff610aa116565b600160a060020a033381166000908152601860205260408082209390935590851681522054610b70908363ffffffff610b0216565b60065481565b60075481565b600f5481565b60175481565b60125481565b60085481565b600154600160a060020a031681565b600c5481565b6014546101009004600160a060020a031681565b600b5481565b600160a060020a03918216600090815260196020908152604080832093909416825291909152205490565b6000805433600160a060020a03908116911614611aa357600080fd5b6014805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a03858116820292909217928390557fa61a37405173874367cd506590793f7c7248c65a6555a145696105f0c08bd2f1920416604051600160a060020a03909116815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161480611b4057506007544210155b1515611b4b57600080fd5b600454610100900460ff1615611b6057600080fd5b600160a060020a033316600090815260186020526040902054611b89908463ffffffff610aa116565b600160a060020a033316600090815260186020526040902055601354611bb690849063ffffffff610ab616565b9050611bca8161271063ffffffff610ae116565b9050611c04611bdf848363ffffffff610aa116565b600160a060020a0386166000908152601860205260409020549063ffffffff610b0216565b600160a060020a0380861660009081526018602052604080822093909355601454610100900490911681522054611c41908263ffffffff610b0216565b601454600160a060020a0361010090910481166000908152601860205260409020919091558481169033166000805160206134c0833981519152611c8b868563ffffffff610aa116565b60405190815260200160405180910390a3601454600160a060020a0361010090910481169033166000805160206134c08339815191528360405190815260200160405180910390a35060019392505050565b60135481565b60008054819033600160a060020a03908116911614611d0157600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515611d2857600080fd5b5082600160a060020a0381166313af40358460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d7857600080fd5b5af11515611d8557600080fd5b505050604051805190501515611d9a57600080fd5b7fda7ba55e4b847284db3b55f515d636796e9b3edbe68994477d2b59daaf4e38a48484604051600160a060020a039283168152911660208201526040908101905180910390a15060019392505050565b60005433600160a060020a03908116911614611e0557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054819033600160a060020a03908116911614611e5257600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515611e7957600080fd5b5082600160a060020a0381166350e81a3b8460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b6000805433600160a060020a03908116911614611edd57600080fd5b6004805461ff00191690557f80a677cadc8cf3b6873989c8e95f07182162e9d63356e59d0bd39a61f65db9176001604051901515815260200160405180910390a150600190565b6000805433600160a060020a03908116911614611f4057600080fd5b600b8290557fc09aceaf46237e16208f56508e0c0945ebb222285d07edae6cc42341d8af67f28260405190815260200160405180910390a1506001919050565b6040516114e880611fd883390190565b815481835581811511611fb457600083815260209020611fb4918101908301611fb9565b505050565b610d6691905b80821115611fd35760008155600101611fbf565b509056006060604052341561000f57600080fd5b60405160a0806114e8833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a0319908116600160a060020a03998a1617825560069790975560018054881696909816959095178755600280549096169095555050426003556005556007805460ff191690931766ff0000000000001916660100000000000060ff909316929092029190911765ffffffffff00191690915561141d9081906100cb90396000f30060606040526004361061019d5763ffffffff60e060020a6000350416630541e97581146101a257806306ffce53146101c9578063085d4883146101ee578063113202b11461021d57806313af4035146102305780631697283a1461024f5780631ff6a54b14610262578063200d2ed21461027557806329dcb0cf1461029e5780632b03d70e146102b15780632e49d78b146102c45780633406784d146102dd578063351c2576146102f65780634411b8f814610309578063483d45bd1461031c5780634e69d5601461032f57806350e81a3b146103425780635f8d96de1461035a5780635fff16381461036d578063627749e61461038057806378e97925146103935780637aca97b5146103a657806386b5debc146103bc578063893d20e8146103cf5780638b8c1177146103e25780638da5cb5b146103f8578063957563ec1461040b578063b1a7ce4014610423578063b61e96a514610436578063c828371e14610449578063cd1e07171461045c578063cfd8d6c01461046f578063d54bf6a01461048e578063dfbdb864146104a1578063fcf56577146104b4575b600080fd5b34156101ad57600080fd5b6101b56104cc565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101dc6104db565b60405190815260200160405180910390f35b34156101f957600080fd5b610201610549565b604051600160a060020a03909116815260200160405180910390f35b341561022857600080fd5b6101b5610558565b341561023b57600080fd5b6101b5600160a060020a0360043516610568565b341561025a57600080fd5b6101b561061d565b341561026d57600080fd5b6101b5610663565b341561028057600080fd5b6102886107d4565b60405160ff909116815260200160405180910390f35b34156102a957600080fd5b6101dc6107dd565b34156102bc57600080fd5b6101b56107e3565b34156102cf57600080fd5b61028860ff600435166108ac565b34156102e857600080fd5b6101b560ff600435166108df565b341561030157600080fd5b6101b5610c0b565b341561031457600080fd5b6101b5610d3b565b341561032757600080fd5b610201610e20565b341561033a57600080fd5b610288610e2f565b341561034d57600080fd5b6101b56004351515610e38565b341561036557600080fd5b6101dc610ebf565b341561037857600080fd5b6101b5610ec5565b341561038b57600080fd5b6101dc610ed7565b341561039e57600080fd5b6101dc610edd565b34156103b157600080fd5b6101b5600435610ee3565b34156103c757600080fd5b6101dc610f9d565b34156103da57600080fd5b610201610fa3565b34156103ed57600080fd5b6101b5600435610fb2565b341561040357600080fd5b610201611124565b341561041657600080fd5b6101b56004351515611133565b341561042e57600080fd5b6101b56111c5565b341561044157600080fd5b6102016111d6565b341561045457600080fd5b6101dc6111e5565b341561046757600080fd5b6102016111eb565b341561047a57600080fd5b6101b5600160a060020a03600435166111fa565b341561049957600080fd5b6102886112d0565b34156104ac57600080fd5b6101b56112e3565b34156104bf57600080fd5b6101b560043515156112f1565b60075462010000900460ff1681565b60008054600160a060020a0316806370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561052d57600080fd5b5af1151561053a57600080fd5b50505060405180519250505090565b600254600160a060020a031681565b6007546301000000900460ff1681565b6000805433600160a060020a0390811691161461058457600080fd5b600160a060020a038216151561059957600080fd5b6000547f232fba693394e47cdbc6f4760e24687abfb144ddca4600a356321757a0a129fb90600160a060020a031683604051600160a060020a039283168152911660208201526040908101905180910390a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b6000805433600160a060020a0390811691161480610649575060015433600160a060020a039081169116145b151561065457600080fd5b50600754610100900460ff1690565b6001546000908190819033600160a060020a0390811691161461068557600080fd5b60075462010000900460ff1615806106dd57506005546106ad9061a8c063ffffffff61138016565b421180156106c557506007546301000000900460ff16155b80156106dd575060075465010000000000900460ff16155b15156106e857600080fd5b60075460ff166001146106fa57600080fd5b6107026104db565b600054600154919350600160a060020a039081169250829163a9059cbb91168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561076557600080fd5b5af1151561077257600080fd5b50505060405180519050151561078757600080fd5b426004556007805460ff191660021790557f4aec24f0220c296d02035ce66a52f169cf7baec0fa7cdb55efe80db6b6d5457b8260405190815260200160405180910390a160019250505090565b60075460ff1681565b60055481565b60015460009033600160a060020a0390811691161480610811575060025433600160a060020a039081169116145b151561081c57600080fd5b60015433600160a060020a0390811691161415610842576007805464ff00000000191690555b60025433600160a060020a0390811691161415610869576007805465ff0000000000191690555b7f487e0ffa8a469bff067d7018b5b5b542976cc1c62732f96ea8e57aee62b9385633604051600160a060020a03909116815260200160405180910390a150600190565b6000805433600160a060020a039081169116146108c857600080fd5b506007805460ff191660ff92831617908190551690565b600080548190819081908190819033600160a060020a0390811691161461090557600080fd5b60075465010000000000900460ff16806109295750600754640100000000900460ff165b151561093457600080fd5b61093c6104db565b60075490955061095a9086906601000000000000900460ff16611396565b935061096d84606463ffffffff6113bb16565b935061097f858563ffffffff6113dc16565b94506109948560ff891663ffffffff61139616565b92506109a783606463ffffffff6113bb16565b92506109b9858463ffffffff6113dc16565b600054909550600160a060020a031691508163a0c96e436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109fe57600080fd5b5af11515610a0b57600080fd5b5050506040518051600154909250600160a060020a03808516925063a9059cbb91168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a7157600080fd5b5af11515610a7e57600080fd5b505050604051805190501515610a9357600080fd5b600254600160a060020a038084169163a9059cbb91168760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610aed57600080fd5b5af11515610afa57600080fd5b505050604051805190501515610b0f57600080fd5b81600160a060020a031663a9059cbb828660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b6357600080fd5b5af11515610b7057600080fd5b505050604051805190501515610b8557600080fd5b6007805460ff19166004908117909155429055600254600196507f4ac5c12151c16a02254f955dce239925ab6001d8956c0dc0c390946e99c4b9cc90600160a060020a031684866040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050505050919050565b6001546000908190819033600160a060020a03908116911614610c2d57600080fd5b600254600160a060020a03161515610c4457600080fd5b610c4c6104db565b600054600254919350600160a060020a039081169250829163ec9d35aa91168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610caf57600080fd5b5af11515610cbc57600080fd5b505050604051805190501515610cd157600080fd5b426004556007805460ff191660031790556002547fcac2a4de8487003b60017ee69a7fcbc127387770de24931568eceaba043f883590600160a060020a031683604051600160a060020a03909216825260208201526040908101905180910390a160019250505090565b60015460009033600160a060020a0390811691161480610d69575060025433600160a060020a039081169116145b1515610d7457600080fd5b60015433600160a060020a0390811691161415610da1576007805464ff0000000019166401000000001790555b60025433600160a060020a0390811691161415610ddd576007805462ff00001965ff000000000019909116650100000000001716620100001790555b7f245af7ddb051e137901431aa58ef0e09974aa397045fa6875f6f7c05eef4095d33604051600160a060020a03909116815260200160405180910390a150600190565b600254600160a060020a031690565b60075460ff1690565b6000805433600160a060020a0390811691161480610e64575060025433600160a060020a039081169116145b1515610e6f57600080fd5b6007805463ff00000019166301000000841515021790557f6e846834b8183421bab694003098cbb1870c038f618673677641008b20d1fb2882604051901515815260200160405180910390a15090565b60055490565b60075465010000000000900460ff1681565b60045481565b60035481565b60015460009033600160a060020a03908116911614610f0157600080fd5b60075462010000900460ff16158015610f26575060075465010000000000900460ff16155b8015610f3c57506007546301000000900460ff16155b8015610f4d575060075460ff166001145b1515610f5857600080fd5b7fcbf8fb5fb4ef9c6e59cb5cfcf9977773e0455a351b6477a2e8216bd6d7b9fede8260055460405191825260208201526040908101905180910390a150600555600190565b60065481565b600054600160a060020a031690565b6001546000908190819033600160a060020a03908116911614610fd457600080fd5b60075462010000900460ff16158015610ff9575060075465010000000000900460ff16155b801561100f57506007546301000000900460ff16155b151561101a57600080fd5b60075460ff1660011461102c57600080fd5b6110346104db565b915081841061104257600080fd5b6000841161104f57600080fd5b50600054600154600160a060020a0391821691829163a9059cbb911661107b858863ffffffff6113dc16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156110be57600080fd5b5af115156110cb57600080fd5b5050506040518051905015156110e057600080fd5b7f9c2f2cbd895351d3add2d5455af2f99ec611615b988457f6ce677314d8948e8c828560405191825260208201526040908101905180910390a15060019392505050565b600054600160a060020a031681565b6000805433600160a060020a039081169116148061115f575060025433600160a060020a039081169116145b151561116a57600080fd5b6007805462ff0000191662010000841515021790557f87635a76dd9fda8b78a23bdf0f25dfdfdebe723a6f04e352044f6d384719df0182604051901515815260200160405180910390a1505060075462010000900460ff1690565b600754640100000000900460ff1681565b600154600160a060020a031681565b60035490565b600154600160a060020a031690565b6000805433600160a060020a0390811691161480611226575060015433600160a060020a039081169116145b151561123157600080fd5b60075462010000900460ff161561124757600080fd5b600754610100900460ff161561125c57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557fb51bb5f6a8712d365886d1d443f76d07751c70d509ec085d84a63d90f0efd0179116604051600160a060020a03909116815260200160405180910390a1506001919050565b6007546601000000000000900460ff1681565b600754610100900460ff1681565b6000805433600160a060020a039081169116148061131d575060015433600160a060020a039081169116145b151561132857600080fd5b6007805461ff001916610100841515021790557f28b34ecdddbc856a3add60fd0b8aeab23631f8186012340df76bf5e72d6b8d3282604051901515815260200160405180910390a15050600754610100900460ff1690565b8181018281101561139057600080fd5b92915050565b8181028215806113b057508183828115156113ad57fe5b04145b151561139057600080fd5b60008082116113c957600080fd5b81838115156113d457fe5b049392505050565b6000828211156113eb57600080fd5b509003905600a165627a7a7230582089af520d6509bfe60a38d38b04b6d9f73c8ba5130fcbb81ab737a8592dd0f0a40029ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058201795543a9308e4681dc775fe63d70822c17a6eeb5d2dcfb49b22ba0d5749b1e70029

Deployed Bytecode

0x60606040526004361061029a5763ffffffff60e060020a60003504166303e3f677811461044157806306fdde031461046b578063095ea7b3146104f557806316b151351461051757806318160ddd1461053c578063185f23c41461054f5780631cf28ae3146105785780631de473ea1461058b5780631dead827146105b057806323b872dd146105c3578063290fe2df146105eb578063313ce5671461061d578063335094c214610630578063335b942a14610646578063340ea5581461066b578063355e6b431461068d5780633eaaf86b146106a35780634153090e146106b657806346f74c6d146106d2578063496fc976146106eb5780634b1dd21a1461071057806353d7edbc1461072f57806361888b4014610742578063626e8fd3146107555780636a3b5aea1461076b57806370720fe41461078f57806370a08231146107a257806379ba5097146107c1578063822e1506146107d657806383a1a3aa146107e95780638da5cb5b1461080d57806395d89b41146108205780639714f05c1461083357806398ea6536146108465780639eccf69114610859578063a0c96e431461086f578063a444502b14610882578063a8351c03146108a4578063a9059cbb146108b7578063ac355ed3146108d9578063b720a274146108ec578063bc1af71d146108ff578063c5bef69014610912578063c6e3a9b314610925578063d19003e514610938578063d4ee1d901461094b578063daa232ac1461095e578063db8298f314610971578063dba989ca14610984578063dd62ed3e14610997578063e8afedd9146109bc578063ec9d35aa146109db578063f0207fb1146109fd578063f027d1f014610a10578063f2fde38b14610a35578063f3fce3b514610a54578063f6a60d8914610a78578063fb20b70d14610a8b575b600080600060095442101580156102b357506007544211155b15156102be57600080fd5b600454610100900460ff16156102d357600080fd5b600a546064935042116102e657600c5492505b600b5442116102f557600d5492505b60155434101561030457600080fd5b600034111561043c57600160a060020a0333166000908152601a60205260409020543490101561033357600080fd5b600160a060020a0333166000908152601a602052604090205461035c903463ffffffff610aa116565b600160a060020a0333166000908152601a602052604090205560065461038990349063ffffffff610ab616565b915061039b828463ffffffff610ab616565b91506103ae82606463ffffffff610ae116565b6012549092506103c4908363ffffffff610b0216565b60085490915042116103df57600f548111156103df57600080fd5b6011548111156103ee57600080fd5b6103f83383610b12565b151561040357600080fd5b6012819055600054600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050151561043c57600080fd5b505050005b341561044c57600080fd5b610457600435610bbf565b604051901515815260200160405180910390f35b341561047657600080fd5b61047e610c1b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156104ba5780820151838201526020016104a2565b50505050905090810190601f1680156104e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050057600080fd5b610457600160a060020a0360043516602435610cb9565b341561052257600080fd5b61052a610d62565b60405190815260200160405180910390f35b341561054757600080fd5b61052a610d69565b341561055a57600080fd5b610562610d9b565b60405160ff909116815260200160405180910390f35b341561058357600080fd5b61052a610da4565b341561059657600080fd5b610562600160a060020a036004351660ff60243516610daa565b34156105bb57600080fd5b61052a610e57565b34156105ce57600080fd5b610457600160a060020a0360043581169060243516604435610e5d565b34156105f657600080fd5b610601600435610fd3565b604051600160a060020a03909116815260200160405180910390f35b341561062857600080fd5b61056261100e565b341561063b57600080fd5b610457600435611017565b341561065157600080fd5b610457600160a060020a036004351660ff60243516611073565b341561067657600080fd5b610457600435600160a060020a0360243516611175565b341561069857600080fd5b6104576004356111bc565b34156106ae57600080fd5b61052a611225565b34156106c157600080fd5b61060160043560243560443561122b565b34156106dd57600080fd5b61045760ff600435166113a0565b34156106f657600080fd5b610457600160a060020a0360043581169060243516611422565b341561071b57600080fd5b61052a600160a060020a0360043516611529565b341561073a57600080fd5b610562611544565b341561074d57600080fd5b61052a611552565b341561076057600080fd5b610457600435611558565b341561077657600080fd5b610457600160a060020a036004351660243515156115b4565b341561079a57600080fd5b61052a611641565b34156107ad57600080fd5b61052a600160a060020a0360043516611647565b34156107cc57600080fd5b6107d4611662565b005b34156107e157600080fd5b61052a6116f0565b34156107f457600080fd5b610457600160a060020a036004351660243515156116f6565b341561081857600080fd5b610601611783565b341561082b57600080fd5b61047e611792565b341561083e57600080fd5b61052a6117fd565b341561085157600080fd5b61052a611803565b341561086457600080fd5b610457600435611809565b341561087a57600080fd5b610601611865565b341561088d57600080fd5b6107d4600160a060020a0360043516602435611879565b34156108af57600080fd5b610457611904565b34156108c257600080fd5b610457600160a060020a036004351660243561196b565b34156108e457600080fd5b61052a611a09565b34156108f757600080fd5b61052a611a0f565b341561090a57600080fd5b61052a611a15565b341561091d57600080fd5b61052a611a1b565b341561093057600080fd5b61052a611a21565b341561094357600080fd5b61052a611a27565b341561095657600080fd5b610601611a2d565b341561096957600080fd5b61052a611a3c565b341561097c57600080fd5b610601611a42565b341561098f57600080fd5b61052a611a56565b34156109a257600080fd5b61052a600160a060020a0360043581169060243516611a5c565b34156109c757600080fd5b610457600160a060020a0360043516611a87565b34156109e657600080fd5b610457600160a060020a0360043516602435611b1e565b3415610a0857600080fd5b61052a611cdd565b3415610a1b57600080fd5b610457600160a060020a0360043581169060243516611ce3565b3415610a4057600080fd5b6107d4600160a060020a0360043516611dea565b3415610a5f57600080fd5b610457600160a060020a03600435166024351515611e34565b3415610a8357600080fd5b610457611ec1565b3415610a9657600080fd5b610457600435611f24565b600082821115610ab057600080fd5b50900390565b818102821580610ad05750818382811515610acd57fe5b04145b1515610adb57600080fd5b92915050565b6000808211610aef57600080fd5b8183811515610afa57fe5b049392505050565b81810182811015610adb57600080fd5b60008054600160a060020a0316815260186020526040812054610b3b908363ffffffff610aa116565b60008054600160a060020a0390811682526018602052604080832093909355851681522054610b70908363ffffffff610b0216565b600160a060020a0380851660008181526018602052604090819020939093559133909116906000805160206134c08339815191529085905190815260200160405180910390a350600192915050565b6000805433600160a060020a03908116911614610bdb57600080fd5b60098290557fb1793154c0ebfde05e41ed5e3e6dfc05ce7f10875d381c99d2af67540324fb558260405190815260200160405180910390a1506001919050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cb15780601f10610c8657610100808354040283529160200191610cb1565b820191906000526020600020905b815481529060010190602001808311610c9457829003601f168201915b505050505081565b6000805433600160a060020a0390811691161480610cd957506007544210155b1515610ce457600080fd5b600454610100900460ff1615610cf957600080fd5b600160a060020a03338116600081815260196020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6016545b90565b6000805260186020527f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd7546005540390565b60145460ff1681565b600a5481565b60008054819033600160a060020a03908116911614610dc857600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515610def57600080fd5b5082600160a060020a038116632e49d78b8460405160e060020a63ffffffff841602815260ff9091166004820152602401602060405180830381600087803b1515610e3957600080fd5b5af11515610e4657600080fd5b505050604051805195945050505050565b60105481565b6000805433600160a060020a0390811691161480610e7d57506007544210155b1515610e8857600080fd5b600454610100900460ff1615610e9d57600080fd5b600160a060020a038085166000908152601960209081526040808320339094168352929052205482901015610ed157600080fd5b600160a060020a0380851660009081526019602090815260408083203390941683529290522054610f08908363ffffffff610aa116565b600160a060020a038086166000818152601960209081526040808320339095168352938152838220949094559081526018909252902054610f4f908363ffffffff610aa116565b600160a060020a038086166000908152601860205260408082209390935590851681522054610f84908363ffffffff610b0216565b600160a060020a03808516600081815260186020526040908190209390935591908616906000805160206134c08339815191529085905190815260200160405180910390a35060019392505050565b601654600090821115610fe557600080fd5b6016805483908110610ff357fe5b600091825260209091200154600160a060020a031692915050565b60045460ff1681565b6000805433600160a060020a0390811691161461103357600080fd5b60088290557f349e8cf9b7f10d369d5d8f1c95b79766be8a563ccd0f3e12cbdcd9b1d0ca8a598260405190815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161461109157600080fd5b600160a060020a0384166000908152601b602052604090205460ff1615156110b857600080fd5b5082600160a060020a038116633406784d8460405160e060020a63ffffffff841602815260ff9091166004820152602401602060405180830381600087803b151561110257600080fd5b5af1151561110f57600080fd5b50505060405180519050151561112457600080fd5b7fe5bf7ec046c2dc50bb96bf973b7a41b6353e1328ffc32770f8bf054d9a1d7a168484604051600160a060020a03909216825260ff1660208201526040908101905180910390a15060019392505050565b600081600160a060020a031660168481548110151561119057fe5b600091825260209091200154600160a060020a031614156111b357506001610adb565b50600092915050565b6000805433600160a060020a039081169116146111d857600080fd5b60c882106111e557600080fd5b60138290557f2fb96d933b53d7d8e9939d23aba7f2970189c02cab3a69ee0bbe6a5505f22a5c8260405190815260200160405180910390a1506001919050565b60055481565b60008054819033600160a060020a039081169116148061124d57506007544210155b151561125857600080fd5b8261126233611647565b101561126d57600080fd5b601454309086903390879060ff16611283611f80565b600160a060020a039586168152602081019490945291909316604080840191909152606083019390935260ff16608082015260a0019051809103906000f08015156112cd57600080fd5b9050601680548060010182816112e39190611f90565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385169081179091558252601b905260409020805460ff1916600117905561133a818461196b565b151561134557600080fd5b8091507fb4570b23407eb8f5b5fc9298db21e9918130556f416631b78c4fb9d1437e4b3e858233604051928352600160a060020a039182166020840152166040808301919091526060909101905180910390a1509392505050565b6000805433600160a060020a039081169116146113bc57600080fd5b600f60ff831611156113cd57600080fd5b6014805460ff191660ff84811691909117918290557f919025779c7dc995225080d7f733238e82d2431a8443f2800db1586186a1334b911660405160ff909116815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161461144057600080fd5b600160a060020a0384166000908152601b602052604090205460ff16151561146757600080fd5b5082600160a060020a03811663cfd8d6c08460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114b757600080fd5b5af115156114c457600080fd5b5050506040518051905015156114d957600080fd5b7ff3c990ddaa7da65615d6b1dc2ab66be8c69aeb676f3c9639c42d6e363aa9b4488484604051600160a060020a039283168152911660208201526040908101905180910390a15060019392505050565b600160a060020a03166000908152601a602052604090205490565b600454610100900460ff1681565b600e5481565b6000805433600160a060020a0390811691161461157457600080fd5b600a8290557f283a00f5c44c58eccbd154ffe7f7d2668d1131d8f86d918a87b9345d299d54168260405190815260200160405180910390a1506001919050565b60008054819033600160a060020a039081169116146115d257600080fd5b600160a060020a0384166000908152601b602052604090205460ff1615156115f957600080fd5b5082600160a060020a03811663957563ec8460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b60115481565b600160a060020a031660009081526018602052604090205490565b60015433600160a060020a0390811691161461167d57600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600d5481565b60008054819033600160a060020a0390811691161461171457600080fd5b600160a060020a0384166000908152601b602052604090205460ff16151561173b57600080fd5b5082600160a060020a03811663fcf565778460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cb15780601f10610c8657610100808354040283529160200191610cb1565b60155481565b60095481565b6000805433600160a060020a0390811691161461182557600080fd5b60078290557f12ab17bd763c8547eedaab86f19495e586e0813e97f2ab7dc8ec6d26b76acaec8260405190815260200160405180910390a1506001919050565b6014546101009004600160a060020a031690565b60005433600160a060020a0390811691161461189457600080fd5b600160a060020a0382166000908152601a602052604090819020670de0b6b3a7640000830290557f96d853772025009a27dac6912a99e9939f6a151eaf431fba4b590a4fd0b7a4d7908390839051600160a060020a03909216825260208201526040908101905180910390a15050565b6000805433600160a060020a0390811691161461192057600080fd5b6004805461ff0019166101001790557f13bdd3db634275d55347404abafd28c4c446a6adc5cd0f375f198289d53fd9c46001604051901515815260200160405180910390a150600190565b6000805433600160a060020a039081169116148061198b57506007544210155b151561199657600080fd5b600454610100900460ff16156119ab57600080fd5b600160a060020a0333166000908152601860205260409020546119d4908363ffffffff610aa116565b600160a060020a033381166000908152601860205260408082209390935590851681522054610b70908363ffffffff610b0216565b60065481565b60075481565b600f5481565b60175481565b60125481565b60085481565b600154600160a060020a031681565b600c5481565b6014546101009004600160a060020a031681565b600b5481565b600160a060020a03918216600090815260196020908152604080832093909416825291909152205490565b6000805433600160a060020a03908116911614611aa357600080fd5b6014805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a03858116820292909217928390557fa61a37405173874367cd506590793f7c7248c65a6555a145696105f0c08bd2f1920416604051600160a060020a03909116815260200160405180910390a1506001919050565b60008054819033600160a060020a0390811691161480611b4057506007544210155b1515611b4b57600080fd5b600454610100900460ff1615611b6057600080fd5b600160a060020a033316600090815260186020526040902054611b89908463ffffffff610aa116565b600160a060020a033316600090815260186020526040902055601354611bb690849063ffffffff610ab616565b9050611bca8161271063ffffffff610ae116565b9050611c04611bdf848363ffffffff610aa116565b600160a060020a0386166000908152601860205260409020549063ffffffff610b0216565b600160a060020a0380861660009081526018602052604080822093909355601454610100900490911681522054611c41908263ffffffff610b0216565b601454600160a060020a0361010090910481166000908152601860205260409020919091558481169033166000805160206134c0833981519152611c8b868563ffffffff610aa116565b60405190815260200160405180910390a3601454600160a060020a0361010090910481169033166000805160206134c08339815191528360405190815260200160405180910390a35060019392505050565b60135481565b60008054819033600160a060020a03908116911614611d0157600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515611d2857600080fd5b5082600160a060020a0381166313af40358460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d7857600080fd5b5af11515611d8557600080fd5b505050604051805190501515611d9a57600080fd5b7fda7ba55e4b847284db3b55f515d636796e9b3edbe68994477d2b59daaf4e38a48484604051600160a060020a039283168152911660208201526040908101905180910390a15060019392505050565b60005433600160a060020a03908116911614611e0557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054819033600160a060020a03908116911614611e5257600080fd5b600160a060020a0384166000908152601b602052604090205460ff161515611e7957600080fd5b5082600160a060020a0381166350e81a3b8460405160e060020a63ffffffff84160281529015156004820152602401602060405180830381600087803b1515610e3957600080fd5b6000805433600160a060020a03908116911614611edd57600080fd5b6004805461ff00191690557f80a677cadc8cf3b6873989c8e95f07182162e9d63356e59d0bd39a61f65db9176001604051901515815260200160405180910390a150600190565b6000805433600160a060020a03908116911614611f4057600080fd5b600b8290557fc09aceaf46237e16208f56508e0c0945ebb222285d07edae6cc42341d8af67f28260405190815260200160405180910390a1506001919050565b6040516114e880611fd883390190565b815481835581811511611fb457600083815260209020611fb4918101908301611fb9565b505050565b610d6691905b80821115611fd35760008155600101611fbf565b509056006060604052341561000f57600080fd5b60405160a0806114e8833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a0319908116600160a060020a03998a1617825560069790975560018054881696909816959095178755600280549096169095555050426003556005556007805460ff191690931766ff0000000000001916660100000000000060ff909316929092029190911765ffffffffff00191690915561141d9081906100cb90396000f30060606040526004361061019d5763ffffffff60e060020a6000350416630541e97581146101a257806306ffce53146101c9578063085d4883146101ee578063113202b11461021d57806313af4035146102305780631697283a1461024f5780631ff6a54b14610262578063200d2ed21461027557806329dcb0cf1461029e5780632b03d70e146102b15780632e49d78b146102c45780633406784d146102dd578063351c2576146102f65780634411b8f814610309578063483d45bd1461031c5780634e69d5601461032f57806350e81a3b146103425780635f8d96de1461035a5780635fff16381461036d578063627749e61461038057806378e97925146103935780637aca97b5146103a657806386b5debc146103bc578063893d20e8146103cf5780638b8c1177146103e25780638da5cb5b146103f8578063957563ec1461040b578063b1a7ce4014610423578063b61e96a514610436578063c828371e14610449578063cd1e07171461045c578063cfd8d6c01461046f578063d54bf6a01461048e578063dfbdb864146104a1578063fcf56577146104b4575b600080fd5b34156101ad57600080fd5b6101b56104cc565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101dc6104db565b60405190815260200160405180910390f35b34156101f957600080fd5b610201610549565b604051600160a060020a03909116815260200160405180910390f35b341561022857600080fd5b6101b5610558565b341561023b57600080fd5b6101b5600160a060020a0360043516610568565b341561025a57600080fd5b6101b561061d565b341561026d57600080fd5b6101b5610663565b341561028057600080fd5b6102886107d4565b60405160ff909116815260200160405180910390f35b34156102a957600080fd5b6101dc6107dd565b34156102bc57600080fd5b6101b56107e3565b34156102cf57600080fd5b61028860ff600435166108ac565b34156102e857600080fd5b6101b560ff600435166108df565b341561030157600080fd5b6101b5610c0b565b341561031457600080fd5b6101b5610d3b565b341561032757600080fd5b610201610e20565b341561033a57600080fd5b610288610e2f565b341561034d57600080fd5b6101b56004351515610e38565b341561036557600080fd5b6101dc610ebf565b341561037857600080fd5b6101b5610ec5565b341561038b57600080fd5b6101dc610ed7565b341561039e57600080fd5b6101dc610edd565b34156103b157600080fd5b6101b5600435610ee3565b34156103c757600080fd5b6101dc610f9d565b34156103da57600080fd5b610201610fa3565b34156103ed57600080fd5b6101b5600435610fb2565b341561040357600080fd5b610201611124565b341561041657600080fd5b6101b56004351515611133565b341561042e57600080fd5b6101b56111c5565b341561044157600080fd5b6102016111d6565b341561045457600080fd5b6101dc6111e5565b341561046757600080fd5b6102016111eb565b341561047a57600080fd5b6101b5600160a060020a03600435166111fa565b341561049957600080fd5b6102886112d0565b34156104ac57600080fd5b6101b56112e3565b34156104bf57600080fd5b6101b560043515156112f1565b60075462010000900460ff1681565b60008054600160a060020a0316806370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561052d57600080fd5b5af1151561053a57600080fd5b50505060405180519250505090565b600254600160a060020a031681565b6007546301000000900460ff1681565b6000805433600160a060020a0390811691161461058457600080fd5b600160a060020a038216151561059957600080fd5b6000547f232fba693394e47cdbc6f4760e24687abfb144ddca4600a356321757a0a129fb90600160a060020a031683604051600160a060020a039283168152911660208201526040908101905180910390a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b6000805433600160a060020a0390811691161480610649575060015433600160a060020a039081169116145b151561065457600080fd5b50600754610100900460ff1690565b6001546000908190819033600160a060020a0390811691161461068557600080fd5b60075462010000900460ff1615806106dd57506005546106ad9061a8c063ffffffff61138016565b421180156106c557506007546301000000900460ff16155b80156106dd575060075465010000000000900460ff16155b15156106e857600080fd5b60075460ff166001146106fa57600080fd5b6107026104db565b600054600154919350600160a060020a039081169250829163a9059cbb91168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561076557600080fd5b5af1151561077257600080fd5b50505060405180519050151561078757600080fd5b426004556007805460ff191660021790557f4aec24f0220c296d02035ce66a52f169cf7baec0fa7cdb55efe80db6b6d5457b8260405190815260200160405180910390a160019250505090565b60075460ff1681565b60055481565b60015460009033600160a060020a0390811691161480610811575060025433600160a060020a039081169116145b151561081c57600080fd5b60015433600160a060020a0390811691161415610842576007805464ff00000000191690555b60025433600160a060020a0390811691161415610869576007805465ff0000000000191690555b7f487e0ffa8a469bff067d7018b5b5b542976cc1c62732f96ea8e57aee62b9385633604051600160a060020a03909116815260200160405180910390a150600190565b6000805433600160a060020a039081169116146108c857600080fd5b506007805460ff191660ff92831617908190551690565b600080548190819081908190819033600160a060020a0390811691161461090557600080fd5b60075465010000000000900460ff16806109295750600754640100000000900460ff165b151561093457600080fd5b61093c6104db565b60075490955061095a9086906601000000000000900460ff16611396565b935061096d84606463ffffffff6113bb16565b935061097f858563ffffffff6113dc16565b94506109948560ff891663ffffffff61139616565b92506109a783606463ffffffff6113bb16565b92506109b9858463ffffffff6113dc16565b600054909550600160a060020a031691508163a0c96e436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109fe57600080fd5b5af11515610a0b57600080fd5b5050506040518051600154909250600160a060020a03808516925063a9059cbb91168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a7157600080fd5b5af11515610a7e57600080fd5b505050604051805190501515610a9357600080fd5b600254600160a060020a038084169163a9059cbb91168760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610aed57600080fd5b5af11515610afa57600080fd5b505050604051805190501515610b0f57600080fd5b81600160a060020a031663a9059cbb828660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b6357600080fd5b5af11515610b7057600080fd5b505050604051805190501515610b8557600080fd5b6007805460ff19166004908117909155429055600254600196507f4ac5c12151c16a02254f955dce239925ab6001d8956c0dc0c390946e99c4b9cc90600160a060020a031684866040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050505050919050565b6001546000908190819033600160a060020a03908116911614610c2d57600080fd5b600254600160a060020a03161515610c4457600080fd5b610c4c6104db565b600054600254919350600160a060020a039081169250829163ec9d35aa91168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610caf57600080fd5b5af11515610cbc57600080fd5b505050604051805190501515610cd157600080fd5b426004556007805460ff191660031790556002547fcac2a4de8487003b60017ee69a7fcbc127387770de24931568eceaba043f883590600160a060020a031683604051600160a060020a03909216825260208201526040908101905180910390a160019250505090565b60015460009033600160a060020a0390811691161480610d69575060025433600160a060020a039081169116145b1515610d7457600080fd5b60015433600160a060020a0390811691161415610da1576007805464ff0000000019166401000000001790555b60025433600160a060020a0390811691161415610ddd576007805462ff00001965ff000000000019909116650100000000001716620100001790555b7f245af7ddb051e137901431aa58ef0e09974aa397045fa6875f6f7c05eef4095d33604051600160a060020a03909116815260200160405180910390a150600190565b600254600160a060020a031690565b60075460ff1690565b6000805433600160a060020a0390811691161480610e64575060025433600160a060020a039081169116145b1515610e6f57600080fd5b6007805463ff00000019166301000000841515021790557f6e846834b8183421bab694003098cbb1870c038f618673677641008b20d1fb2882604051901515815260200160405180910390a15090565b60055490565b60075465010000000000900460ff1681565b60045481565b60035481565b60015460009033600160a060020a03908116911614610f0157600080fd5b60075462010000900460ff16158015610f26575060075465010000000000900460ff16155b8015610f3c57506007546301000000900460ff16155b8015610f4d575060075460ff166001145b1515610f5857600080fd5b7fcbf8fb5fb4ef9c6e59cb5cfcf9977773e0455a351b6477a2e8216bd6d7b9fede8260055460405191825260208201526040908101905180910390a150600555600190565b60065481565b600054600160a060020a031690565b6001546000908190819033600160a060020a03908116911614610fd457600080fd5b60075462010000900460ff16158015610ff9575060075465010000000000900460ff16155b801561100f57506007546301000000900460ff16155b151561101a57600080fd5b60075460ff1660011461102c57600080fd5b6110346104db565b915081841061104257600080fd5b6000841161104f57600080fd5b50600054600154600160a060020a0391821691829163a9059cbb911661107b858863ffffffff6113dc16565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156110be57600080fd5b5af115156110cb57600080fd5b5050506040518051905015156110e057600080fd5b7f9c2f2cbd895351d3add2d5455af2f99ec611615b988457f6ce677314d8948e8c828560405191825260208201526040908101905180910390a15060019392505050565b600054600160a060020a031681565b6000805433600160a060020a039081169116148061115f575060025433600160a060020a039081169116145b151561116a57600080fd5b6007805462ff0000191662010000841515021790557f87635a76dd9fda8b78a23bdf0f25dfdfdebe723a6f04e352044f6d384719df0182604051901515815260200160405180910390a1505060075462010000900460ff1690565b600754640100000000900460ff1681565b600154600160a060020a031681565b60035490565b600154600160a060020a031690565b6000805433600160a060020a0390811691161480611226575060015433600160a060020a039081169116145b151561123157600080fd5b60075462010000900460ff161561124757600080fd5b600754610100900460ff161561125c57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557fb51bb5f6a8712d365886d1d443f76d07751c70d509ec085d84a63d90f0efd0179116604051600160a060020a03909116815260200160405180910390a1506001919050565b6007546601000000000000900460ff1681565b600754610100900460ff1681565b6000805433600160a060020a039081169116148061131d575060015433600160a060020a039081169116145b151561132857600080fd5b6007805461ff001916610100841515021790557f28b34ecdddbc856a3add60fd0b8aeab23631f8186012340df76bf5e72d6b8d3282604051901515815260200160405180910390a15050600754610100900460ff1690565b8181018281101561139057600080fd5b92915050565b8181028215806113b057508183828115156113ad57fe5b04145b151561139057600080fd5b60008082116113c957600080fd5b81838115156113d457fe5b049392505050565b6000828211156113eb57600080fd5b509003905600a165627a7a7230582089af520d6509bfe60a38d38b04b6d9f73c8ba5130fcbb81ab737a8592dd0f0a40029ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058201795543a9308e4681dc775fe63d70822c17a6eeb5d2dcfb49b22ba0d5749b1e70029

Swarm Source

bzzr://1795543a9308e4681dc775fe63d70822c17a6eeb5d2dcfb49b22ba0d5749b1e7
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.