ETH Price: $2,009.31 (+8.46%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw68309752018-12-05 14:15:252642 days ago1544019325IN
0x5BD46A1D...91Cb7E231
0 ETH0.000493649
Transfer68250962018-12-04 14:39:132643 days ago1543934353IN
0x5BD46A1D...91Cb7E231
0.1 ETH0.0014183112

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
-68309752018-12-05 14:15:252642 days ago1544019325
0x5BD46A1D...91Cb7E231
0.1 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PantheonEcoSystemTron

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-12-04
*/

pragma solidity 0.4.25;

contract PantheonEcoSystemTron {

    struct UserRecord {
        address referrer;
        uint tokens;
        uint gained_funds;
        uint ref_funds;
        // this field can be negative
        int funds_correction;
    }

    using SafeMath for uint;
    using SafeMathInt for int;
    using Fee for Fee.fee;
    using ToAddress for bytes;

    // ERC20
    string constant public name = "Pantheon Ecosystem TRON";
    string constant public symbol = "PANTRON";
    uint8 constant public decimals = 18;
    address admin = 0x88c78271Fdc3c27aE2c562FaaeEE9060085AcF4D;

    // Fees
    Fee.fee private fee_purchase = Fee.fee(1, 10); // 10%
    Fee.fee private fee_selling  = Fee.fee(1, 20); // 5%
    Fee.fee private fee_transfer = Fee.fee(1, 100); // 1%
    Fee.fee private fee_referral = Fee.fee(33, 100); // 33%

    // Minimal amount of tokens to be an participant of referral program
    uint constant private minimal_stake = 10e18;

    // Factor for converting eth <-> tokens with required precision of calculations
    uint constant private precision_factor = 1e18;

    // Pricing policy
    //  - if user buy 1 token, price will be increased by "price_offset" value
    //  - if user sell 1 token, price will be decreased by "price_offset" value
    // For details see methods "fundsToTokens" and "tokensToFunds"
    uint private price = 1e29; // 100 Gwei * precision_factor
    uint constant private price_offset = 1e28; // 10 Gwei * precision_factor

    // Total amount of tokens
    uint private total_supply = 0;

    // Total profit shared between token's holders. It's not reflect exactly sum of funds because this parameter
    // can be modified to keep the real user's dividends when total supply is changed
    // For details see method "dividendsOf" and using "funds_correction" in the code
    uint private shared_profit = 0;

    // Map of the users data
    mapping(address => UserRecord) private user_data;

    // ==== Modifiers ==== //

    modifier onlyValidTokenAmount(uint tokens) {
        require(tokens > 0, "Amount of tokens must be greater than zero");
        require(tokens <= user_data[msg.sender].tokens, "You have not enough tokens");
        _;
    }

    // ==== Public API ==== //

    // ---- Write methods ---- //


    function () public payable {
        buy(msg.data.toAddr());
    }

    /*
    * @dev Buy tokens from incoming funds
    */
    function buy(address referrer) public payable {

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_purchase.split(msg.value);
        require(fee_funds != 0, "Incoming funds is too small");

        // update user's referrer
        //  - you cannot be a referrer for yourself
        //  - user and his referrer will be together all the life
        UserRecord storage user = user_data[msg.sender];
        if (referrer != 0x0 && referrer != msg.sender && user.referrer == 0x0) {
            user.referrer = referrer;
        }

        // apply referral bonus
        if (user.referrer != 0x0) {
            fee_funds = rewardReferrer(msg.sender, user.referrer, fee_funds, msg.value);
            require(fee_funds != 0, "Incoming funds is too small");
        }

        // calculate amount of tokens and change price
        (uint tokens, uint _price) = fundsToTokens(taxed_funds);
        require(tokens != 0, "Incoming funds is too small");
        price = _price;

        // mint tokens and increase shared profit
        mintTokens(msg.sender, tokens);
        shared_profit = shared_profit.add(fee_funds);

        emit Purchase(msg.sender, msg.value, tokens, price / precision_factor, now);
    }

    /*
    * @dev Sell given amount of tokens and get funds
    */
    function sell(uint tokens) public onlyValidTokenAmount(tokens) {

        // calculate amount of funds and change price
        (uint funds, uint _price) = tokensToFunds(tokens);
        require(funds != 0, "Insufficient tokens to do that");
        price = _price;

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_selling.split(funds);
        require(fee_funds != 0, "Insufficient tokens to do that");

        // burn tokens and add funds to user's dividends
        burnTokens(msg.sender, tokens);
        UserRecord storage user = user_data[msg.sender];
        user.gained_funds = user.gained_funds.add(taxed_funds);

        // increase shared profit
        shared_profit = shared_profit.add(fee_funds);

        emit Selling(msg.sender, tokens, funds, price / precision_factor, now);
    }

    /*
    * @dev Transfer given amount of tokens from sender to another user
    * ERC20
    */
    function transfer(address to_addr, uint tokens) public onlyValidTokenAmount(tokens) returns (bool success) {

        require(to_addr != msg.sender, "You cannot transfer tokens to yourself");

        // apply fee
        (uint fee_tokens, uint taxed_tokens) = fee_transfer.split(tokens);
        require(fee_tokens != 0, "Insufficient tokens to do that");

        // calculate amount of funds and change price
        (uint funds, uint _price) = tokensToFunds(fee_tokens);
        require(funds != 0, "Insufficient tokens to do that");
        price = _price;

        // burn and mint tokens excluding fee
        burnTokens(msg.sender, tokens);
        mintTokens(to_addr, taxed_tokens);

        // increase shared profit
        shared_profit = shared_profit.add(funds);

        emit Transfer(msg.sender, to_addr, tokens);
        return true;
    }

    /*
    * @dev Reinvest all dividends
    */
    function reinvest() public {

        // get all dividends
        uint funds = dividendsOf(msg.sender);
        require(funds > 0, "You have no dividends");

        // make correction, dividents will be 0 after that
        UserRecord storage user = user_data[msg.sender];
        user.funds_correction = user.funds_correction.add(int(funds));

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_purchase.split(funds);
        require(fee_funds != 0, "Insufficient dividends to do that");

        // apply referral bonus
        if (user.referrer != 0x0) {
            fee_funds = rewardReferrer(msg.sender, user.referrer, fee_funds, funds);
            require(fee_funds != 0, "Insufficient dividends to do that");
        }

        // calculate amount of tokens and change price
        (uint tokens, uint _price) = fundsToTokens(taxed_funds);
        require(tokens != 0, "Insufficient dividends to do that");
        price = _price;

        // mint tokens and increase shared profit
        mintTokens(msg.sender, tokens);
        shared_profit = shared_profit.add(fee_funds);

        emit Reinvestment(msg.sender, funds, tokens, price / precision_factor, now);
    }

    /*
    * @dev Withdraw all dividends
    */
    function withdraw() public {

        // get all dividends

        require(msg.sender == admin);
        uint funds = dividendsOf(msg.sender);
        require(funds > 0, "You have no dividends");

        // make correction, dividents will be 0 after that
        UserRecord storage user = user_data[msg.sender];
        user.funds_correction = user.funds_correction.add(int(funds));

        // send funds
        admin.transfer(address(this).balance);

        emit Withdrawal(msg.sender, funds, now);
    }

    /*
    * @dev Sell all tokens and withraw dividends
    */
    function exit() public {

        // sell all tokens
        uint tokens = user_data[msg.sender].tokens;
        if (tokens > 0) {
            sell(tokens);
        }

        withdraw();
    }

    /*
    * @dev CAUTION! This method distributes all incoming funds between token's holders and gives you nothing
    * It will be used by another contracts/addresses from our ecosystem in future
    * But if you want to donate, you're welcome :)
    */
    function donate() public payable {
        shared_profit = shared_profit.add(msg.value);
        emit Donation(msg.sender, msg.value, now);
    }

    // ---- Read methods ---- //

    /*
    * @dev Total amount of tokens
    * ERC20
    */
    function totalSupply() public view returns (uint) {
        return total_supply;
    }

    /*
    * @dev Amount of user's tokens
    * ERC20
    */
    function balanceOf(address addr) public view returns (uint) {
        return user_data[addr].tokens;
    }

    /*
    * @dev Amount of user's dividends
    */
    function dividendsOf(address addr) public view returns (uint) {

        UserRecord memory user = user_data[addr];

        // gained funds from selling tokens + bonus funds from referrals
        // int because "user.funds_correction" can be negative
        int d = int(user.gained_funds.add(user.ref_funds));
        require(d >= 0);

        // avoid zero divizion
        if (total_supply > 0) {
            // profit is proportional to stake
            d = d.add(int(shared_profit.mul(user.tokens) / total_supply));
        }

        // correction
        // d -= user.funds_correction
        if (user.funds_correction > 0) {
            d = d.sub(user.funds_correction);
        }
        else if (user.funds_correction < 0) {
            d = d.add(-user.funds_correction);
        }

        // just in case
        require(d >= 0);

        // total sum must be positive uint
        return uint(d);
    }

    /*
    * @dev Amount of tokens can be gained from given amount of funds
    */
    function expectedTokens(uint funds, bool apply_fee) public view returns (uint) {
        if (funds == 0) {
            return 0;
        }
        if (apply_fee) {
            (,uint _funds) = fee_purchase.split(funds);
            funds = _funds;
        }
        (uint tokens,) = fundsToTokens(funds);
        return tokens;
    }

    /*
    * @dev Amount of funds can be gained from given amount of tokens
    */
    function expectedFunds(uint tokens, bool apply_fee) public view returns (uint) {
        // empty tokens in total OR no tokens was sold
        if (tokens == 0 || total_supply == 0) {
            return 0;
        }
        // more tokens than were mined in total, just exclude unnecessary tokens from calculating
        else if (tokens > total_supply) {
            tokens = total_supply;
        }
        (uint funds,) = tokensToFunds(tokens);
        if (apply_fee) {
            (,uint _funds) = fee_selling.split(funds);
            funds = _funds;
        }
        return funds;
    }

    /*
    * @dev Purchase price of next 1 token
    */
    function buyPrice() public view returns (uint) {
        return price / precision_factor;
    }

    /*
    * @dev Selling price of next 1 token
    */
    function sellPrice() public view returns (uint) {
        return price.sub(price_offset) / precision_factor;
    }

    // ==== Private API ==== //

    /*
    * @dev Mint given amount of tokens to given user
    */
    function mintTokens(address addr, uint tokens) internal {

        UserRecord storage user = user_data[addr];

        bool not_first_minting = total_supply > 0;

        // make correction to keep dividends the rest of the users
        if (not_first_minting) {
            shared_profit = shared_profit.mul(total_supply.add(tokens)) / total_supply;
        }

        // add tokens
        total_supply = total_supply.add(tokens);
        user.tokens = user.tokens.add(tokens);

        // make correction to keep dividends of user
        if (not_first_minting) {
            user.funds_correction = user.funds_correction.add(int(tokens.mul(shared_profit) / total_supply));
        }
    }

    /*
    * @dev Burn given amout of tokens from given user
    */
    function burnTokens(address addr, uint tokens) internal {

        UserRecord storage user = user_data[addr];

        // keep current dividents of user if last tokens will be burned
        uint dividends_from_tokens = 0;
        if (total_supply == tokens) {
            dividends_from_tokens = shared_profit.mul(user.tokens) / total_supply;
        }

        // make correction to keep dividends the rest of the users
        shared_profit = shared_profit.mul(total_supply.sub(tokens)) / total_supply;

        // sub tokens
        total_supply = total_supply.sub(tokens);
        user.tokens = user.tokens.sub(tokens);

        // make correction to keep dividends of the user
        // if burned not last tokens
        if (total_supply > 0) {
            user.funds_correction = user.funds_correction.sub(int(tokens.mul(shared_profit) / total_supply));
        }
        // if burned last tokens
        else if (dividends_from_tokens != 0) {
            user.funds_correction = user.funds_correction.sub(int(dividends_from_tokens));
        }
    }

    /*
     * @dev Rewards the referrer from given amount of funds
     */
    function rewardReferrer(address addr, address referrer_addr, uint funds, uint full_funds) internal returns (uint funds_after_reward) {
        UserRecord storage referrer = user_data[referrer_addr];
        if (referrer.tokens >= minimal_stake) {
            (uint reward_funds, uint taxed_funds) = fee_referral.split(funds);
            referrer.ref_funds = referrer.ref_funds.add(reward_funds);
            emit ReferralReward(addr, referrer_addr, full_funds, reward_funds, now);
            return taxed_funds;
        }
        else {
            return funds;
        }
    }

    /*
    * @dev Calculate tokens from funds
    *
    * Given:
    *   a[1] = price
    *   d = price_offset
    *   sum(n) = funds
    * Here is used arithmetic progression's equation transformed to a quadratic equation:
    *   a * n^2 + b * n + c = 0
    * Where:
    *   a = d
    *   b = 2 * a[1] - d
    *   c = -2 * sum(n)
    * Solve it and first root is what we need - amount of tokens
    * So:
    *   tokens = n
    *   price = a[n+1]
    *
    * For details see method below
    */
    function fundsToTokens(uint funds) internal view returns (uint tokens, uint _price) {
        uint b = price.mul(2).sub(price_offset);
        uint D = b.mul(b).add(price_offset.mul(8).mul(funds).mul(precision_factor));
        uint n = D.sqrt().sub(b).mul(precision_factor) / price_offset.mul(2);
        uint anp1 = price.add(price_offset.mul(n) / precision_factor);
        return (n, anp1);
    }

    /*
    * @dev Calculate funds from tokens
    *
    * Given:
    *   a[1] = sell_price
    *   d = price_offset
    *   n = tokens
    * Here is used arithmetic progression's equation (-d because of d must be negative to reduce price):
    *   a[n] = a[1] - d * (n - 1)
    *   sum(n) = (a[1] + a[n]) * n / 2
    * So:
    *   funds = sum(n)
    *   price = a[n]
    *
    * For details see method above
    */
    function tokensToFunds(uint tokens) internal view returns (uint funds, uint _price) {
        uint sell_price = price.sub(price_offset);
        uint an = sell_price.add(price_offset).sub(price_offset.mul(tokens) / precision_factor);
        uint sn = sell_price.add(an).mul(tokens) / precision_factor.mul(2);
        return (sn / precision_factor, an);
    }

    // ==== Events ==== //

    event Purchase(address indexed addr, uint funds, uint tokens, uint price, uint time);
    event Selling(address indexed addr, uint tokens, uint funds, uint price, uint time);
    event Reinvestment(address indexed addr, uint funds, uint tokens, uint price, uint time);
    event Withdrawal(address indexed addr, uint funds, uint time);
    event Donation(address indexed addr, uint funds, uint time);
    event ReferralReward(address indexed referral_addr, address indexed referrer_addr, uint funds, uint reward_funds, uint time);

    //ERC20
    event Transfer(address indexed from_addr, address indexed to_addr, uint tokens);

}

library SafeMath {

    /**
    * @dev Multiplies two numbers
    */
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, "mul failed");
        return c;
    }

    /**
    * @dev Subtracts two numbers
    */
    function sub(uint a, uint b) internal pure returns (uint) {
        require(b <= a, "sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers
    */
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "add failed");
        return c;
    }

    /**
     * @dev Gives square root from number
     */
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = add(x, 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = add(x / z, z) / 2;
        }
    }
}

library SafeMathInt {

    /**
    * @dev Subtracts two numbers
    */
    function sub(int a, int b) internal pure returns (int) {
        int c = a - b;
        require(c <= a, "sub failed");
        return c;
    }

    /**
    * @dev Adds two numbers
    */
    function add(int a, int b) internal pure returns (int) {
        int c = a + b;
        require(c >= a, "add failed");
        return c;
    }
}

library Fee {

    using SafeMath for uint;

    struct fee {
        uint num;
        uint den;
    }

    /*
    * @dev Splits given value to two parts: tax itself and taxed value
    */
    function split(fee memory f, uint value) internal pure returns (uint tax, uint taxed_value) {
        if (value == 0) {
            return (0, 0);
        }
        tax = value.mul(f.num) / f.den;
        taxed_value = value.sub(tax);
    }

    /*
    * @dev Returns only tax part
    */
    function get_tax(fee memory f, uint value) internal pure returns (uint tax) {
        if (value == 0) {
            return 0;
        }
        tax = value.mul(f.num) / f.den;
    }
}

library ToAddress {

    /*
    * @dev Transforms bytes to address
    */
    function toAddr(bytes source) internal pure returns (address addr) {
        assembly {
            addr := mload(add(source, 0x14))
        }
        return addr;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"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":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to_addr","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"},{"name":"apply_fee","type":"bool"}],"name":"expectedFunds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"funds","type":"uint256"},{"name":"apply_fee","type":"bool"}],"name":"expectedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"referrer","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Selling","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Reinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Donation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"referral_addr","type":"address"},{"indexed":true,"name":"referrer_addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"reward_funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"ReferralReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from_addr","type":"address"},{"indexed":true,"name":"to_addr","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"}]

60806040527388c78271fdc3c27ae2c562faaeee9060085acf4d6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604080519081016040528060018152602001600a8152506001600082015181600001556020820151816001015550506040805190810160405280600181526020016014815250600360008201518160000155602082015181600101555050604080519081016040528060018152602001606481525060056000820151816000015560208201518160010155505060408051908101604052806021815260200160648152506007600082015181600001556020820151816001015550506c01431e0fae6d7217caa00000006009556000600a556000600b5534801561013b57600080fd5b5061264b8061014b6000396000f3006080604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461013657806306fdde031461018d57806318160ddd1461021d578063313ce567146102485780633ccfd60b146102795780634b7503341461029057806370a08231146102bb5780638620410b1461031257806395d89b411461033d578063a9059cbb146103cd578063be2eaad414610432578063c5f606201461047f578063e4849b32146104cc578063e9fad8ee146104f9578063ed88c68e14610510578063f088d5471461051a578063fdb5a03e14610550575b61013461012f6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610567565b610578565b005b34801561014257600080fd5b50610177600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610978565b6040518082815260200191505060405180910390f35b34801561019957600080fd5b506101a2610b32565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e25780820151818401526020810190506101c7565b50505050905090810190601f16801561020f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022957600080fd5b50610232610b6b565b6040518082815260200191505060405180910390f35b34801561025457600080fd5b5061025d610b75565b604051808260ff1660ff16815260200191505060405180910390f35b34801561028557600080fd5b5061028e610b7a565b005b34801561029c57600080fd5b506102a5610d94565b6040518082815260200191505060405180910390f35b3480156102c757600080fd5b506102fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dcf565b6040518082815260200191505060405180910390f35b34801561031e57600080fd5b50610327610e1b565b6040518082815260200191505060405180910390f35b34801561034957600080fd5b50610352610e38565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610392578082015181840152602081019050610377565b50505050905090810190601f1680156103bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d957600080fd5b50610418600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e71565b604051808215151515815260200191505060405180910390f35b34801561043e57600080fd5b506104696004803603810190808035906020019092919080351515906020019092919050505061127c565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b506104b660048036038101908080359060200190929190803515159060200190929190505050611307565b6040518082815260200191505060405180910390f35b3480156104d857600080fd5b506104f760048036038101908080359060200190929190505050611375565b005b34801561050557600080fd5b5061050e61171c565b005b610518611781565b005b61054e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610578565b005b34801561055c57600080fd5b506105656117f4565b005b600060148201519050809050919050565b60008060008060006105b334600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9450945060008514151515610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925060008673ffffffffffffffffffffffffffffffffffffffff16141580156106c457503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561070a575060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561075357858360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610843576107c7338460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168734611c8a565b945060008514151515610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b5b61084c84611dc8565b91509150600082141515156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b806009819055506108da3383611f31565b6108ef85600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167fd721454499cf9c37b757e03b9d675df451c229048129d6e2d552216a035e6a553484670de0b6b3a764000060095481151561094457fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b60006109826125d9565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060a060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820154815250509150610a6a8260600151836040015161204790919063ffffffff16565b905060008112151515610a7c57600080fd5b6000600a541115610ac257610abf600a54610aa68460200151600b546120d190919063ffffffff16565b811515610aaf57fe5b048261217890919063ffffffff16565b90505b600082608001511315610aed57610ae682608001518261220290919063ffffffff16565b9050610b18565b600082608001511215610b1757610b1482608001516000038261217890919063ffffffff16565b90505b5b60008112151515610b2857600080fd5b8092505050919050565b6040805190810160405280601781526020017f50616e7468656f6e2045636f73797374656d2054524f4e00000000000000000081525081565b6000600a54905090565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bd857600080fd5b610be133610978565b9150600082111515610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610cb382826004015461217890919063ffffffff16565b81600401819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610d39573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8342604051808381526020018281526020019250505060405180910390a25050565b6000670de0b6b3a7640000610dc06b204fce5e3e2502611000000060095461228c90919063ffffffff16565b811515610dc957fe5b04905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000670de0b6b3a7640000600954811515610e3257fe5b04905090565b6040805190810160405280600781526020017f50414e54524f4e0000000000000000000000000000000000000000000000000081525081565b600080600080600085600081111515610f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548111151515610fd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415151561109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f596f752063616e6e6f74207472616e7366657220746f6b656e7320746f20796f81526020017f757273656c66000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6110cf87600560408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b945094506000851415151561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b61115585612311565b92509250600083141515156111d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b816009819055506111e3338861240e565b6111ed8885611f31565b61120283600b5461204790919063ffffffff16565b600b819055508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a360019550505050505092915050565b60008060008085148061129157506000600a54145b1561129f57600092506112ff565b600a548511156112af57600a5494505b6112b885612311565b50915083156112fb576112f482600360408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9150508091505b8192505b505092915050565b60008060008085141561131d576000925061136d565b831561135d5761135685600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9250508194505b61136685611dc8565b5090508092505b505092915050565b60008060008060008560008111151561141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015481111515156114d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b6114df87612311565b955095506000861415151561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b8460098190555061159686600360408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9350935060008414151515611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b61161d338861240e565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020915061167583836002015461204790919063ffffffff16565b826002018190555061169284600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167fafd310387603da0dcf44f11f54b04254b548c58b194e75f85851e849f0eef3078888670de0b6b3a76400006009548115156116e757fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156117765761177581611375565b5b61177e610b7a565b50565b61179634600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f106aac375bbcf013d1e52338bbf9e740009a1a3a6869f8daa1b72aa1620f5fec3442604051808381526020018281526020019250505060405180910390a2565b60008060008060008061180633610978565b9550600086111515611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002094506118d886866004015461217890919063ffffffff16565b856004018190555061191386600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b93509350600084141515156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611acc57611a2a338660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168689611c8a565b935060008414151515611acb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b611ad583611dc8565b9150915060008214151515611b78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600981905550611b893383611f31565b611b9e84600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f1abe689c7914cafd54f789eb0851e90cba235302161e81e259ee4c357c374d828784670de0b6b3a7640000600954811515611bf357fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b6000806000831415611c455760008081915080905091509150611c83565b8360200151611c618560000151856120d190919063ffffffff16565b811515611c6a57fe5b049150611c80828461228c90919063ffffffff16565b90505b9250929050565b600080600080600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250678ac7230489e800008360010154101515611db957611d1986600760408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b91509150611d3482846003015461204790919063ffffffff16565b83600301819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f870e4e1dcfab6c09707448d3659b3d8097c084bf06e7467d6029940cd7122ee087854260405180848152602001838152602001828152602001935050505060405180910390a3809350611dbd565b8593505b505050949350505050565b600080600080600080611e056b204fce5e3e25026110000000611df760026009546120d190919063ffffffff16565b61228c90919063ffffffff16565b9350611e77611e56670de0b6b3a7640000611e488a611e3a60086b204fce5e3e250261100000006120d190919063ffffffff16565b6120d190919063ffffffff16565b6120d190919063ffffffff16565b611e6986876120d190919063ffffffff16565b61204790919063ffffffff16565b9250611e9960026b204fce5e3e250261100000006120d190919063ffffffff16565b611ece670de0b6b3a7640000611ec087611eb288612580565b61228c90919063ffffffff16565b6120d190919063ffffffff16565b811515611ed757fe5b049150611f20670de0b6b3a7640000611f05846b204fce5e3e250261100000006120d190919063ffffffff16565b811515611f0e57fe5b0460095461204790919063ffffffff16565b905081819550955050505050915091565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506000600a541190508015611fc057600a54611faf611f9e85600a5461204790919063ffffffff16565b600b546120d190919063ffffffff16565b811515611fb857fe5b04600b819055505b611fd583600a5461204790919063ffffffff16565b600a81905550611ff283836001015461204790919063ffffffff16565b8260010181905550801561204157612038600a5461201b600b54866120d190919063ffffffff16565b81151561202457fe5b04836004015461217890919063ffffffff16565b82600401819055505b50505050565b60008082840190508381101515156120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008414156120e65760009150612171565b82840290508284828115156120f757fe5b0414151561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6d756c206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505b5092915050565b60008082840190508381121515156121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000808284039050838113151515612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515612306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600080600080600061233a6b204fce5e3e2502611000000060095461228c90919063ffffffff16565b925061239e670de0b6b3a7640000612367886b204fce5e3e250261100000006120d190919063ffffffff16565b81151561237057fe5b046123906b204fce5e3e250261100000008661204790919063ffffffff16565b61228c90919063ffffffff16565b91506123bc6002670de0b6b3a76400006120d190919063ffffffff16565b6123e1876123d3858761204790919063ffffffff16565b6120d190919063ffffffff16565b8115156123ea57fe5b049050670de0b6b3a76400008181151561240057fe5b048294509450505050915091565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506000905082600a54141561248957600a5461247c8360010154600b546120d190919063ffffffff16565b81151561248557fe5b0490505b600a546124b56124a485600a5461228c90919063ffffffff16565b600b546120d190919063ffffffff16565b8115156124be57fe5b04600b819055506124da83600a5461228c90919063ffffffff16565b600a819055506124f783836001015461228c90919063ffffffff16565b82600101819055506000600a54111561254f57612542600a54612525600b54866120d190919063ffffffff16565b81151561252e57fe5b04836004015461220290919063ffffffff16565b826004018190555061257a565b6000811415156125795761257081836004015461220290919063ffffffff16565b82600401819055505b5b50505050565b6000806002612590846001612047565b81151561259957fe5b0490508291505b818110156125d35780915060026125c282858115156125bb57fe5b0483612047565b8115156125cb57fe5b0490506125a0565b50919050565b60a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815250905600a165627a7a723058203c2b01b407df2d39007d37848590c1892471e33b8dc93699b4be10f7d3d21b340029

Deployed Bytecode

0x6080604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461013657806306fdde031461018d57806318160ddd1461021d578063313ce567146102485780633ccfd60b146102795780634b7503341461029057806370a08231146102bb5780638620410b1461031257806395d89b411461033d578063a9059cbb146103cd578063be2eaad414610432578063c5f606201461047f578063e4849b32146104cc578063e9fad8ee146104f9578063ed88c68e14610510578063f088d5471461051a578063fdb5a03e14610550575b61013461012f6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610567565b610578565b005b34801561014257600080fd5b50610177600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610978565b6040518082815260200191505060405180910390f35b34801561019957600080fd5b506101a2610b32565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e25780820151818401526020810190506101c7565b50505050905090810190601f16801561020f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022957600080fd5b50610232610b6b565b6040518082815260200191505060405180910390f35b34801561025457600080fd5b5061025d610b75565b604051808260ff1660ff16815260200191505060405180910390f35b34801561028557600080fd5b5061028e610b7a565b005b34801561029c57600080fd5b506102a5610d94565b6040518082815260200191505060405180910390f35b3480156102c757600080fd5b506102fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dcf565b6040518082815260200191505060405180910390f35b34801561031e57600080fd5b50610327610e1b565b6040518082815260200191505060405180910390f35b34801561034957600080fd5b50610352610e38565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610392578082015181840152602081019050610377565b50505050905090810190601f1680156103bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d957600080fd5b50610418600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e71565b604051808215151515815260200191505060405180910390f35b34801561043e57600080fd5b506104696004803603810190808035906020019092919080351515906020019092919050505061127c565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b506104b660048036038101908080359060200190929190803515159060200190929190505050611307565b6040518082815260200191505060405180910390f35b3480156104d857600080fd5b506104f760048036038101908080359060200190929190505050611375565b005b34801561050557600080fd5b5061050e61171c565b005b610518611781565b005b61054e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610578565b005b34801561055c57600080fd5b506105656117f4565b005b600060148201519050809050919050565b60008060008060006105b334600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9450945060008514151515610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925060008673ffffffffffffffffffffffffffffffffffffffff16141580156106c457503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561070a575060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561075357858360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610843576107c7338460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168734611c8a565b945060008514151515610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b5b61084c84611dc8565b91509150600082141515156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b806009819055506108da3383611f31565b6108ef85600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167fd721454499cf9c37b757e03b9d675df451c229048129d6e2d552216a035e6a553484670de0b6b3a764000060095481151561094457fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b60006109826125d9565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060a060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820154815250509150610a6a8260600151836040015161204790919063ffffffff16565b905060008112151515610a7c57600080fd5b6000600a541115610ac257610abf600a54610aa68460200151600b546120d190919063ffffffff16565b811515610aaf57fe5b048261217890919063ffffffff16565b90505b600082608001511315610aed57610ae682608001518261220290919063ffffffff16565b9050610b18565b600082608001511215610b1757610b1482608001516000038261217890919063ffffffff16565b90505b5b60008112151515610b2857600080fd5b8092505050919050565b6040805190810160405280601781526020017f50616e7468656f6e2045636f73797374656d2054524f4e00000000000000000081525081565b6000600a54905090565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bd857600080fd5b610be133610978565b9150600082111515610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610cb382826004015461217890919063ffffffff16565b81600401819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610d39573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8342604051808381526020018281526020019250505060405180910390a25050565b6000670de0b6b3a7640000610dc06b204fce5e3e2502611000000060095461228c90919063ffffffff16565b811515610dc957fe5b04905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000670de0b6b3a7640000600954811515610e3257fe5b04905090565b6040805190810160405280600781526020017f50414e54524f4e0000000000000000000000000000000000000000000000000081525081565b600080600080600085600081111515610f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548111151515610fd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415151561109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f596f752063616e6e6f74207472616e7366657220746f6b656e7320746f20796f81526020017f757273656c66000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6110cf87600560408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b945094506000851415151561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b61115585612311565b92509250600083141515156111d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b816009819055506111e3338861240e565b6111ed8885611f31565b61120283600b5461204790919063ffffffff16565b600b819055508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a360019550505050505092915050565b60008060008085148061129157506000600a54145b1561129f57600092506112ff565b600a548511156112af57600a5494505b6112b885612311565b50915083156112fb576112f482600360408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9150508091505b8192505b505092915050565b60008060008085141561131d576000925061136d565b831561135d5761135685600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9250508194505b61136685611dc8565b5090508092505b505092915050565b60008060008060008560008111151561141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015481111515156114d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b6114df87612311565b955095506000861415151561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b8460098190555061159686600360408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b9350935060008414151515611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b61161d338861240e565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020915061167583836002015461204790919063ffffffff16565b826002018190555061169284600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167fafd310387603da0dcf44f11f54b04254b548c58b194e75f85851e849f0eef3078888670de0b6b3a76400006009548115156116e757fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156117765761177581611375565b5b61177e610b7a565b50565b61179634600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f106aac375bbcf013d1e52338bbf9e740009a1a3a6869f8daa1b72aa1620f5fec3442604051808381526020018281526020019250505060405180910390a2565b60008060008060008061180633610978565b9550600086111515611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002094506118d886866004015461217890919063ffffffff16565b856004018190555061191386600160408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b93509350600084141515156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611acc57611a2a338660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168689611c8a565b935060008414151515611acb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b611ad583611dc8565b9150915060008214151515611b78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600981905550611b893383611f31565b611b9e84600b5461204790919063ffffffff16565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f1abe689c7914cafd54f789eb0851e90cba235302161e81e259ee4c357c374d828784670de0b6b3a7640000600954811515611bf357fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b6000806000831415611c455760008081915080905091509150611c83565b8360200151611c618560000151856120d190919063ffffffff16565b811515611c6a57fe5b049150611c80828461228c90919063ffffffff16565b90505b9250929050565b600080600080600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250678ac7230489e800008360010154101515611db957611d1986600760408051908101604052908160008201548152602001600182015481525050611c2790919063ffffffff16565b91509150611d3482846003015461204790919063ffffffff16565b83600301819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f870e4e1dcfab6c09707448d3659b3d8097c084bf06e7467d6029940cd7122ee087854260405180848152602001838152602001828152602001935050505060405180910390a3809350611dbd565b8593505b505050949350505050565b600080600080600080611e056b204fce5e3e25026110000000611df760026009546120d190919063ffffffff16565b61228c90919063ffffffff16565b9350611e77611e56670de0b6b3a7640000611e488a611e3a60086b204fce5e3e250261100000006120d190919063ffffffff16565b6120d190919063ffffffff16565b6120d190919063ffffffff16565b611e6986876120d190919063ffffffff16565b61204790919063ffffffff16565b9250611e9960026b204fce5e3e250261100000006120d190919063ffffffff16565b611ece670de0b6b3a7640000611ec087611eb288612580565b61228c90919063ffffffff16565b6120d190919063ffffffff16565b811515611ed757fe5b049150611f20670de0b6b3a7640000611f05846b204fce5e3e250261100000006120d190919063ffffffff16565b811515611f0e57fe5b0460095461204790919063ffffffff16565b905081819550955050505050915091565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506000600a541190508015611fc057600a54611faf611f9e85600a5461204790919063ffffffff16565b600b546120d190919063ffffffff16565b811515611fb857fe5b04600b819055505b611fd583600a5461204790919063ffffffff16565b600a81905550611ff283836001015461204790919063ffffffff16565b8260010181905550801561204157612038600a5461201b600b54866120d190919063ffffffff16565b81151561202457fe5b04836004015461217890919063ffffffff16565b82600401819055505b50505050565b60008082840190508381101515156120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008414156120e65760009150612171565b82840290508284828115156120f757fe5b0414151561216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6d756c206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505b5092915050565b60008082840190508381121515156121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000808284039050838113151515612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515612306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600080600080600061233a6b204fce5e3e2502611000000060095461228c90919063ffffffff16565b925061239e670de0b6b3a7640000612367886b204fce5e3e250261100000006120d190919063ffffffff16565b81151561237057fe5b046123906b204fce5e3e250261100000008661204790919063ffffffff16565b61228c90919063ffffffff16565b91506123bc6002670de0b6b3a76400006120d190919063ffffffff16565b6123e1876123d3858761204790919063ffffffff16565b6120d190919063ffffffff16565b8115156123ea57fe5b049050670de0b6b3a76400008181151561240057fe5b048294509450505050915091565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506000905082600a54141561248957600a5461247c8360010154600b546120d190919063ffffffff16565b81151561248557fe5b0490505b600a546124b56124a485600a5461228c90919063ffffffff16565b600b546120d190919063ffffffff16565b8115156124be57fe5b04600b819055506124da83600a5461228c90919063ffffffff16565b600a819055506124f783836001015461228c90919063ffffffff16565b82600101819055506000600a54111561254f57612542600a54612525600b54866120d190919063ffffffff16565b81151561252e57fe5b04836004015461220290919063ffffffff16565b826004018190555061257a565b6000811415156125795761257081836004015461220290919063ffffffff16565b82600401819055505b5b50505050565b6000806002612590846001612047565b81151561259957fe5b0490508291505b818110156125d35780915060026125c282858115156125bb57fe5b0483612047565b8115156125cb57fe5b0490506125a0565b50919050565b60a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815250905600a165627a7a723058203c2b01b407df2d39007d37848590c1892471e33b8dc93699b4be10f7d3d21b340029

Swarm Source

bzzr://3c2b01b407df2d39007d37848590c1892471e33b8dc93699b4be10f7d3d21b34

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.