false
true
0

Contract Address Details

0xFb5a551374B656C6e39787B1D3A03fEAb7f3a98E

Token
ThingsOpreatingSystem (TOS)
Creator
0x515bde–158b4c at 0x56475b–ed216a
Balance
0.08451 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
25857560
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
TosToken




Optimization enabled
true
Compiler version
v0.4.19+commit.c4cbbb05




Optimization runs
200
Verified at
2026-02-22T23:17:53.640413Z

TosToken.sol

/**
 * Copyright 2018 TosChain Foundation.
 */

pragma solidity ^0.4.16;

/** Owner permissions */
contract owned {
    address public owner;

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

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

    function transferOwnership(address newOwner) onlyOwner public {
        owner = newOwner;
    }
}

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }

/// ERC20 standard,Define the minimum unit of money to 18 decimal places,
/// transfer out, destroy coins, others use your account spending pocket money.
contract TokenERC20 {
    uint256 public totalSupply;
    // This creates an array with all balances.
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    // This generates a public event on the blockchain that will notify clients.
    event Transfer(address indexed from, address indexed to, uint256 value);

    // This notifies clients about the amount burnt.
    event Burn(address indexed from, uint256 value);

    /**
     * Internal transfer, only can be called by this contract.
     */
    function _transfer(address _from, address _to, uint _value) internal {
        // Prevent transfer to 0x0 address. Use burn() instead.
        require(_to != 0x0);
        // Check if the sender has enough.
        require(balanceOf[_from] >= _value);
        // Check for overflows.
        require(balanceOf[_to] + _value > balanceOf[_to]);
        // Save this for an assertion in the future.
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        // Subtract from the sender.
        balanceOf[_from] -= _value;
        // Add the same to the recipient.
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
        // Asserts are used to use static analysis to find bugs in your code. They should never fail.
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }

    /**
     * Transfer tokens
     *
     * Send `_value` tokens to `_to` from your account.
     *
     * @param _to The address of the recipient.
     * @param _value the amount to send.
     */
    function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    }

    /**
     * Transfer tokens from other address.
     *
     * Send `_value` tokens to `_to` in behalf of `_from`.
     *
     * @param _from The address of the sender.
     * @param _to The address of the recipient.
     * @param _value the amount to send.
     */
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        // Check allowance
        require(_value <= allowance[_from][msg.sender]);
        allowance[_from][msg.sender] -= _value;
        _transfer(_from, _to, _value);
        return true;
    }

    /**
     * Set allowance for other address.
     *
     * Allows `_spender` to spend no more than `_value` tokens in your behalf.
     *
     * @param _spender The address authorized to spend.
     * @param _value the max amount they can spend.
     */
    function approve(address _spender, uint256 _value) public
        returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        return true;
    }

    /**
     * Set allowance for other address and notify.
     *
     * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it.
     *
     * @param _spender The address authorized to spend.
     * @param _value the max amount they can spend.
     * @param _extraData some extra information to send to the approved contract.
     */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData)
        public
        returns (bool success) {
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }

    /**
     * Destroy tokens
     *
     * Remove `_value` tokens from the system irreversibly.
     *
     * @param _value the amount of money to burn.
     */
    function burn(uint256 _value) public returns (bool success) {
        // Check if the sender has enough
        require(balanceOf[msg.sender] >= _value);
        // Subtract from the sender
        balanceOf[msg.sender] -= _value;
        // Updates totalSupply
        totalSupply -= _value;
        Burn(msg.sender, _value);
        return true;
    }

    /**
     * Destroy tokens from other account.
     *
     * Remove `_value` tokens from the system irreversibly on behalf of `_from`.
     *
     * @param _from the address of the sender.
     * @param _value the amount of money to burn.
     */
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        // Check if the targeted balance is enough.
        require(balanceOf[_from] >= _value);
        // Check allowance
        require(_value <= allowance[_from][msg.sender]);
        // Subtract from the targeted balance.
        balanceOf[_from] -= _value;
        // Subtract from the sender's allowance.
        allowance[_from][msg.sender] -= _value;
        // Update totalSupply
        totalSupply -= _value;
        Burn(_from, _value);
        return true;
    }
}

/******************************************/
/*       TOS TOKEN STARTS HERE       */
/******************************************/

/// @title TOS Protocol Token.
contract TosToken is owned, TokenERC20 {

    /// The full name of the TOS token.
    string public constant name = "ThingsOpreatingSystem";
    /// Symbol of the TOS token.
    string public constant symbol = "TOS";
    /// 18 decimals is the strongly suggested default, avoid changing it.
    uint8 public constant decimals = 18;


    uint256 public totalSupply = 1000000000 * 10 ** uint256(decimals);
    /// Amount of TOS token to first issue.
    uint256 public MAX_FUNDING_SUPPLY = totalSupply * 500 / 1000;

    /**
     *  Locked tokens system
     */
    /// Stores the address of the locked tokens.
    address public lockJackpots;
    /// Reward for depositing the TOS token into a locked tokens.
    /// uint256 public totalLockReward = totalSupply * 50 / 1000;
    /// Remaining rewards in the locked tokens.
    uint256 public remainingReward;

    /// The start time to lock tokens. 2018/03/15 0:0:0
    uint256 public lockStartTime = 1521043200;
    /// The last time to lock tokens. 2018/04/29 0:0:0
    uint256 public lockDeadline = 1524931200;
    /// Release tokens lock time,Timestamp format 1544803200 ==  2018/12/15 0:0:0
    uint256 public unLockTime = 1544803200;

    /// Reward factor for locked tokens 
    uint public constant NUM_OF_PHASE = 3;
    uint[3] public lockRewardsPercentages = [
        1000,   //100%
        500,    //50%
        300    //30%
    ];

    /// Locked account details
    mapping (address => uint256) public lockBalanceOf;

    /**
     *  Freeze the account system
     */
    /* This generates a public event on the blockchain that will notify clients. */
    mapping (address => bool) public frozenAccount;
    event FrozenFunds(address target, bool frozen);

    /* Initializes contract with initial supply tokens to the creator of the contract. */
    function TosToken() public {
        /// Give the creator all initial tokens.
        balanceOf[msg.sender] = totalSupply;
    }

    /**
     * transfer token for a specified address.
     *
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transfer(address _to, uint256 _value) public {
        /// Locked account can not complete the transfer.
        require(!(lockJackpots != 0x0 && msg.sender == lockJackpots));

        /// Transponding the TOS token to a locked tokens account will be deemed a lock-up activity.
        if (lockJackpots != 0x0 && _to == lockJackpots) {
            _lockToken(_value);
        }
        else {
            /// To unlock the time, automatically unlock tokens.
            if (unLockTime <= now && lockBalanceOf[msg.sender] > 0) {
                lockBalanceOf[msg.sender] = 0;
            }

            _transfer(msg.sender, _to, _value);
        }
    }

    /**
     * transfer token for a specified address.Internal transfer, only can be called by this contract.
     *
     * @param _from The address to transfer from.
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function _transfer(address _from, address _to, uint _value) internal {
        // Prevent transfer to 0x0 address. Use burn() instead.
        require(_to != 0x0);
        //Check for overflows.
        require(lockBalanceOf[_from] + _value > lockBalanceOf[_from]);
        // Check if the sender has enough.
        require(balanceOf[_from] >= lockBalanceOf[_from] + _value);
        // Check for overflows.
        require(balanceOf[_to] + _value > balanceOf[_to]);
        // Check if sender is frozen.
        require(!frozenAccount[_from]);
        // Check if recipient is frozen.
        require(!frozenAccount[_to]);
        // Subtract from the sender.
        balanceOf[_from] -= _value;
        // Add the same to the recipient.
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
    }

    /**
     * `freeze? Prevent | Allow` `target` from sending & receiving tokens.
     *
     * @param target Address to be frozen.
     * @param freeze either to freeze it or not.
     */
    function freezeAccount(address target, bool freeze) onlyOwner public {
        frozenAccount[target] = freeze;
        FrozenFunds(target, freeze);
    }

    /**
     * Increase the token reward.
     *
     * @param _value Increase the amount of tokens awarded.
     */
    function increaseLockReward(uint256 _value) public{
        require(_value > 0);
        _transfer(msg.sender, lockJackpots, _value * 10 ** uint256(decimals));
        _calcRemainReward();
    }

    /**
     * Locked tokens, in the locked token reward calculation and distribution.
     *
     * @param _lockValue Lock token reward.
     */
    function _lockToken(uint256 _lockValue) internal {
        /// Lock the tokens necessary safety checks.
        require(lockJackpots != 0x0);
        require(now >= lockStartTime);
        require(now <= lockDeadline);
        require(lockBalanceOf[msg.sender] + _lockValue > lockBalanceOf[msg.sender]);
        /// Check account tokens must be sufficient.
        require(balanceOf[msg.sender] >= lockBalanceOf[msg.sender] + _lockValue);

        uint256 _reward =  _lockValue * _calcLockRewardPercentage() / 1000;
        /// Distribute bonus tokens.
        _transfer(lockJackpots, msg.sender, _reward);

        /// Save locked accounts and rewards.
        lockBalanceOf[msg.sender] += _lockValue + _reward;
        _calcRemainReward();
    }

    uint256 lockRewardFactor;
    /* Calculate locked token reward percentage,Actual value: rewardFactor/1000 */
    function _calcLockRewardPercentage() internal returns (uint factor){

        uint phase = NUM_OF_PHASE * (now - lockStartTime)/( lockDeadline - lockStartTime);
        if (phase  >= NUM_OF_PHASE) {
            phase = NUM_OF_PHASE - 1;
        }
    
        lockRewardFactor = lockRewardsPercentages[phase];
        return lockRewardFactor;
    }

    /** The activity is over and the token in the prize pool is sent to the manager for fund development. */
    function rewardActivityEnd() onlyOwner public {
        /// The activity is over.
        require(unLockTime < now);
        /// Send the token from the prize pool to the manager.
        _transfer(lockJackpots, owner, balanceOf[lockJackpots]);
        _calcRemainReward();
    }

    function() payable public {}

    /**
     * Set lock token address,only once.
     *
     * @param newLockJackpots The lock token address.
     */
    function setLockJackpots(address newLockJackpots) onlyOwner public {
        require(lockJackpots == 0x0 && newLockJackpots != 0x0 && newLockJackpots != owner);
        lockJackpots = newLockJackpots;
        _calcRemainReward();
    }

    /** Remaining rewards in the locked tokens. */
    function _calcRemainReward() internal {
        remainingReward = balanceOf[lockJackpots];
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        // Check allowance
        require(_from != lockJackpots);
        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) public
        returns (bool success) {
        require(msg.sender != lockJackpots);
        return super.approve(_spender, _value);
    }

    function approveAndCall(address _spender, uint256 _value, bytes _extraData)
        public
        returns (bool success) {
        require(msg.sender != lockJackpots);
        return super.approveAndCall(_spender, _value, _extraData);
    }

    function burn(uint256 _value) public returns (bool success) {
        require(msg.sender != lockJackpots);
        return super.burn(_value);
    }

    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(_from != lockJackpots);
        return super.burnFrom(_from, _value);
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"compilationTarget":{"TosToken.sol":"TosToken"}}
              

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"approve","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lockBalanceOf","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"burn","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"MAX_FUNDING_SUPPLY","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setLockJackpots","inputs":[{"type":"address","name":"newLockJackpots"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lockRewardsPercentages","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lockStartTime","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"increaseLockReward","inputs":[{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"balanceOf","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"burnFrom","inputs":[{"type":"address","name":"_from"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"lockJackpots","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transfer","inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"frozenAccount","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"approveAndCall","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"},{"type":"bytes","name":"_extraData"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"NUM_OF_PHASE","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"allowance","inputs":[{"type":"address","name":""},{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"remainingReward","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"freezeAccount","inputs":[{"type":"address","name":"target"},{"type":"bool","name":"freeze"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lockDeadline","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"unLockTime","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"rewardActivityEnd","inputs":[],"constant":false},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"FrozenFunds","inputs":[{"type":"address","name":"target","indexed":false},{"type":"bool","name":"frozen","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","indexed":true},{"type":"address","name":"to","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"from","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false}]
              

Contract Creation Code

Verify & Publish
0x606060408181526b033b2e3c9fd0803ce80000006004556b019d971e4fe8401e74000000600555635aa94700600855635ae49a80600955635c13d380600a555190810160409081526103e882526101f4602083015261012c9082015261006990600b9060036100a8565b50341561007557600080fd5b60008054600160a060020a03191633600160a060020a031690811782556004549082526002602052604090912055610109565b82600381019282156100dc579160200282015b828111156100dc578251829061ffff169055916020019190600101906100bb565b506100e89291506100ec565b5090565b61010691905b808211156100e857600081556001016100f2565b90565b61101a806101186000396000f3006060604052600436106101695763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461016b578063095ea7b3146101f557806310e776ed1461022b57806318160ddd1461025c57806323b872dd1461026f578063313ce5671461029757806342966c68146102c057806343525d73146102d6578063465af554146102e95780634a52ac6a1461030857806362c7fa761461031e5780636843aef91461033157806370a082311461034757806379cc6790146103665780638da5cb5b1461038857806395d89b41146103b7578063a841da4b146103ca578063a9059cbb146103dd578063b414d4b6146103ff578063cae9ca511461041e578063dbefe78914610483578063dd62ed3e14610496578063e1c4c9fe146104bb578063e724529c146104ce578063f2fde38b146104f2578063fa4d0c3c14610511578063facc790514610524578063fc1b928614610537575b005b341561017657600080fd5b61017e61054a565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101ba5780820151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561020057600080fd5b610217600160a060020a0360043516602435610581565b604051901515815260200160405180910390f35b341561023657600080fd5b61024a600160a060020a03600435166105b1565b60405190815260200160405180910390f35b341561026757600080fd5b61024a6105c3565b341561027a57600080fd5b610217600160a060020a03600435811690602435166044356105c9565b34156102a257600080fd5b6102aa6105fa565b60405160ff909116815260200160405180910390f35b34156102cb57600080fd5b6102176004356105ff565b34156102e157600080fd5b61024a61062d565b34156102f457600080fd5b610169600160a060020a0360043516610633565b341561031357600080fd5b61024a6004356106c7565b341561032957600080fd5b61024a6106db565b341561033c57600080fd5b6101696004356106e1565b341561035257600080fd5b61024a600160a060020a0360043516610718565b341561037157600080fd5b610217600160a060020a036004351660243561072a565b341561039357600080fd5b61039b610752565b604051600160a060020a03909116815260200160405180910390f35b34156103c257600080fd5b61017e610761565b34156103d557600080fd5b61039b610798565b34156103e857600080fd5b610169600160a060020a03600435166024356107a7565b341561040a57600080fd5b610217600160a060020a0360043516610869565b341561042957600080fd5b61021760048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061087e95505050505050565b341561048e57600080fd5b61024a6108a8565b34156104a157600080fd5b61024a600160a060020a03600435811690602435166108ad565b34156104c657600080fd5b61024a6108ca565b34156104d957600080fd5b610169600160a060020a036004351660243515156108d0565b34156104fd57600080fd5b610169600160a060020a036004351661095c565b341561051c57600080fd5b61024a6109a6565b341561052f57600080fd5b61024a6109ac565b341561054257600080fd5b6101696109b2565b60408051908101604052601581527f5468696e67734f7072656174696e6753797374656d0000000000000000000000602082015281565b60065460009033600160a060020a03908116911614156105a057600080fd5b6105aa8383610a13565b9392505050565b600e6020526000908152604090205481565b60045481565b600654600090600160a060020a03858116911614156105e757600080fd5b6105f2848484610a43565b949350505050565b601281565b60065460009033600160a060020a039081169116141561061e57600080fd5b61062782610aba565b92915050565b60055481565b60005433600160a060020a0390811691161461064e57600080fd5b600654600160a060020a031615801561066f5750600160a060020a03811615155b80156106895750600054600160a060020a03828116911614155b151561069457600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790556106c4610b45565b50565b600b81600381106106d457fe5b0154905081565b60085481565b600081116106ee57600080fd5b600654610710903390600160a060020a0316670de0b6b3a76400008402610b65565b6106c4610b45565b60026020526000908152604090205481565b600654600090600160a060020a038481169116141561074857600080fd5b6105aa8383610cb0565b600054600160a060020a031681565b60408051908101604052600381527f544f530000000000000000000000000000000000000000000000000000000000602082015281565b600654600160a060020a031681565b600654600160a060020a0316158015906107cf575060065433600160a060020a039081169116145b156107d957600080fd5b600654600160a060020a0316158015906108005750600654600160a060020a038381169116145b156108135761080e81610d8c565b610865565b42600a541115801561083b5750600160a060020a0333166000908152600e6020526040812054115b1561085a57600160a060020a0333166000908152600e60205260408120555b610865338383610b65565b5050565b600f6020526000908152604090205460ff1681565b60065460009033600160a060020a039081169116141561089d57600080fd5b6105f2848484610e78565b600381565b600360209081526000928352604080842090915290825290205481565b60075481565b60005433600160a060020a039081169116146108eb57600080fd5b600160a060020a0382166000908152600f602052604090819020805460ff19168315151790557f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5908390839051600160a060020a039092168252151560208201526040908101905180910390a15050565b60005433600160a060020a0390811691161461097757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60095481565b600a5481565b60005433600160a060020a039081169116146109cd57600080fd5b600a544290106109dc57600080fd5b60065460008054600160a060020a039283168083526002602052604090922054610a099390911690610b65565b610a11610b45565b565b600160a060020a033381166000908152600360209081526040808320938616835292905220819055600192915050565b600160a060020a03808416600090815260036020908152604080832033909416835292905290812054821115610a7857600080fd5b600160a060020a0380851660009081526003602090815260408083203390941683529290522080548390039055610ab0848484610b65565b5060019392505050565b600160a060020a03331660009081526002602052604081205482901015610ae057600080fd5b600160a060020a03331660008181526002602052604090819020805485900390556001805485900390557fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59084905190815260200160405180910390a2506001919050565b600654600160a060020a0316600090815260026020526040902054600755565b600160a060020a0382161515610b7a57600080fd5b600160a060020a0383166000908152600e602052604090205481810111610ba057600080fd5b600160a060020a0383166000908152600e6020908152604080832054600290925290912054908201901015610bd457600080fd5b600160a060020a03821660009081526002602052604090205481810111610bfa57600080fd5b600160a060020a0383166000908152600f602052604090205460ff1615610c2057600080fd5b600160a060020a0382166000908152600f602052604090205460ff1615610c4657600080fd5b600160a060020a038084166000818152600260205260408082208054869003905592851680825290839020805485019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a3505050565b600160a060020a03821660009081526002602052604081205482901015610cd657600080fd5b600160a060020a0380841660009081526003602090815260408083203390941683529290522054821115610d0957600080fd5b600160a060020a038084166000818152600260209081526040808320805488900390556003825280832033909516835293905282902080548590039055600180548590039055907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59084905190815260200160405180910390a250600192915050565b600654600090600160a060020a03161515610da657600080fd5b600854421015610db557600080fd5b600954421115610dc457600080fd5b600160a060020a0333166000908152600e602052604090205482810111610dea57600080fd5b600160a060020a0333166000908152600e6020908152604080832054600290925290912054908301901015610e1e57600080fd5b6103e8610e29610faa565b8302811515610e3457fe5b6006549190049150610e5090600160a060020a03163383610b65565b600160a060020a0333166000908152600e602052604090208054838301019055610865610b45565b600083610e858185610581565b15610fa25780600160a060020a0316638f4ffcb1338630876040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f3b578082015183820152602001610f23565b50505050905090810190601f168015610f685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515610f8957600080fd5b6102c65a03f11515610f9a57600080fd5b505050600191505b509392505050565b600080600854600954036008544203600302811515610fc557fe5b04905060038110610fd4575060025b600b8160038110610fe157fe5b01546010819055915050905600a165627a7a7230582045401a9affd6a5e5f67dd0a9a65ad59f93e78d6b824637741fae1b41fafb4c1b0029

Deployed ByteCode

0x6060604052600436106101695763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461016b578063095ea7b3146101f557806310e776ed1461022b57806318160ddd1461025c57806323b872dd1461026f578063313ce5671461029757806342966c68146102c057806343525d73146102d6578063465af554146102e95780634a52ac6a1461030857806362c7fa761461031e5780636843aef91461033157806370a082311461034757806379cc6790146103665780638da5cb5b1461038857806395d89b41146103b7578063a841da4b146103ca578063a9059cbb146103dd578063b414d4b6146103ff578063cae9ca511461041e578063dbefe78914610483578063dd62ed3e14610496578063e1c4c9fe146104bb578063e724529c146104ce578063f2fde38b146104f2578063fa4d0c3c14610511578063facc790514610524578063fc1b928614610537575b005b341561017657600080fd5b61017e61054a565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101ba5780820151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561020057600080fd5b610217600160a060020a0360043516602435610581565b604051901515815260200160405180910390f35b341561023657600080fd5b61024a600160a060020a03600435166105b1565b60405190815260200160405180910390f35b341561026757600080fd5b61024a6105c3565b341561027a57600080fd5b610217600160a060020a03600435811690602435166044356105c9565b34156102a257600080fd5b6102aa6105fa565b60405160ff909116815260200160405180910390f35b34156102cb57600080fd5b6102176004356105ff565b34156102e157600080fd5b61024a61062d565b34156102f457600080fd5b610169600160a060020a0360043516610633565b341561031357600080fd5b61024a6004356106c7565b341561032957600080fd5b61024a6106db565b341561033c57600080fd5b6101696004356106e1565b341561035257600080fd5b61024a600160a060020a0360043516610718565b341561037157600080fd5b610217600160a060020a036004351660243561072a565b341561039357600080fd5b61039b610752565b604051600160a060020a03909116815260200160405180910390f35b34156103c257600080fd5b61017e610761565b34156103d557600080fd5b61039b610798565b34156103e857600080fd5b610169600160a060020a03600435166024356107a7565b341561040a57600080fd5b610217600160a060020a0360043516610869565b341561042957600080fd5b61021760048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061087e95505050505050565b341561048e57600080fd5b61024a6108a8565b34156104a157600080fd5b61024a600160a060020a03600435811690602435166108ad565b34156104c657600080fd5b61024a6108ca565b34156104d957600080fd5b610169600160a060020a036004351660243515156108d0565b34156104fd57600080fd5b610169600160a060020a036004351661095c565b341561051c57600080fd5b61024a6109a6565b341561052f57600080fd5b61024a6109ac565b341561054257600080fd5b6101696109b2565b60408051908101604052601581527f5468696e67734f7072656174696e6753797374656d0000000000000000000000602082015281565b60065460009033600160a060020a03908116911614156105a057600080fd5b6105aa8383610a13565b9392505050565b600e6020526000908152604090205481565b60045481565b600654600090600160a060020a03858116911614156105e757600080fd5b6105f2848484610a43565b949350505050565b601281565b60065460009033600160a060020a039081169116141561061e57600080fd5b61062782610aba565b92915050565b60055481565b60005433600160a060020a0390811691161461064e57600080fd5b600654600160a060020a031615801561066f5750600160a060020a03811615155b80156106895750600054600160a060020a03828116911614155b151561069457600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790556106c4610b45565b50565b600b81600381106106d457fe5b0154905081565b60085481565b600081116106ee57600080fd5b600654610710903390600160a060020a0316670de0b6b3a76400008402610b65565b6106c4610b45565b60026020526000908152604090205481565b600654600090600160a060020a038481169116141561074857600080fd5b6105aa8383610cb0565b600054600160a060020a031681565b60408051908101604052600381527f544f530000000000000000000000000000000000000000000000000000000000602082015281565b600654600160a060020a031681565b600654600160a060020a0316158015906107cf575060065433600160a060020a039081169116145b156107d957600080fd5b600654600160a060020a0316158015906108005750600654600160a060020a038381169116145b156108135761080e81610d8c565b610865565b42600a541115801561083b5750600160a060020a0333166000908152600e6020526040812054115b1561085a57600160a060020a0333166000908152600e60205260408120555b610865338383610b65565b5050565b600f6020526000908152604090205460ff1681565b60065460009033600160a060020a039081169116141561089d57600080fd5b6105f2848484610e78565b600381565b600360209081526000928352604080842090915290825290205481565b60075481565b60005433600160a060020a039081169116146108eb57600080fd5b600160a060020a0382166000908152600f602052604090819020805460ff19168315151790557f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5908390839051600160a060020a039092168252151560208201526040908101905180910390a15050565b60005433600160a060020a0390811691161461097757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60095481565b600a5481565b60005433600160a060020a039081169116146109cd57600080fd5b600a544290106109dc57600080fd5b60065460008054600160a060020a039283168083526002602052604090922054610a099390911690610b65565b610a11610b45565b565b600160a060020a033381166000908152600360209081526040808320938616835292905220819055600192915050565b600160a060020a03808416600090815260036020908152604080832033909416835292905290812054821115610a7857600080fd5b600160a060020a0380851660009081526003602090815260408083203390941683529290522080548390039055610ab0848484610b65565b5060019392505050565b600160a060020a03331660009081526002602052604081205482901015610ae057600080fd5b600160a060020a03331660008181526002602052604090819020805485900390556001805485900390557fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59084905190815260200160405180910390a2506001919050565b600654600160a060020a0316600090815260026020526040902054600755565b600160a060020a0382161515610b7a57600080fd5b600160a060020a0383166000908152600e602052604090205481810111610ba057600080fd5b600160a060020a0383166000908152600e6020908152604080832054600290925290912054908201901015610bd457600080fd5b600160a060020a03821660009081526002602052604090205481810111610bfa57600080fd5b600160a060020a0383166000908152600f602052604090205460ff1615610c2057600080fd5b600160a060020a0382166000908152600f602052604090205460ff1615610c4657600080fd5b600160a060020a038084166000818152600260205260408082208054869003905592851680825290839020805485019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a3505050565b600160a060020a03821660009081526002602052604081205482901015610cd657600080fd5b600160a060020a0380841660009081526003602090815260408083203390941683529290522054821115610d0957600080fd5b600160a060020a038084166000818152600260209081526040808320805488900390556003825280832033909516835293905282902080548590039055600180548590039055907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59084905190815260200160405180910390a250600192915050565b600654600090600160a060020a03161515610da657600080fd5b600854421015610db557600080fd5b600954421115610dc457600080fd5b600160a060020a0333166000908152600e602052604090205482810111610dea57600080fd5b600160a060020a0333166000908152600e6020908152604080832054600290925290912054908301901015610e1e57600080fd5b6103e8610e29610faa565b8302811515610e3457fe5b6006549190049150610e5090600160a060020a03163383610b65565b600160a060020a0333166000908152600e602052604090208054838301019055610865610b45565b600083610e858185610581565b15610fa25780600160a060020a0316638f4ffcb1338630876040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f3b578082015183820152602001610f23565b50505050905090810190601f168015610f685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515610f8957600080fd5b6102c65a03f11515610f9a57600080fd5b505050600191505b509392505050565b600080600854600954036008544203600302811515610fc557fe5b04905060038110610fd4575060025b600b8160038110610fe157fe5b01546010819055915050905600a165627a7a7230582045401a9affd6a5e5f67dd0a9a65ad59f93e78d6b824637741fae1b41fafb4c1b0029